后端代码一般都在网关里设置了签名算法,访问接口时,需要传签名参数通过网关才能访问这些接口。在使用postman进行接口测试时,可以使用Pre-request Script编写js代码完成签名算法,进而完成接口的访问。
下面举个算法签名的例子,请求是GET方式,需要四个参数:timestamp、sign、token、userId。
这里设置了全局变量,通过{{name}}就可以取到值,可以在Pre-request Script通过代码postman.setGlobalVariable(name, value)设置。
1. 签名算法
签名算法很简单:将timestamp、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;
}