签名计算方式
签名生成通用步骤
- 将所有接收的数据设为集合A
- 将集合A内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串$queryString。
- 按照指定规则加密算出sign值
:::warning
特别注意以下重要规则:
- 参数名ASCII码从小到大排序(字典序)
- 如果参数的值为空参与签名(值为null、false时按空字符串,true时按1处理,值为数组时使用json_encode处理)
- 参数名区分大小写
- 传送的sign参数不参与签名,将生成的签名与该sign值作校验
- sign签名失效时间为2分钟
:::
sign签名加密算法
$sign = md5($queryString . $apiKey . base64_encode($timestamp . $apiKey . $queryString) . $nonceStr);
举例
假设请求参数如下:
nonce_str: qwertyuiopasdfghjklzxcvbnmqwsd
timestamp: 1723533321
event_key: order_create
order_id: 1001
第一步:对参数按照key=value的格式,并按照参数名ASCII字典序排序如下:
event_key=order_create&nonce_str=qwertyuiopasdfghjklzxcvbnmqwsd&order_id=1001×tamp=1723533321
第二步:计算签名(以sign为例):
$sign = md5("event_key=order_create&nonce_str=qwertyuiopasdfghjklzxcvbnmqwsd&order_id=1001×tamp=1723533321" . "ucPFmeGuuTMh1t8BAsTFdztlJDKRJeGs" . base64_encode(1723533321 . "ucPFmeGuuTMh1t8BAsTFdztlJDKRJeGs" . "event_key=order_create&nonce_str=qwertyuiopasdfghjklzxcvbnmqwsd&order_id=1001×tamp=1723533321") . "qwertyuiopasdfghjklzxcvbnmqwsd");
最终得到最终发送的数据:
cc115a7c187f061dce2b2d3c4cb1eed3
最后修改时间: 4 个月前