签名规则
将接收的 params 参数解析为参数名:参数值(key:value)的形式,即:JAVA 的 map,或 js 的 object,这些是计算签名用到的全部参数;
将解析得到的参数原始值(即不做任何处理的参数值,比如不能进行 URL 编码)按照参数名的字典序排序;
将排序后的参数键值对用&拼接,即拼接成
key1=val1&key2=val2&...
;将上一步得到的字符串进行 Base64 编码(注意 Base64 编码时要设置字符集为 utf8),假设 Base64 编码后的字符串为 base64EncodedStr;
用 app_secret 作为 HMAC-SHA1 哈希 key(即sha1Key),使用 sha1Key 对base64EncodedStr 进行 HMAC-SHA1 哈希得到字节数组(注意是字节数组,不要转成十六进制字符串,否则签名计算会出错;一般的 HMAC-SHA1 算法得到的结果是字节数组的十六进制表示,请务必留意这里和一般情况不太一样),用伪代码表示即:
sha1ResultBytes = hmac - sha1(base64EncodedStr, sha1Key)
对上面得到的 sha1ResultBytes 进行 MD5 得到 32 位字符串,即为 sig;