# 签名算法
签名采用微信支付 (opens new window)后端签名算法
# 签名生成的通用步骤
设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。 特别注意以下重要规则:
- 参数名ASCII码从小到大排序(字典序);
- 如果参数的值为空不参与签名;
- 参数名区分大小写;
- 验证调用返回或微信主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。
在stringA最后拼接上&key=APP_SECRET得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。
签名算法示例(签名验证地址):
private static function sign($param_array){
$names = array_keys($param_array);
sort($names, SORT_STRING);
$item_array = array();
foreach ($names as $name){
$item_array[] = "{$name}={$param_array[$name]}";
}
$app_secret = APP_SECRET;
$str = implode('&', $item_array) . '&key=' . $app_secret;
return strtoupper(md5($str));
}
注:这里的key为腾讯微卡提供的APP_SECRET