阿里云 短信验证

/**
      * 阿里云 短信验证
      * @param $phone    手机号码
      * @param null $mobile_code     验证码
      * @param null $template_code   短信模版
      */
     public  function  phoneCode( $phone , $mobile_code =null, $template_code =null){
         if  (! $mobile_code ){ $mobile_code  $this ->random(6,1);}
         if (! $template_code ){ $template_code = 'SMS_37650042' ;}
         $target  "https://sms.aliyuncs.com/?" ;
         // 注意使用GMT时间
         date_default_timezone_set( "GMT" );
         $dateTimeFormat  'Y-m-d\TH:i:s\Z' // ISO8601规范
         $accessKeyId  'LTAIGsgBVt8MDTyf' ;       // 这里填写您的Access Key ID
         $accessKeySecret  '5koNqwSpKi0SfjfyHUWqF0lCLIwuoS' ;   // 这里填写您的Access Key Secret
         $ParamString = "{\"code\":\"" . strval ( $mobile_code ). "\",\"time\":\"15\"}" ;
         $data  array (
             // 公共参数
             'SignName' => '代码派' ,
             'Format'  =>  'XML' ,
             'Version'  =>  '2016-09-27' ,
             'AccessKeyId'  =>  $accessKeyId ,
             'SignatureVersion'  =>  '1.0' ,
             'SignatureMethod'  =>  'HMAC-SHA1' ,
             'SignatureNonce' => uniqid(),
             'Timestamp'  =>  date ( $dateTimeFormat ),
             // 接口参数
             'Action'  =>  'SingleSendSms' ,
             'TemplateCode'  =>  $template_code ,
             'RecNum'  =>  $phone ,
             'ParamString'  =>  $ParamString
         );
         // 计算签名并把签名结果加入请求参数
         //echo $data['Version']."<br>";
         //echo $data['Timestamp']."<br>";
         $data [ 'Signature' ] =  $this ->computeSignature( $data $accessKeySecret );
         // 发送请求
         $result  $this ->xml_to_array( $this ->https_request( $target .http_build_query( $data )));
         print_r( $result );
     }
     public  function  https_request( $url )
     {
         $curl  = curl_init();
         curl_setopt( $curl , CURLOPT_URL,  $url );
         curl_setopt( $curl , CURLOPT_SSL_VERIFYPEER, FALSE);
         curl_setopt( $curl , CURLOPT_SSL_VERIFYHOST, FALSE);
         curl_setopt( $curl , CURLOPT_RETURNTRANSFER, 1);
         $data  = curl_exec( $curl );
         if  (curl_errno( $curl )) { return  'ERROR ' .curl_error( $curl );}
         curl_close( $curl );
         return  $data ;
     }
     public  function  xml_to_array( $xml ){
         $reg  "/<(\w+)[^>]*>([\\x00-\\xFF]*)<\\/\\1>/" ;
         if (preg_match_all( $reg $xml $matches )){
             $count  count ( $matches [0]);
             for ( $i  = 0;  $i  $count $i ++){
                 $subxml $matches [2][ $i ];
                 $key  $matches [1][ $i ];
                 if (preg_match(  $reg $subxml  )){
                     $arr [ $key ] =  $this ->xml_to_array(  $subxml  );
                 } else {
                     $arr [ $key ] =  $subxml ;
                 }
             }
         }
         return  @ $arr ;
     }
     public  function  random( $length  = 6 ,  $numeric  = 0) {
         PHP_VERSION <  '4.2.0'  && mt_srand((double)microtime() * 1000000);
         if ( $numeric ) {
             $hash  = sprintf( '%0' . $length . 'd' , mt_rand(0, pow(10,  $length ) - 1));
         else  {
             $hash  '' ;
             /* $chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789abcdefghjkmnpqrstuvwxyz';*/
             $chars  '0123456789' ;
             $max  strlen ( $chars ) - 1;
             for ( $i  = 0;  $i  $length $i ++) {
                 $hash  .=  $chars [mt_rand(0,  $max )];
             }
         }
         return  $hash ;
     }
     public  function  percentEncode( $str )
     {
         // 使用urlencode编码后,将"+","*","%7E"做替换即满足ECS API规定的编码规范
         $res  = urlencode( $str );
         $res  = preg_replace( '/\+/' '%20' $res );
         $res  = preg_replace( '/\*/' '%2A' $res );
         $res  = preg_replace( '/%7E/' '~' $res );
         return  $res ;
     }
 
 
     public  function  computeSignature( $parameters $accessKeySecret )
     {
         // 将参数Key按字典顺序排序
         ksort( $parameters );
         // 生成规范化请求字符串
         $canonicalizedQueryString  '' ;
         foreach ( $parameters  as  $key  =>  $value )
         {
             $canonicalizedQueryString  .=  '&'  $this ->percentEncode( $key )
                 '='  $this ->percentEncode( $value );
         }
         // 生成用于计算签名的字符串 stringToSign
         $stringToSign  'GET&%2F&'  $this ->percentencode( substr ( $canonicalizedQueryString , 1));
         //echo "<br>".$stringToSign."<br>";
         // 计算签名,注意accessKeySecret后面要加上字符'&'
         $signature  base64_encode (hash_hmac( 'sha1' $stringToSign $accessKeySecret  '&' , true));
         return  $signature ;
     }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值