// 获取预先设置为环境变量的 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, // });