尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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()];}}}
RELATED

相关推荐

UIColor、HSV与RGB颜色空间转换全解:Colorful ColorfulEntity.swift颜色模型详解

UIColor、HSV与RGB颜色空间转换全解:Colorful ColorfulEntity.swift颜色模型详解

UIColor、HSV与RGB颜色空间转换全解:Colorful ColorfulEntity.swift颜色模型详解 【免费下载链接】Color-Picker-for-iOS Colorful: iOS color picker built with Swift. 项目地址: https://gitcode.com/gh_mirrors/co/Color-Picker-for-iOS Colorful 是一款…

📅 2026/10/4 11:29:45
一套键鼠控制三台电脑:Input Leap 跨设备输入共享快速上手指南

一套键鼠控制三台电脑:Input Leap 跨设备输入共享快速上手指南

一套键鼠控制三台电脑:Input Leap 跨设备输入共享快速上手指南 【免费下载链接】input-leap Open-source KVM software 项目地址: https://gitcode.com/gh_mirrors/in/input-leap 桌面上同时开着 Windows、macOS 和 Linux 三台机器,键盘和鼠标却只…

📅 2026/10/4 14:49:59
kafka-examples 集成Avro与Schema Registry:KafkaAvroSerializer序列化全流程实战指南

kafka-examples 集成Avro与Schema Registry:KafkaAvroSerializer序列化全流程实战指南

kafka-examples 集成Avro与Schema Registry:KafkaAvroSerializer序列化全流程实战指南 【免费下载链接】kafka-examples Snippets and small examples demonstrating kafka features and configs 项目地址: https://gitcode.com/gh_mirrors/kaf/kafka-examples …

📅 2026/10/10 19:04:09
MORE NEWS

更多资讯

📰

R语言钻石价格分析:从数据清洗到回归建模实战

简介:这是一个基于R语言的钻石价格回归分析实战案例,适合数据分析、统计建模和机器学习入门者,目标是厘清影响钻石价格的关键因素并构建预测模型。案例依托ggplot2内置diamonds数据集,覆盖数据概览、缺失与重复值检查、异常值剔除…

📰

YOLOv8实时目标检测与屏幕坐标映射:Python自瞄系统实战

简介:这是一份基于YOLOv8实现的AI自瞄项目Python源码与文档说明,面向计算机、人工智能、自动化等专业的学生与开发者,可用于毕业设计、课程设计、项目立项演示或自学进阶。项目支持YOLOv5、YOLOv8乃至最新YOLOv9模型,可自行训练并…

📰

JVM内存监控与OOM排查实战:从命令到告警体系

你有没有经历过这样的时刻:线上服务突然 CPU 拉满,接口陆续超时,打开监控面板一看,堆内存已经爬到了顶,Full GC 的频率几乎每秒一次。你翻出命令手册想看一眼内存分布,却又不敢贸然执行,生怕 jm…

📰

kenlm.zip预编译包避坑指南:从训练到部署的语言模型实践

简介:一份预编译的KenLM语言模型工具包,专注于解决NLP、语音识别或文本完成场景中统计语言模型的部署难题,开发者解压后即可直接调用,无需自行编译源码或配置C依赖。KenLM以高效的四元n-gram建模为核心,支持在线学习、…

📰

MySQL学习笔记 03、MySQL存储引擎

文章目录 前言 一、介绍存储引擎 1.1、InnoDB引擎 1.2、MyISAM引擎 二、InnoDB与MyISAM的对比 三、不同的场景选择引擎 前言 本文是付费专栏 《Java后端开发从入门到进阶》 的配套文章,所属阶段与专题为「阶段二:数据库与缓存 / 2.1 MySQL」。 专栏介绍:适合 Java 初学者及…

📰

自动侧推定位机构中的接近开关:让工件靠边更准确

自动侧推定位机构常用于装配前校正、检测前靠边、输送线转位和小型工件姿态调整。工件从输送线进入定位区后,通常需要由侧推板或气缸将其推向基准面。如果侧推距离不足,工件可能没有真正贴紧定位边;如果回位不完整,又会影响下一个…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬