签名算法
API系统 签名算法与微信官方签名算法一致
第一步:
设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。
特别注意以下重要规则:
◆ 参数名ASCII码从小到大排序(字典序);
◆ 如果参数的值为空不参与签名;
◆ 参数名区分大小写;
第二步:
在stringA最后拼接上&client_secret_key=密钥得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值
client_secret_key是指你的API秘钥
注意不要泄露,妥善保存
举例:
假设传送的参数如下:
client_id:12345param1:11111
第一步:对参数按照key=value的格式,并按照参数名ASCII字典序排序如下:
client_id=12345¶m1=11111
第二步:对上一步中的字符串拼接&client_secret_key=密钥:
client_id=12345¶m1=11111&client_secret_key=xxxxxxxxx
第三步:对上一步中字符串取MD5值
$sign = md5('client_id=12345¶m1=11111&client_secret_key=xxxxxxxxx');
第四步:对上面md5值转化为大写$sign = strtoupper($sign);
PHP代码示例
// 签名方法
function sign(array $data, $client_secret_key) {
ksort($data);
$sign = strtoupper(md5(urldecode(http_build_query($data)).'&client_secret_key='.$client_secret_key));
return $sign;
}
// 用法示例
$data = [
'client_id' => '12345',
'param1' => 1,
];
// API系统通信密钥
$client_secret_key = 'xxxxxxxxxxx';
$sign = sign($data, $client_secret_key);