签名生成的通用步骤如下:
第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。
特别注意以下重要规则:
- ◆ 参数名ASCII码从小到大排序(字典序);
- ◆ 如果参数的值为空不参与签名;
- ◆ 参数名区分大小写;
- ◆ 接口可能增加字段,验证签名时必须支持增加的扩展字段
第二步,在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。
<script>
// const md5 = require('./md5.min.js');
let obj = {
name:'张三',
age:18,
sex:'男',
id:''
}
let sign = '&key=192006250b4c09247ec02edce69f6a2d'
function asciiSort(data,sign=''){
let keys = Object.keys(data)
keys.sort()
let str = ''
keys.forEach(el => {
if (data[el] || data[el] === 0) {
str += el + '=' + data[el] + '&'
}
})
str = str.substr(0,str.length-1);
str = str + sign
str = md5(str).toUpperCase();
return str
}
let str = asciiSort(obj,sign)
console.log(str);
</script>