当前位置:网站首页>Alibaba Cloud SMS Sending
Alibaba Cloud SMS Sending
2022-08-03 08:34:00 【Purgatory001】
废话不多说,与文章
区别不大,The most important signatures are resolved,The rest are brothers.
<?php
/**
* 阿里开放文档签名
* @author lianyu001<[email protected]>
* 2022-08-01
*/
class Ali_sms {
public $data;
public $accessKeyId = 'xxx'; //阿里后台拿
public $accessKeySecret = 'xxxx'; //阿里后台拿
public $url = 'https://dysmsapi.aliyuncs.com?'; //依据服务器那个快拿哪个,这个杭州的
/**
* new 的时候初始化参数
* @param ary $actionArray 要调用的开放接口参数 数组,可以去除公共参数,后续如果有公共参数,自行添加在数组中或者 该类中都行
* @param str $url 访问的服务器地址,看下自己服务器离哪个区域近拿哪个
*/
public function __construct($actionArray, $url='https://dysmsapi.aliyuncs.com?') {
$this->url = $url;
// date_default_timezone_set("GTM");
date_default_timezone_set("UTC");
// date_default_timezone_set('Asia/Shanghai');
$this->data = array(
// 公共参数
'Format' => 'JSON',//返回参数格式
'Version' => '2017-05-25',//版本
'AccessKeyId' => $this->accessKeyId,
'SignatureVersion' => '1.0',//加餐版本
'SignatureMethod' => 'HMAC-SHA1',//加餐方式,参数加密方式
'SignatureNonce' => uniqid(),//访问唯一标识,防止重复
'Timestamp' => date('Y-m-d') . 'T' . date('H:i:s') . 'Z',
'SignatureVersion' => '1.0',
);
//判断输入的参数是否为数组
if (is_array($actionArray)) {
$this->data = array_merge($this->data, $actionArray);//数组合并
}
}
/**
* 传递参数处理
* 按理中间3行要加上的,我这边报警告,就直接注释了
* @param str $str 传递参数值
* @return str 处理结果参数
*/
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;
}
/**
* 加密
* @param ary $parameters 加密参数
* @param str $accessKeySecret 秘钥,第三方可以拿到
* @return str 返回签名
*/
public function computeSignature($parameters, $accessKeySecret) {
// 将参数Key按字典顺序排序
ksort($parameters);
// 生成规范化请求字符串
$canonicalizedQueryString = '';
foreach ($parameters as $key => $value) {
$canonicalizedQueryString .= '&' . $this->percentEncode($key)
. '=' . $this->percentEncode($value);
}
// 生成用于计算签名的字符串 stringToSign
$stringToSign = 'POST&%2F&' . $this->percentencode(substr($canonicalizedQueryString, 1));
// 计算签名,注意accessKeySecret后面要加上字符'&'
$signature = base64_encode(hash_hmac('sha1', $stringToSign, $accessKeySecret . '&', true));
return $signature;
}
/**
* 使用阿里签名访问openapi接口
* @return 结果
*/
public function callInterface() {
// 计算签名并把签名结果加入请求参数
$this->data['Signature'] = $this->computeSignature($this->data, $this->accessKeySecret);
var_dump($this->data);
var_dump($this->url);
// return $this->data;
// 发送请求
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type:application/x-www-form-urlencoded']);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书和hosts
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); // 不从证书中检查SSL加密算法是否存在
curl_setopt($ch, CURLOPT_URL, $this->url . http_build_query($this->data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($ch);
$res = json_decode($res, true);
return $res;
}
/**
* 测试 发送短信
*/
function test() {
$arr=[
'Action' => 'SendSms',
'PhoneNumbers'=>'18520745660',
'SignName'=>'xxx',//签名,start of text message【xxx】
'TemplateCode'=>'SMS_247666666',//模板名称
'TemplateParam'=>'{"code":"52013"}',//parameters in the templatecode或其他
];
$obj = new Ali_sms($arr);
$data = $obj->callInterface();
var_dump($data);die;
}
}
注意点:url,The address to receive the request.服务接入点 - 短信服务 - 阿里云
Nothing else is required,看下文档,Alibaba Cloud's documentation is simple,Artificial is also very comfortable.For me who refuses to download too many and too large filessdk 或者 demo 的人来说,简直了,A pleasant communication.
运行结果如下:
array(4) {
["Message"]=>
string(2) "OK"
["RequestId"]=>
string(36) "CC9F353C-569A-5958-95C6-1EA7391EB299"
["Code"]=>
string(2) "OK"
["BizId"]=>
string(20) "705201159316521496^0"
}边栏推荐
猜你喜欢
随机推荐
品牌方发行NFT时,应如何考量实用性?
Exch:重命名或删除默认邮箱数据库
LINGO 18.0软件安装包下载及安装教程
C# 一周入门高级编程之《C#-接口》Day Two
【收获合辑】k-NN与检索任务的异同+jupyter转pdf
Arduino框架下对ESP32 NVS非易失性存储解读以及应用示例
10分钟带你入门chrome(谷歌)浏览器插件开发
ArcEngine (5) use the ICommand interface to achieve zoom in and zoom out
HCIA实验(07)
Exception: Dataset not found.解决办法
牛客 - 鼠标的天选(字符串哈希)
审批流设计
关于Unity,Laya学习,第一步加载Unity加载场景
ArcEngine(八)用IWorkspaceFactory加载矢量数据
dflow入门5——Big step & Big parameter
第十二天&接口和协议
Unity关于编辑器扩展自定义标签,方便扩展Inspector
编程踩坑合集
关于Unity自定义Inspector面板的一些自定义编辑器扩展
MySQL数据库————数据库与vs的连接








