为了防止API调用过程中被黑客恶意篡改,调用任何一个API都需要携带签名,服务端会根据请求参数,对签名进行验证,签名不合法的请求将会被拒绝。目前支持的签名算法支持一种:SHA-1,签名大体过程如下:

1.对所有API请求参数(包括公共参数和业务参数,但除去sign参数),根据参数名称的ASCII码表的顺序排序。如:foo:1, bar:2, foo_bar:3, foobar:4排序后的顺序是bar=2, foo=1, foo_bar=3, foobar=4。

2.将排序好的参数名和参数值以'&'拼装在一起,根据上面的示例得到的结果为:bar=2&foo=1&foo_bar=3&foobar=4。

3.把拼装好的字符串采用utf-8编码,在拼装的字符串后加上appsecret,再进行MD5,如:md5(bar=2&foo=1&foo_bar=3&foobar=4&+secret)。

实例:

    public function openSignature($datas, $appSecret = '')

{
$str = ''; // 生成签名的原始字符串
if (empty($datas) || !is_array($datas)) {
return false;
}
// 参数
ksort($datas);
foreach ($datas as $k => $v) {
if (is_array($v)){
$v = json_encode($v,JSON_UNESCAPED_UNICODE);
}
$str .= $k . '=' . $v . '&';
}
return md5($str . $appSecret);
}