阿里云短信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;
}
}
**
以上是发送通知信息类短信。
验证码,修改密码等等各类的方法,核心与其一致。