PHP操作阿里短信API

阿里云短信API服务简介

操作过程和普通接入第三方接口大同小异,需要用到的参数有公共参数,请求参数。

请求过程也就是 传递数据->验签->接收数据->返回信息。

参数阿里云控制台有详细说明,下面代码也会提及。

代码

class SmsController
    {
    protected $data;//公共参数+请求参数
    private $accessKeySecret = '阿里用提供给用户的密匙';
    /**
    * 构造方法,初始化公共参数以及请求参数
    * @param $RecNum 接受者电话
    * @param $ParamString 信息内容  //一般情况下为json
    */
    function __construct($RecNum,$ParamString)
    { 
        parent::__construct();
        //这里注意时间定义为GMT时间
        date_default_timezone_set('GMT');
        $this->data['SignName'] = '短信签名';
        $this->data['Format'] = 'JSON/XML';//反馈数据格式定义
        $this->data['Version'] = '2016-09-27';//版本
        $this->data['AccessKeyId'] = '签名id';
        $this->data['Timestamp'] = date('Y-m-d\TH:i:s\Z');//按照要求的时间格式
        $this->data['SignatureMethod'] = 'HMAC-SHA1';
        $this->data['SignatureVersion'] = '1.0';
        $this->data['SignatureNonce'] = uniqid();//随机数,验证唯一
        $this->data['Action'] = 'SingleSendSms';
        $this->data['TemplateCode'] = '模板id';
        $this->data['RecNum'] = $RecNum;
        $this->data['ParamString'] = $ParamString;
    }
    /**
    * 密签的url编码以及按照眼球将url编码后的一些符号切换
    */
    protected 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;  
    }  
    /**
    * 构造方法,初始化公共参数以及请求参数
    * @param $parameters 请求参数
    * @param $accessKeySecret 密匙
    */
    protected computeSignature($data,$accessKeySecret)  
    {  
        // 将参数Key按字典顺序排序  
        ksort($data);  
        // 生成规范化请求字符串  
        $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));  
        $this->data['Signature'] = $signature;  
    }  
    /**
    * 用curl get方法执行请求
    */
    public function https_request()  
    {  
        $this->computeSignature($this->data,$this->accessKeySecret);
        $url = "https://sms.aliyuncs.com/?".http_build_query($this->data);
        $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;  
    }  
}

**

以上是发送通知信息类短信。
验证码,修改密码等等各类的方法,核心与其一致。

你可能感兴趣的:(PHP,api,短信,阿里云)