\App\Support\SmsSmsSigner

短信请求签名引擎——服务商差异全部配置化的技术底座。

短信服务商本质都是 HTTP 接口,差异只在「参数怎么摆 + 请求怎么签名」:

  • none 裸请求(云片/秒嘀等 HTTP 接口型,参数模板直接表达)
  • basic HTTP Basic Auth(access_key=用户名 / access_secret=密码)
  • aliyun_rpc 阿里云 RPC 签名(HMAC-SHA1,Action/Version/签名参数自动附加,GET 请求)
  • tencent_tc3 腾讯云 TC3-HMAC-SHA256 签名(Authorization 头,规范请求/派生密钥,POST JSON body)

签名算法均为公开标准(RFC3986 百分号编码 + HMAC 系列),按官方文档实现; 未接真实服务商账号联调前,接入时请用服务商控制台的调试工具核对签名结果。

返回的 params 即最终请求参数(none/basic 原样;aliyun_rpc 追加签名参数; tencent_tc3 原样作为 POST JSON body——请求头由 headers 携带签名)。

┌────────────────── 分区导航(按此顺序阅读)──────────────────┐ 分区 1 · 签名分发 apply 分区 2 · 各模式签名 basic / aliyunRpc / tencentTc3 分区 3 · 编码工具 percentEncode └────────────────────────────────────────────────────────────┘

Summary

Methods
Properties
Constants
apply()
No public properties found
No constants found
No protected methods found
No protected properties found
N/A
basic()
aliyunRpc()
tencentTc3()
percentEncode()
No private properties found
N/A

Methods

apply()

apply(string  $mode, string  $url, string  $method, array<string,mixed>  $params, string  $accessKey, string  $accessSecret) : array

应用签名。

Parameters

string $mode
string $url
string $method
array $params

组装好的请求参数

string $accessKey
string $accessSecret

Returns

array —

basic()

basic(array  $params, string  $key, string  $secret) : array

basic:Authorization: Basic base64(user:pass)

Parameters

array $params
string $key
string $secret

Returns

array —

aliyunRpc()

aliyunRpc(array  $params, string  $key, string  $secret) : array

阿里云 RPC 签名(SendSms 等 Action):HMAC-SHA1,Signature 参数追加进参数集。

流程:① 追加公共参数(Format/SignatureMethod/SignatureNonce/SignatureVersion/ Timestamp/Version)与 AccessKeyId ② ksort 按字典序排序 ③ 对每对 key=value 做 RFC3986 百分号编码并 & 拼接成规范化串 ④ 待签串 = 'GET&%2F&' + percentEncode(规范化串) ⑤ Signature = base64(HMAC-SHA1(secret.'&', 待签串)) 追加进参数集

规范:https://help.aliyun.com/zh/sdk/product-overview/rpc-mechanism

Parameters

array $params
string $key
string $secret

Returns

array —

tencentTc3()

tencentTc3(string  $url, string  $method, array  $params, string  $key, string  $secret) : array

腾讯云 TC3-HMAC-SHA256 签名:POST JSON body + Authorization 头 + X-TC-* 头。

流程:① 由 URL 主机名推导 service(sms.tencentcloudapi.com → sms),取时间戳/日期 ② payload = 请求参数 JSON,Content-Type 固定 application/json ③ 组装 X-TC-* 头与 Host,计算规范请求串(方法 + / + 空 query + 签名头 + 头列表 + SHA256(payload))④ 拼待签串 TC3-HMAC-SHA256 + 时间戳 + credentialScope + SHA256(规范请求串) ⑤ 按 TC3 派生密钥链逐级 HMAC 出最终签名 ⑥ Authorization 头 = TC3-HMAC-SHA256 Credential=…/SignedHeaders=…/Signature=…

规范:https://cloud.tencent.com/document/product/1278/85305(签名方法 v3)

Parameters

string $url
string $method
array $params
string $key
string $secret

Returns

array —

percentEncode()

percentEncode(string  $value) : string

RFC3986 百分号编码(阿里云 RPC 规范):空格→%20、*→%2A,~ 不编码

Parameters

string $value

Returns

string —