签名算法

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:12345
param1:11111

第一步:对参数按照key=value的格式,并按照参数名ASCII字典序排序如下:

client_id=12345&param1=11111

第二步:对上一步中的字符串拼接&client_secret_key=密钥

client_id=12345&param1=11111&client_secret_key=xxxxxxxxx

第三步:对上一步中字符串取MD5值

$sign = md5('client_id=12345&param1=11111&client_secret_key=xxxxxxxxx');

第四步:对上面md5值转化为大写
$sign = strtoupper($sign);

// 签名方法
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);