• #PHP# 华为云 API 方式发送短信


    使用给华为云 消息 服务 API 方式发送短信

    代码来自华为云,已通过测试

    <?php
    /**
     * 华为云发送短信示例代码
     * 本段代码需要使用自己的配置信息才能正常运行,出配置信息外,不需要改动任何代码内容即可运行
     * 
     * @version 0.1
     * @author   huawei cloud(https://support.huaweicloud.com/devg-msgsms/sms_04_0003.html)
     * 
     * 2019-03-05 IIS10 + PHP 7.2.5调试通过
     */
    
     //
     // 为避免误调用而加入的提示,测试&部署时需移除本段代码
     //
    $tips = array(
                "code"=>"200",
                "msg"=>"Config ur info first",
                "time"=>date("h:i:sa")
            );
    die(json_encode($tips));
    
    //必填,请参考"开发准备"获取如下数据,替换为实际值
    $url = 'https://api.rtc.huaweicloud.com:10443/sms/batchSendSms/v1'; //APP接入地址+接口访问URI
    $APP_KEY = ''; //APP_Key
    $APP_SECRET = ''; //APP_Secret
    $sender = ''; //国内短信签名通道号或国际/港澳台短信通道号
    $TEMPLATE_ID = ''; //模板ID
    
    //条件必填,国内短信关注,当templateId指定的模板类型为通用模板时生效且必填,必须是已审核通过的,与模板类型一致的签名名称
    //国际/港澳台短信不用关注该参数
    $signature = ''; //签名名称
    
    //必填,全局号码格式(包含国家码),示例:+8615123456789,多个号码之间用英文逗号分隔
    $receiver = '+8615123456789,+8615123456789'; //短信接收人号码
    
    //选填,短信状态报告接收地址,推荐使用域名,为空或者不填表示不接收状态报告
    $statusCallback = '';
    
    /**
     * 选填,使用无变量模板时请赋空值 $TEMPLATE_PARAS = '';
     * 单变量模板示例:模板内容为"您的验证码是${NUM_6}"时,$TEMPLATE_PARAS可填写为'["369751"]'
     * 双变量模板示例:模板内容为"您有${NUM_2}件快递请到${TXT_32}领取"时,$TEMPLATE_PARAS可填写为'["3","人民公园正门"]'
     * 查看更多模板变量规则:常见问题>业务规则>短信模板内容审核标准
     * @var string $TEMPLATE_PARAS
     */
    $TEMPLATE_PARAS = '["369751"]'; //模板变量,根据自身使用的模板,其值长度和个数与模板对应
    
    //请求Headers
    $headers = [
        'Content-Type: application/x-www-form-urlencoded',
        'Authorization: WSSE realm="SDP",profile="UsernameToken",type="Appkey"',
        'X-WSSE: ' . buildWsseHeader($APP_KEY, $APP_SECRET)
    ];
    //请求Body
    $data = http_build_query([
        'from' => $sender,
        'to' => $receiver,
        'templateId' => $TEMPLATE_ID,
        'templateParas' => $TEMPLATE_PARAS,
        'statusCallback' => $statusCallback,
    //    'signature' => $signature //使用国内短信通用模板时,必须填写签名名称
    ]);
    
    $context_options = [
        'http' => ['method' => 'POST', 'header'=> $headers, 'content' => $data],
        'ssl' => ['verify_peer' => false, 'verify_peer_name' => false] //为防止因HTTPS证书认证失败造成API调用失败,需要先忽略证书信任问题
    ];
    print_r($context_options) . PHP_EOL; //打印请求信息
    
    $response = file_get_contents($url, false, stream_context_create($context_options));
    print_r(json_decode($response)) . PHP_EOL; //打印响应信息
    
    /**
     * 构造X-WSSE参数值
     * @param string $appKey
     * @param string $appSecret
     * @return string
     */
    function buildWsseHeader(string $appKey, string $appSecret){
        date_default_timezone_set('Asia/Shanghai');
        $now = date('Y-m-dTH:i:s'); //Created
        $nonce = uniqid(); //Nonce
        $base64 = base64_encode(hash('sha256', ($nonce . $now . $appSecret))); //PasswordDigest
        return sprintf("UsernameToken Username="%s",PasswordDigest="%s",Nonce="%s",Created="%s"",
            $appKey, $base64, $nonce, $now);
    }
    ?>
    
    

  • 相关阅读:
    AVOID "throw e" !!!
    C++基本功: 全面掌握const, volatile 和 mutable关键字
    转贴:asp.netN层代码示例
    管理强类型生成器(Mgmtclassgen.exe) MSDN
    WMI 例子,获取MAC地址
    SQL Server: convert varbinary to varchar
    C++: memset, memcpy 和strcpy的根本区别
    巧妙突破win2003系统的种种限制
    Question about sql server's linked server
    iOS APP开发概述学习笔记001
  • 原文地址:https://www.cnblogs.com/cinlap/p/10553170.html
Copyright © 2020-2023  润新知