• TP3.2.3 接入阿里sms 短信接口


    阿里云短信接口

    配置文件

    config.php

    //阿里大鱼
        'Ali_SMS' =>array(
            'sms_temp' =>'短信模板',
            'sms_sign' =>'签名',
            'appkey'   =>'appkey',
            'secretKey'=>'secretKey',
        ),

    TestController.php

    Vendor('alisms.Alisms'); 
            $alisms = new Alisms(C('Ali_SMS.appkey'),C('Ali_SMS.secretKey'));
            $mobile = $phone;
            $temp_code   = C('Ali_SMS.sms_temp');
    
            $paramString = '{"code":"'.$code.'"}';
            $alisms->signName = C('Ali_SMS.sms_sign');
            $re = $alisms->smsend($mobile,$temp_code,$paramString);
            if($re['Code'] =='OK'){
                $info['status'] = 1;
                $info['info']   = '短信发送成功!';
                echo json_encode($info);
                exit;
            }else{
                $info['info']   = '短信发送失败';
                $info['status'] = 0;
                echo json_encode($info);
                exit;
            }

    Alisms.php

    <?php
    
    /**
     * 阿里云短信接口
     * @author 墨白<453885726@qq.com>
     * 示例
     *     $alisms = new CommonModelAlisms($accessKeyId,$accessKeySecret);
     *       $mobile = '18788830181';
     *       $code   = 'SMS_36225243';
     *       $paramString = '{"code":"344556"}';
     *       $re = $alisms->smsend($mobile,$code,$paramString);
     *       print_r($re);
     *
     */
     
    class Alisms{
        public $config = array(
                  'Format'  =>'json', //返回值的类型,支持JSON与XML。默认为XML
                  'Version' =>'2017-05-25', //API版本号,为日期形式:YYYY-MM-DD,本版本对应为2016-09-27
                  'SignatureMethod' =>'HMAC-SHA1', //签名方式,目前支持HMAC-SHA1
                  'SignatureVersion'=>'1.0',
                );
        private    $accessKeySecret;    
        private    $http = 'http://dysmsapi.aliyuncs.com';//https://sms.aliyuncs.com/';        //短信接口
        private    $dateTimeFormat = 'Y-m-dTH:i:s'; 
        
        public     $signName = '短信签名'; //管理控制台中配置的短信签名(状态必须是验证通过)
        public     $method = 'GET';
        /**
        *发送短信
        *@AccessKeyId      阿里云申请的 Access Key ID
        *@AccessKeySecret  阿里云申请的 Access Key Secret
        */
        function __construct($accessKeyId,$accessKeySecret){
             $this->config['AccessKeyId'] = $accessKeyId;
             $this->AccessKeySecret = $accessKeySecret;
        } 
        /**
        *发送短信
        *@mobile  目标手机号,多个手机号可以逗号分隔 
        *@code 短信模板的模板CODE
        *@ParamString  短信模板中的变量;,参数格式{“no”:”123456”}, 个人用户每个变量长度必须小于15个字符
        */
        public function smsend($mobile,$code,$ParamString){
            $apiParams = $this->config;
            $apiParams["Action"]         = 'SendSms';//'SingleSendSms';
            $apiParams['TemplateCode']     = $code;  //短信模板的模板CODE
            //$apiParams['RecNum']         = $mobile;   //目标手机号,多个手机号可以逗号分隔
            //$apiParams['ParamString']     = $ParamString;   //短信模板中的变量;,此参数传递{“no”:”123456”}, 个人用户每个变量长度必须小于15个字符
            $apiParams['SignName']         = $this->signName;   //管理控制台中配置的短信签名(状态必须是验证通过)
            date_default_timezone_set("GMT");
            $apiParams["Timestamp"] = date($this->dateTimeFormat);
            $apiParams["SignatureNonce"]   = md5(md5('wbh').rand(100000,999999).uniqid()); //唯一随机数
    
            $apiParams['RegionId'] = 'cn-hangzhou';
            $apiParams['PhoneNumbers'] = $mobile;
            $apiParams['TemplateParam'] = $ParamString;
    
            $apiParams["Signature"] = $this->computeSignature($apiParams, $this->AccessKeySecret);//签名
    
            $tag = '?'; 
            $requestUrl = $this->http;
            foreach ($apiParams as $apiParamKey => $apiParamValue){
                $requestUrl .= $tag."$apiParamKey=" . urlencode($apiParamValue);
                $tag = '&';
            }
            return $this->postSMS($requestUrl);
        }
        private function postSMS($url){
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            $output = curl_exec($ch);
            curl_close($ch);
            return json_decode($output,true);
    /*
            $opts = array( 
                'http'=>array( 
                    'method'=>$this->method, 
                    'timeout'=>600, 
                    'header'=>'Content-Type: application/x-www-form-urlencoded',
                ) 
            ); 
            $html = file_get_contents($url, false, stream_context_create($opts));     
            if($html){
                return json_decode($html,true);
            }else{
                return false;
            }*/
        }
    
        //生成取短信签名
        private function computeSignature($parameters, $accessKeySecret){
            ksort($parameters);
            $canonicalizedQueryString = '';
            foreach($parameters as $key => $value){
                $canonicalizedQueryString .= '&' . $this->percentEncode($key). '=' . $this->percentEncode($value);
            }    
            $stringToSign = $this->method.'&%2F&' . $this->percentencode(substr($canonicalizedQueryString, 1));
            $signature = $this->signString($stringToSign, $accessKeySecret."&");
            return $signature;
        }
        protected function percentEncode($str){
            $res = urlencode($str);
            $res = preg_replace('/+/', '%20', $res);
            $res = preg_replace('/*/', '%2A', $res);
            $res = preg_replace('/%7E/', '~', $res);
            return $res;
        }
        private function signString($source, $accessSecret){
            return    base64_encode(hash_hmac('sha1', $source, $accessSecret, true));
        }
    }
  • 相关阅读:
    Windows编程系列:Windows中的消息
    python 日志 logging模块
    wx-xcx
    大坑:perspectiveTransform
    在移动硬盘上装系统
    Django
    双边滤波(Bilateral filter)
    Mesh Deformation with Laplacian Coordinates
    C++五十一篇 -- VS2017开发人员新闻无法联网
    idea 修改Git密码和账号后,Git提交账号的没有改变
  • 原文地址:https://www.cnblogs.com/inkwhite/p/8607464.html
Copyright © 2020-2023  润新知