inkwhite

阿里云短信接口

配置文件

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 \Common\Model\Alisms($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-d\TH:i:s\Z\'; 
    
    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));
    }
}

 

分类:

技术点:

相关文章:

  • 2021-08-11
  • 2022-12-23
  • 2021-12-28
  • 2021-12-22
  • 2022-02-08
  • 2022-12-23
  • 2022-12-23
  • 2021-12-31
猜你喜欢
  • 2022-01-01
  • 2021-12-22
  • 2021-12-28
  • 2022-12-23
  • 2021-06-15
  • 2022-01-01
  • 2022-01-01
相关资源
相似解决方案