php与阿里云短信接口接入操作案例分析

吾爱主题 阅读:95 2021-10-15 14:51:00 评论:0

本文实例讲述了php与阿里云短信接口接入操作。分享给大家供大家参考,具体如下:

使用阿里云短信API,需要在控制台获取以下必要参数,其中需要自己手机验证+官方审核多次,尤其审核需要保持耐心。

1. accessKeyId  相当于你的个人账户密钥;

2. accessKeySecret 与上是成对的;

3. SignName  个人签名,在发出去的短信中,这个签名会显示在开头,类似 【签名】亲爱的用户...... 这种格式,SignName需要通过提交审核;

4.TemplateCode  模板代码,阿里云短信是无法完全自定义短信的,需要通过审核的模板,然后自己再替换掉模板中的变量,如模板:“您的验证码是$[code]” ,code就是变量,使用时需设置变量值{"code":"12345"}(设置变量值的过程在demo中实现),短信发出去后变成:“您的验证码是12345”,每个通过审核的模板会提供一个模板代码;

最新的阿里云短信接口,适用于阿里大于搬家以后的情况。

之前一直用阿里大于的短信接口,最近上项目时发现阿里大于悄悄地搬家到了阿里云!阿里云的SDK文件繁多,看得一头雾水!下面代码是最新的可适用于阿里云短信服务的类,亲测成功!

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 <?php /**   * 阿里云短信验证码发送类   * @author Administrator   *   */ class Sms {      // 保存错误信息      public $error ;      // Access Key ID      private $accessKeyId = '' ;      // Access Access Key Secret      private $accessKeySecret = '' ;      // 签名      private $signName = '' ;      // 模版ID      private $templateCode = '' ;      public function __construct( $cofig = array ()) {        $cofig = array (            'accessKeyId' => 'xxxxxxxxxxx' ,            'accessKeySecret' => 'xxxxxxxxxx' ,            'signName' => '你的签名' ,            'templateCode' => 'SMS_76510109'        );        // 配置参数        $this ->accessKeyId = $cofig [ 'accessKeyId' ];        $this ->accessKeySecret = $cofig [ 'accessKeySecret' ];        $this ->signName = $cofig [ 'signName' ];        $this ->templateCode = $cofig [ 'templateCode' ];      }      private function percentEncode( $string ) {        $string = urlencode ( $string );        $string = preg_replace ( '/\+/' , '%20' , $string );        $string = preg_replace ( '/\*/' , '%2A' , $string );        $string = preg_replace ( '/%7E/' , '~' , $string );        return $string ;      }      /**     * 签名     *     * @param unknown $parameters          * @param unknown $accessKeySecret          * @return string     */      private function computeSignature( $parameters , $accessKeySecret ) {        ksort ( $parameters );        $canonicalizedQueryString = '' ;        foreach ( $parameters as $key => $value ) {          $canonicalizedQueryString .= '&' . $this ->percentEncode ( $key ) . '=' . $this ->percentEncode ( $value );        }        $stringToSign = 'GET&%2F&' . $this ->percentencode ( substr ( $canonicalizedQueryString , 1 ) );        $signature = base64_encode ( hash_hmac ( 'sha1' , $stringToSign , $accessKeySecret . '&' , true ) );        return $signature ;      }      /**     * @param unknown $mobile          * @param unknown $verify_code          *     */      public function send_verify( $mobile , $verify_code ) {        $params = array //此处作了修改            'SignName' => $this ->signName,            'Format' => 'JSON' ,            'Version' => '2017-05-25' ,            'AccessKeyId' => $this ->accessKeyId,            'SignatureVersion' => '1.0' ,            'SignatureMethod' => 'HMAC-SHA1' ,            'SignatureNonce' => uniqid (),            'Timestamp' => gmdate ( 'Y-m-d\TH:i:s\Z' ),            'Action' => 'SendSms' ,            'TemplateCode' => $this ->templateCode,            'PhoneNumbers' => $mobile ,            //'TemplateParam' => '{"code":"' . $verify_code . '"}'            'TemplateParam' => '{"time":"1234"}'  //更换为自己的实际模版        );        //var_dump($params);die;        // 计算签名并把签名结果加入请求参数        $params [ 'Signature' ] = $this ->computeSignature ( $params , $this ->accessKeySecret );        // 发送请求(此处作了修改)        //$url = 'https://sms.aliyuncs.com/?' . http_build_query ( $params );        $url = 'http://dysmsapi.aliyuncs.com/?' . http_build_query ( $params );        $ch = curl_init ();        curl_setopt ( $ch , CURLOPT_URL, $url );        curl_setopt ( $ch , CURLOPT_SSL_VERIFYPEER, FALSE );        curl_setopt ( $ch , CURLOPT_SSL_VERIFYHOST, FALSE );        curl_setopt ( $ch , CURLOPT_RETURNTRANSFER, 1 );        curl_setopt ( $ch , CURLOPT_TIMEOUT, 10 );        $result = curl_exec ( $ch );        curl_close ( $ch );        $result = json_decode ( $result , true );        //var_dump($result);die;        if (isset ( $result [ 'Code' ] )) {          $this ->error = $this ->getErrorMessage ( $result [ 'Code' ] );          return false;        }        return true;      }      /**     * 获取详细错误信息     *     * @param unknown $status          */      public function getErrorMessage( $status ) {        // 阿里云的短信 乱八七糟的(其实是用的阿里大于)        // https://api.alidayu.com/doc2/apiDetail?spm=a3142.7629140.1.19.SmdYoA&apiId=25450        $message = array (            'InvalidDayuStatus.Malformed' => '账户短信开通状态不正确' ,            'InvalidSignName.Malformed' => '短信签名不正确或签名状态不正确' ,            'InvalidTemplateCode.MalFormed' => '短信模板Code不正确或者模板状态不正确' ,            'InvalidRecNum.Malformed' => '目标手机号不正确,单次发送数量不能超过100' ,            'InvalidParamString.MalFormed' => '短信模板中变量不是json格式' ,            'InvalidParamStringTemplate.Malformed' => '短信模板中变量与模板内容不匹配' ,            'InvalidSendSms' => '触发业务流控' ,            'InvalidDayu.Malformed' => '变量不能是url,可以将变量固化在模板中'        );        if (isset ( $message [ $status ] )) {          return $message [ $status ];        }        return $status ;      }   }

调用方法:

?
1 2 3 4 5 6 7 8 9 10 11 12 //生成验证码 $mobile = 'xxxxxxx' ; $code = rand ( 1000, 9999 ); //发送短信 $sms = new Sms();   //测试模式 $status = $sms ->send_verify( $mobile , $code ); if (! $status ) {   echo $sms ->error;   }

希望本文所述对大家PHP程序设计有所帮助。

原文链接:https://www.cnblogs.com/zxf100/p/11473662.html

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容