Postman預處理算出sign值
- 很多接口會有sign參數,爲了防止被惡意篡改參數,所以對所有參數用一定規則排列後+鹽再加密。有些開發可能配置了在測試環境暫時屏蔽簽名,或者用一個通用簽名。但其實這樣有許多弊端。
- 這2條語句可以分別獲得body參數和url中的query參數。
- 源碼如下:
let queryParam = pm.request.url.query.members;
let param = request.data;
let key = "xxxxxxxxxxxx"; //簽名Key
try {
let json = JSON.parse(param); //序列化JSON BODY
param = json;
}catch(err){
//BODY不是JSON格式
}
//Get & 合併GET和POST參數
for (let i in queryParam){
param[queryParam[i].key] = queryParam[i].value;
}
//Post
//取key
var keys = [];
for (let k in param){
if (k == 'sign'){
continue;
}
keys.push(k);
}
//排序
keys.sort();
//取value
var kv = [];
for (let k of keys){
kv.push(k + '=' + encodeURIComponent(param[k])) //urlencode編碼
}
//拼接
var sign = kv.join('&');
sign = sign + key;
console.log(sign);
sign = CryptoJS.MD5(sign).toString();
console.log(sign);
//設置環境變量
postman.setEnvironmentVariable("sign", sign);
PS: 不同公司、不同接口規則不同,例如不需要urlencode、不需要排序的請自行修改腳本
- 再用{{sign}}從環境變量中取出sign值。
- 成功請求
- 這段腳本兼容GET參數、以及表單形式的BODY和JSON形式的BODY