postman中配置自动计算签名

在使用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);
}