PHP群:95885625 Hbuilder+MUI群:81989597 站长QQ:634381967
    您现在的位置: 首页 > 开发编程 > ThinkPhp教程 > 正文

    thinkphp整合阿里云短信验证码API发送类

    作者:admin来源:网络浏览:时间:2020-09-30 00:07:50我要评论
    导读:在做注册的时候需要手机验证码,今天整合使用阿里云短信验证码做短息验证,B5教程网把封装好的发送类分享给大家。
    在做注册的时候需要手机验证码,今天整合使用阿里云短信验证码做短息验证,B5教程网把封装好的发送类分享给大家。

    1. <?php 
    2. /** 
    3.  * 阿里云短信验证码发送类 
    4.  * @author Administrator 
    5.  * 
    6.  */ 
    7. class Sms { 
    8.     // 保存错误信息 
    9.     public $error; 
    10.     // Access Key ID 
    11.     private $accessKeyId = ''
    12.     // Access Access Key Secret 
    13.     private $accessKeySecret = ''
    14.     // 签名 
    15.     private $signName = ''
    16.     // 模版ID 
    17.     private $templateCode = ''
    18.     public function __construct($cofig = array()) { 
    19.         $cofig = array ( 
    20.                 'accessKeyId' => '***************'
    21.                 'accessKeySecret' => '******************'
    22.                 'signName' => '七零'
    23.                 'templateCode' => 'SMS_25300059'  
    24.         ); 
    25.         // 配置参数 
    26.         $this->accessKeyId = $cofig ['accessKeyId']; 
    27.         $this->accessKeySecret = $cofig ['accessKeySecret']; 
    28.         $this->signName = $cofig ['signName']; 
    29.         $this->templateCode = $cofig ['templateCode']; 
    30.     } 
    31.     private function percentEncode($string) { 
    32.         $string = urlencode ( $string ); 
    33.         $string = preg_replace ( '/\+/''%20', $string ); 
    34.         $string = preg_replace ( '/\*/''%2A', $string ); 
    35.         $string = preg_replace ( '/%7E/''~', $string ); 
    36.         return $string; 
    37.     } 
    38.     /** 
    39.      * 签名 
    40.      * 
    41.      * @param unknown $parameters             
    42.      * @param unknown $accessKeySecret             
    43.      * @return string 
    44.      */ 
    45.     private function computeSignature($parameters, $accessKeySecret) { 
    46.         ksort ( $parameters ); 
    47.         $canonicalizedQueryString = ''
    48.         foreach ( $parameters as $key => $value ) { 
    49.             $canonicalizedQueryString .= '&' . $this->percentEncode ( $key ) . '=' . $this->percentEncode ( $value ); 
    50.         } 
    51.         $stringToSign = 'GET&%2F&' . $this->percentencode ( substr ( $canonicalizedQueryString, 1 ) ); 
    52.         $signature = base64_encode ( hash_hmac ( 'sha1', $stringToSign, $accessKeySecret . '&'true ) ); 
    53.         return $signature; 
    54.     } 
    55.     /** 
    56.      * 发送验证码 https://help.aliyun.com/document_detail/44364.html?spm=5176.doc44368.6.126.gSngXV 
    57.      * 
    58.      * @param unknown $mobile             
    59.      * @param unknown $verify_code             
    60.      * 
    61.      */ 
    62.     public function send_verify($mobile, $verify_code) { 
    63.         $params = array ( 
    64.                 // 公共参数 
    65.                 'SignName' => $this->signName, 
    66.                 'Format' => 'JSON'
    67.                 'Version' => '2016-09-27'
    68.                 'AccessKeyId' => $this->accessKeyId, 
    69.                 'SignatureVersion' => '1.0'
    70.                 'SignatureMethod' => 'HMAC-SHA1'
    71.                 'SignatureNonce' => uniqid (), 
    72.                 'Timestamp' => gmdate ( 'Y-m-d\TH:i:s\Z' ), 
    73.                 // 接口参数 
    74.                 'Action' => 'SingleSendSms'
    75.                 'TemplateCode' => $this->templateCode, 
    76.                 'RecNum' => $mobile, 
    77.                 'ParamString' => '{"no":"' . $verify_code . '"}'  
    78.         ); 
    79.         // 计算签名并把签名结果加入请求参数 B5教程网 www.bcty365.com 
    80.         $params ['Signature'] = $this->computeSignature ( $params, $this->accessKeySecret ); 
    81.         // 发送请求 
    82.         $url = 'https://sms.aliyuncs.com/?' . http_build_query ( $params ); 
    83.          
    84.         $ch = curl_init (); 
    85.         curl_setopt ( $ch, CURLOPT_URL, $url ); 
    86.         curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, FALSE ); 
    87.         curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, FALSE ); 
    88.         curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 ); 
    89.         curl_setopt ( $ch, CURLOPT_TIMEOUT, 10 ); 
    90.         $result = curl_exec ( $ch ); 
    91.         curl_close ( $ch ); 
    92.         $result = json_decode ( $result, true ); 
    93.         if (isset ( $result ['Code'] )) { 
    94.             $this->error = $this->getErrorMessage ( $result ['Code'] ); 
    95.             return false
    96.         } 
    97.         return true
    98.     } 
    99.     /** 
    100.      * 获取详细错误信息 
    101.      * 
    102.      * @param unknown $status             
    103.      */ 
    104.     public function getErrorMessage($status) { 
    105.         // 阿里云的短信 乱八七糟的(其实是用的阿里大于) 
    106.         // https://api.alidayu.com/doc2/apiDetail?spm=a3142.7629140.1.19.SmdYoA&apiId=25450 
    107.         $message = array ( 
    108.                 'InvalidDayuStatus.Malformed' => '账户短信开通状态不正确'
    109.                 'InvalidSignName.Malformed' => '短信签名不正确或签名状态不正确'
    110.                 'InvalidTemplateCode.MalFormed' => '短信模板Code不正确或者模板状态不正确'
    111.                 'InvalidRecNum.Malformed' => '目标手机号不正确,单次发送数量不能超过100'
    112.                 'InvalidParamString.MalFormed' => '短信模板中变量不是json格式'
    113.                 'InvalidParamStringTemplate.Malformed' => '短信模板中变量与模板内容不匹配'
    114.                 'InvalidSendSms' => '触发业务流控'
    115.                 'InvalidDayu.Malformed' => '变量不能是url,可以将变量固化在模板中'  
    116.         ); 
    117.         if (isset ( $message [$status] )) { 
    118.             return $message [$status]; 
    119.         } 
    120.         return $status; 
    121.     } 
    1. //生成验证码 
    2. $code = rand ( 1000, 9999 ); 
    3. //发送短信 
    4. $sms = new Sms(); 
    5.      
    6. //测试模式 
    7. $status = $sms->send_verify($mobile, $code); 
    8.      
    9. if (!$status) { 
    10.     echo $sms->error; 
    11. echo 'success'

     

    转载请注明(B5教程网)原文链接:https://b5.mxunkeji.com/content-83-5361-1.html
    相关热词搜索: