# 签名算法

签名采用微信支付后端签名算法

# 签名生成的通用步骤

设所有发送或者接收到的数据为集合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