後端代碼一般都在網關裏設置了簽名算法,訪問接口時,需要傳簽名參數通過網關才能訪問這些接口。在使用postman進行接口測試時,可以使用Pre-request Script編寫js代碼完成簽名算法,進而完成接口的訪問。
下面舉個算法簽名的例子,請求是GET方式,需要四個參數:timestamp、sign、token、userId。
這裏設置了全局變量,通過{{name}}就可以取到值,可以在Pre-request Script通過代碼postman.setGlobalVariable(name, value)設置。
1. 簽名算法
簽名算法很簡單:將timestamp、sign、userId這三個參數組合成字符串,對字符串進行MD5加密。將加密後的值作爲sign參數的值傳入接口就可以了。具體代碼如下:
//全局變量:設置時間戳參數
postman.setGlobalVariable("timestamp", new Date().getTime().toString());
//get中的參數
var queryParam = pm.request.url.query.members;
//數組參數轉爲map參數
var param ={};
for (var item in queryParam){
param[queryParam[item].key] = postman.getGlobalVariable(queryParam[item].key) == null ? queryParam[item].value : postman.getGlobalVariable(queryParam[item].key);
}
//移除參數sign
delete param["sign"];
//param排序
paramSorted = objSort(param);
console.log("paramSorted:==",paramSorted);
//生成簽名
var sign = "";
for (let key in paramSorted){
sign += key+"="+paramSorted[key]+"&";
}
console.log("sign:==",sign);
var md5Str =CryptoJS.MD5(sign);
postman.setGlobalVariable("sign", md5Str.toString(CryptoJS.enc.Hex).toUpperCase());
//排序方法
function objSort(obj)
{
let keys = Object.keys(obj).sort();
let arr = {};
for (let i in keys) {
arr[keys[i]] = obj[keys[i]];
}
return arr;
}