Appearance
签名算法
签名算法概述
- 设所有发送或者接收到的数据为集合 M,将集合 M 内 需要加签 的参数按照参数名 ASCII 码从小到大排序(字典序),使用 URL 键值对的格式(即 key1=value1&key2=value2…)拼接成字符串 stringA。
- 在 stringA 最后拼接上 &appSecret=密钥 得到 stringSignTemp 字符串,并对 stringSignTemp 进行 MD5 运算,再将得到的字符串所有字符转换为大写,得到 signature 值。
特别注意以下重要规则
- 参数名 ASCII 码从小到大排序(字典序)。
- 参数名区分大小写。
- 传送的 signature 参数不参与签名,将生成的签名与该 signature 值作校验。
- 接口可能增加字段,验证签名时必须支持增加的扩展字段。
举例 (PHP)
例如传递的参数如下:
json
{
"pid": "10001",
"chain_type": "1",
"order_no": "20240101000001",
"amount": "100.00",
"currency": "CNY",
"scanpay": "1",
"notify_url": "https://example.com/notify",
"return_url": "https://example.com/return",
"param": {"user_id": "123"},
"signature": "D9BB7783FA0AD06DBD3E0EA71E56F3B0"
}第一步:去掉 不需要加签 的参数,对 需要加签 的参数按照 key=value 的格式,并按照参数名 ASCII 字典序排序如下
php
$stringA = 'pid=10001&chain_type=1&order_no=20240101000001';第二步:对上一步中的字符串拼接 &appSecret=密钥
php
$stringSignTemp = $stringA.'&appSecret=密钥';第三步:对上一步中字符串取 md5 值
php
$signature = md5($stringSignTemp);第四步:对上面 md5 值转化为大写
php
$signature = strtoupper($signature);签名参数说明
在生成签名之前,需要准备以下参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| pid | string | 是 | 商户ID |
| chain_type | string | 是 | 链类型 |
| order_no | string | 是 | 订单号 |
| appSecret | string | 是 | 商户密钥 |
安全注意事项
- 密钥保护:妥善保管API密钥和私钥,避免泄露
- 定期更换:建议定期更换API密钥
- 环境隔离:测试环境和生产环境使用不同的密钥
- 日志安全:不要在日志中记录完整的密钥信息
- 传输安全:确保密钥传输过程的安全
签名算法是保障交易安全的重要环节,请严格按照文档要求实现签名功能。