wpfw_ewei_shopv2/sign.js
2023-02-14 19:57:32 +08:00

90 lines
2.5 KiB
JavaScript

// 获取预先设置为环境变量的 api_key
let key = pm.environment.get("api_key");
// 存放所有需要用来签名的参数
let param = {};
// 加入 query 参数
//let queryParams = pm.request.url.query;
// 获取10位时间戳
var times = Math.round(new Date().getTime() / 1000).toString();
// queryParams.each(item => {
// if (item.key == 'timestamp') { // 因为设置的全局参数,获取的时间戳有问题,所以这里重新定义时间戳
// param[item.key] = times;
// } else {
// param[item.key] = item.value;
// }
// });
// 加入 body 参数
if (pm.request.body) {
let formData;
switch (pm.request.body.mode) {
case 'formdata':
formData = pm.request.body.formdata;
break;
default:
break;
}
if (formData) {
formData.each(item => {
if (!item.disabled && item.value !== '') { // 启用且非空参数值的参数才参与签名
if (item.key != 'r' && item.key != 'c' && item.key != 'i' && item.key != 'm' && item.key != 'do') {
param[item.key] = item.value;
console.log(item);
}
}
});
}
}
// 取 key
let keys = [];
for (let key in param) {
// 注意这里,要剔除掉 sign 参数本身
if (key !== 'sign') {
keys.push(key);
}
}
// 参数名 ASCII 码从小到大排序(字典序)
keys.sort();
// 转成键值对
let paramPair = [];
for (let i = 0, len = keys.length; i < len; i++) {
let k = keys[i];
if (k != 'r' && k != 'c' && k != 'i' && k != 'm' && k != 'do') {
paramPair.push(k + '=' + encodeURIComponent(param[k])) // urlencode 编码
}
}
console.log(paramPair);
// 最后加上 key
//paramPair.push(key);
// 拼接
let stringSignTemp = paramPair.join('&');
console.log(stringSignTemp);
let tt = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(times + key + stringSignTemp));
let sign = CryptoJS.MD5(stringSignTemp + key + tt + times).toString();
console.log(sign);
let formData = pm.request.body.formdata;
formData['sign'] = sign;
formData['timestamp'] = times;
console.log(formdata);
pm.request.body.update({
mode: 'formdata',
formdata: formData
});
// queryParams.upsert({
// key: 'sign',
// value: sign,
// });
// // 重新赋值时间戳参数,因为不使用这里,全局变量生成的时间戳会跟这里的时间戳有误差,导致签名不一致
// queryParams.upsert({
// key: 'timestamp',
// value: times,
// });