## 第一步 设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。 特别注意以下重要规则: 1. 参数名ASCII码从小到大排序(字典序); 2. 如果参数的值为空不参与签名; 3. 参数名区分大小写; 4. 验证调用返回或本站主动通知签名时,传送的sign参数和sign\_type不参与签名,将生成的签名与该sign值作校验。 5. 本接口可能增加字段,验证签名时必须支持增加的扩展字段 ## 第二步 在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,得到sign值signValue。 ## PHP签名实例 ~~~ /** * @Note 生成签名 * @param $data 参与签名的参数 * @return string */ public function getSign($data) { $data = array_filter($data); if (get_magic_quotes_gpc()) { $data = stripslashes($data); } ksort($data); $str1 = ''; foreach ($data as $k => $v) { $str1 .= '&' . $k . "=" . $v; } $str = $str1 . $this->key; $str = trim($str, '&'); $sign = md5($str); return $sign; } ~~~ ## PHP验证签名实例 ~~~ /** * @Note 验证签名 * @param $data 待验证参数 * @return bool */ public function verify($data) { if (!isset($data['sign']) || !$data['sign']) { return false; } $sign = $data['sign']; unset($data['sign']); unset($data['sign_type']); $sign2 = $this->getSign($data); if ($sign != $sign2) { return false; } return true; } ~~~