签名算法
签名规则:
第一步:将⾮空输入参数按照参数名(key)进行升序排序(排序规则:ASCII码从小到⼤排序-字典序排序。例如: 排序前 api_method,api_version,app_key,access_token,timestamp,nonce_str,api_data
排序后 access_token,api_data,api_method,api_version,app_key,nonce_str,timestamp
第二步:按照url键值对的形式(key=value&key=value)拼接参数名与参数值。形成字符串。
示例:access_token=xxx&api_data=xxx&api_method=xxx&api_version=xxx&app_key=xxx&nonce_str=xxx×tamp=xxx
第三步: 在字符串末尾,拼接加入”app_secret“的值(不含app_secret的键) 示例:access_token=xxx&api_data=xxx&api_method=xxx&api_version=xxx&app_key=xxx&nonce_str=xxx×tamp=xxxapp_secret的值
第四步: 对字符串进行Md5运算(运算方式:32位小写),得到签名参数“signature"的值 示例:string signature= Md5(拼接后的字符串)
签名示例:
- 1.假设现在有如下输入参数
{ "api_method":"u-city-list", "api_version":"1.0", "app_key":"wxd930ea5d5a258f4f", "access_token":"xxxx", "nonce_str":"ibuaiVcKdpRxkhJA",
"timestamp":"1559096649", "signature":"xxxx", "api_data":"{ \"city_id\":1002 }"
}2.先对输入参数中非空值参数 按照(ascii字典序)进行升序排序,排序结果如下
{
"access_token":"xxxx",
"api_data":"{ \"city_id\":1002 }", "api_method":"u-city-list", "api_version":"1.0",
"app_key":"wxd930ea5d5a258f4f",
"nonce_str":"ibuaiVcKdpRxkhJA",
"timestamp":"1559096649"
}3.按照key=value&key=value的格式形成键值对,并使用&符号拼接各个键值对,示例如下:
"access_token=xxxxx& api_data=xxxxxxxx& api_method=xxx& api_version=xxx& app_key=xxx& nonce_str=nonce_str=xxx& timestamp=xxx"
4.尾部加入app_secret的值,假设app_secret=192006250b4c09247ec02edce69f6a2d,示例如下:
"access_token=xxxxx&
api_data=xxxxx&
api_method=xxx&
api_version=xxx&
app_key=xxx&
nonce_str=xxx&
timestamp=xxx
app_secret的值"5. 对最终形成的字符串进行md5运算(32位小写),示例如下,运算结果就是签名值signature
String signature=Md5(str);