## 第一步
设所有发送或者接收到的数据为集合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;
}
~~~