PHP(单文件)对接阿里云V3短信签名 PHP (单文件)对接阿里云V3短信签名无需引入sdk封装单文件即可我这里用到了guzzle来发送http请求如果不需要也可以换成原生curl$data[code123456];$aliyunnewAliSms();$result$aliyun-send(1300000000,SMS_500000001,$data,测试平台);if($resulttrue){echo验证码发送成功;}else{echo验证码发送失败;}?phpdeclare(strict_types1);namespaceapp\common\util;useGuzzleHttp\Client;classAliSms{private$smsData;private$smsConfig[keyyou key,secretyou secret,hostdysmsapi.aliyuncs.com,algorithmACS3-HMAC-SHA256];// 发送消息publicfunctionsend($phone,$templateCode,$templateParams[],$templateSign阿里云){date_default_timezone_set(UTC);// 设置时区为GMT// 发短信无需body,所以这里直接写死了bodyself::initSmsData();$query[PhoneNumbers$phone,// 手机号SignName$templateSign,// 短信签名TemplateCode$templateCode,// 短信模板idTemplateParamjson_encode($templateParams,320),// 变量内容];$this-smsData[headers][Authorization]$this-makeSign($query);$httpUrlhttps://.$this-smsConfig[host]./?.http_build_query($query);$result$this-guzzlePost($httpUrl,$this-smsData);// 这里可以用记录请求日志if($result[success]){$aliResultjson_decode($result[data],true);if($aliResult[code]OK){returntrue;}}returnfalse;}// 初始化smsDataprotectedfunctioninitSmsData($post_body){$this-smsData[headers[host$this-smsConfig[host],x-acs-actionSendSms,x-acs-version2017-05-25,x-acs-dategmdate(Y-m-d\TH:i:s\Z),x-acs-signature-noncebin2hex(random_bytes(16)),x-acs-content-sha256hash(sha256,$post_body),]];}// 获得签名protectedfunctionmakeSign($query){// 获得query待签名字符串$queryString$this-getQueryString($query);// 获得headers待签名字符串$headerString$this-getHeaderString();// 获得参与sign签名的key$signHeaderString$this-getSignHeaderString();$canonicalRequestimplode(\n,[POST,/,$queryString,$headerString,$signHeaderString,$this-smsData[headers][x-acs-content-sha256]]);$stringToSign$this-smsConfig[algorithm].\n.hash(sha256,$canonicalRequest);$signaturestrtolower(bin2hex(hash_hmac(sha256,$stringToSign,$this-smsConfig[secret],true)));return$this-smsConfig[algorithm]. Credential.$this-smsConfig[key].,SignedHeaders.$signHeaderString.,Signature.$signature;}// 获得query待签名字符串privatefunctiongetQueryString($query){ksort($query);$params[];foreach($queryas$key$value){if(null$key){continue;}$strrawurlencode($key);if(!$valuenull!$value){$str..rawurlencode($value);}else{$str.;}$params[]$str;}returnimplode(,$params);}// 获得headers待签名字符串privatefunctiongetHeaderString(){uksort($this-smsData[headers],strcasecmp);$headers;foreach($this-smsData[headers]as$key$value){$headers.strtolower($key).:.trim($value).\n;}return$headers;}// 获得参与sign签名的key,以;分隔privatefunctiongetSignHeaderString(){$signedHeadersarray_keys($this-smsData[headers]);sort($signedHeaders,SORT_STRING|SORT_FLAG_CASE);returnimplode(;,array_map(strtolower,$signedHeaders));}// 发送post请求privatefunctionguzzlePost($url,$data){$options[verify]false;// 去除ssl验证$options[timeout]3;// 设置3秒超时时间$clientnewClient([$options]);try{$response$client-post($url,$data);return[successtrue,data$response-getBody()-getContents()];}catch(\Exception$e){return[successfalse,data$e-getMessage()];}}}

相关新闻

最新新闻

VS2022+C# WinForms图书管理系统实战:从安装到独立发布

VS2022+C# WinForms图书管理系统实战:从安装到独立发布

1. 这不是“又一个图书管理系统”,而是VS2022环境下C#桌面应用的完整工程实践切片你搜“图书管理系统 VS2022”,页面刷出来一堆零散教程、密钥求购、安装报错截图,还有人问“为什么我的窗体一运行就闪退”。这不是偶然——它恰恰暴露了一个被…

2026/8/22 19:25:05
基于ViT与直推式迁移学习的运动想象脑电解码模型构建指南

基于ViT与直推式迁移学习的运动想象脑电解码模型构建指南

1. 项目概述:当运动想象遇上ViT与直推式迁移学习最近在运动想象脑电信号处理这个圈子里,一个话题的热度持续攀升:如何让那些在实验室理想环境下训练出的模型,真正能适应不同个体、不同设备、甚至不同实验范式带来的巨大差异。这就…

2026/8/22 19:25:05
MobaXterm-keygen 快速上手与常见问题排障

MobaXterm-keygen 快速上手与常见问题排障

MobaXterm-keygen 快速上手与常见问题排障 【免费下载链接】MobaXterm-keygen A keygen for MobaXterm 项目地址: https://gitcode.com/gh_mirrors/mo/MobaXterm-keygen MobaXterm-keygen 是一个纯 Python 脚本,用来生成 MobaXterm 使用的许可证文件 Custom.…

2026/8/22 19:25:05
12306高铁数据全量抓取:从Excel时刻表到交互车站地图的完整链路

12306高铁数据全量抓取:从Excel时刻表到交互车站地图的完整链路

12306高铁数据全量抓取:从Excel时刻表到交互车站地图的完整链路 【免费下载链接】Parse12306 分析12306 获取全国列车数据 项目地址: https://gitcode.com/gh_mirrors/pa/Parse12306 跑完之后手里有什么 跑完这个12306数据采集程序 Parse12306,o…

2026/8/22 19:25:05
python3爬虫学习之beautifulsoup实战

python3爬虫学习之beautifulsoup实战

将使用规则以及信息提取规则记录下来, 把记录下来的规则运用到实战当中, 这是在学习课程时所做的案例标点符号。去抓取中国天气网里每一个城市的最低气温, 并且从中排出气温最低的10个城市, 在实际操作过程当中, 会存在各种各样、或大或小关于这方面的误区, 以及有一些对此需要…

2026/8/22 19:25:05
SpringBoot+Vue构建高校实习信息管理平台实战

SpringBoot+Vue构建高校实习信息管理平台实战

1. 项目背景与核心价值高校实习信息管理一直是校园信息化建设的痛点。传统方式下,企业通过邮件、海报或人工对接发布实习信息,学生获取渠道分散且效率低下。我去年协助某高校就业指导中心时,发现他们还在用Excel表格管理近千条实习记录&#…

2026/8/22 19:20:05