在使用postman调试后端API时,由于对请求数据有签名;在postman中配置签名算法,每次提交数据时自动计算签名。将并签名参数存入全局变量,把全局变量放到header中提交。
const logOn = false;
console.log(request);
if(request.method=='POST'){
let reqBody = request.data;
let reqKeys = Object.keys(reqBody).sort();
let signStr = '';
for (let key of reqKeys){
if(key == 'sign') continue;
let value = reqBody[key];
if(value.startsWith("{{") && value.endsWith("}}")){
value = value.replace("{{","");
let valueVar = value.replace("}}","");
value = pm.variables.get(valueVar);
if(!value) value = pm.environment.get(valueVar);
if(!value) value = pm.globals.get(valueVar);
logOn && console.log("convert value:"+valueVar+"=>"+value);
}
signStr = signStr + key + value;
}
const proKey = pm.environment.get("PinProjectKey");
let hmac = CryptoJS.HmacSHA256(signStr,proKey);
hmac = CryptoJS.enc.Base64.stringify(hmac)
logOn && console.log(signStr);
logOn && console.log(hmac);
pm.variables.set("seagm_pin_sign", hmac);
}else{
logOn && console.log(request);
var url = request.url;
var theRequest = {};
if (url.indexOf("?") != -1) {
var str = url.split('?')[1];
strs = str.split("&");
for(var i = 0; i < strs.length; i ++) {
theRequest[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]);
}
}
let reqBody = theRequest;console.log(reqBody);
let reqKeys = Object.keys(reqBody).sort();
let signStr = '';
for (let key of reqKeys){
if(key == 'sign') continue;
let value = reqBody[key];
if(value.startsWith("{{") && value.endsWith("}}")){
value = value.replace("{{","");
let valueVar = value.replace("}}","");
value = pm.variables.get(valueVar);
if(!value) value = pm.environment.get(valueVar);
if(!value) value = pm.globals.get(valueVar);
logOn && console.log("convert value:"+valueVar+"=>"+value);
}
signStr = signStr + key + value;
}
const proKey = pm.environment.get("PinProjectKey");
let hmac = CryptoJS.HmacSHA256(signStr,proKey);
hmac = CryptoJS.enc.Base64.stringify(hmac)
logOn && console.log(signStr);
logOn && console.log(hmac);
pm.variables.set("seagm_pin_sign", hmac);
}