当前位置:网站首页>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" }
边栏推荐
- Pop Harmony Basics Big Notes
- 牛客 - 最佳直播时间 (差分)
- 多线程下的单例模式
- 关于Unity,Laya学习,第一步加载Unity加载场景
- 国内IT市场还有发展吗?有哪些创新好用的IT运维工具可以推荐?
- scala reduce、reduceLeft 、reduceRight 、fold、foldLeft 、foldRight
- ArcEngine (six) use the tool tool to realize the zoom in, zoom out and translation of the pull box
- 【TPC-DS】DF的SQL(Data Maintenance部分)
- swiper分类菜单双层效果demo(整理)
- 分析型数据库性能测试总结
猜你喜欢
热部署系统实现
Arduino框架下对ESP32 NVS非易失性存储解读以及应用示例
Evaluate: A detailed introduction to the introduction of huggingface evaluation indicator module
Using pipreqs export requirements needed for the project. TXT (rather than the whole environment)
dflow入门1——HelloWorld!
Docker启动mysql
110道 MySQL面试题及答案 (持续更新)
【愚公系列】2022年07月 Go教学课程 026-结构体
HCIP练习(OSPF)
BOM系列之localStorage
随机推荐
LeetCode第三题(Longest Substring Without Repeating Characters)三部曲之二:编码实现
积分商城系统设计
HCIA实验(07)
BOM系列之localStorage
品牌方发行NFT时,应如何考量实用性?
Scala parallel collections, parallel concurrency, thread safety issues, ThreadLocal
数仓4.0(一)
NFT到底有哪些实际用途?
Evaluate: A detailed introduction to the introduction of huggingface evaluation indicator module
QT中线程调用GUI主线程控件的问题
HCIP练习02(OSPF)
RViz报错: Error subscribing: Unable to load plugin for transport ‘compressed‘解决方法
Redis分布式锁
线程介绍与使用
ArcEngine(三)通过MapControl控件实现放大缩小全图漫游
ArcEngine(五)用ICommand接口实现放大缩小
0day_Topsec上网行为管理RCE
【LeetCode】226.翻转二叉树
thop 使用心得
Path Prefixes (倍增!树上の二分)