应用背景
API进行调试的时候,服务端会对接口数据进行校验,避免接口被滥用,我们就需要对请求数据进行签名
例如请求

{
"id":"1",
"type":"99",
"pageNum":"2"
}

最后经过这么一签名

{
"id":"1",
"type":"99",
"pageNum":"2",
"timestamp":"1733676142",
"sign":"E2F42D80274469B439CE00D002DABB24"
}

难不成我们每次请求数据的时候就要进行计算,签名吗?
那不得多累呀或者启动代码进行签名然后请求?,最后根据第三方给的小脚本,让我对这个自动化签名可以一窥一二

let postData = request.data;
let signData = {};
let timestamp = (new Date()).getTime().toString();
timestamp = timestamp.substr(0, 10);
// timestamp = "1686900285";
console.log(timestamp);

pm.environment.set("TIME_STAMP", timestamp);
// 正式场
// signData["secret"] = "9ec720bb154b8fa530a93dc4408b29ce";
// 测试场
signData["secret"] = "316ceb36049ced2bfb65fa844742b145";
// signData["secret"] = "7dd19d48d0ed3d13e5e4c51fef1256f3";


for (let key in postData) {
    if (key == "sign" || key == "trace" || key == "debug" || postData[key] == "") {
        continue;
    }
    signData[key] = postData[key];
}

signData["timestamp"] = timestamp;
signData = objSort(signData);
signData = urlEncode(signData);
console.log(signData);
signData = CryptoJS.MD5(signData).toString().toUpperCase();
// console.log(signData);
//postman.setGlobalVariable("OPEN_SIGN", signData);
pm.environment.set("OPEN_SIGN", signData);
console.log(signData);


//排序方法
function objSort(obj) {
    let keys = Object.keys(obj).sort();
    let arr = {};
    for (let i in keys) {
        arr[keys[i]] = obj[keys[i]];
    }
    return arr;
}


/** 
 * param 将要转为URL参数字符串的对象 
 * key URL参数字符串的前缀 
 * encode true/false 是否进行URL编码,默认为true 
 *  
 * return URL参数字符串 
 */
function urlEncode(param, key, encode) {
    if (param == null) return '';
    var paramStr = '';
    var t = typeof (param);
    if (t == 'string' || t == 'number' || t == 'boolean') {
        paramStr += '&' + key + '=' + ((encode == null || encode) ? encodeURIComponent(param) : param);
    } else {
        for (var i in param) {
            var k = key == null ? i : key + (param instanceof Array ? '[' + i + ']' : '.' + i);
            paramStr += urlEncode(param[i], k, encode);
            if (paramStr.substr(0, 1) == '&') paramStr = paramStr.substr(1);
        }
    }
    return paramStr;
};

可以看到先是对请求数据进行排序,然后对请求数据字符串拼接,最后MD5计算,签名完毕

设置环境 pm.environment.set("","");

使用签名,请求体里面取值

设置过程,如下
2024-12-08T17:02:13.png
使用过程
2024-12-08T17:04:36.png

标签: none

添加新评论