场景:postman发送post请求,post的数据为json格式,部分参数动态生成,如时间戳,此时可以使用预处理脚本动态生成。另外需要对post的json数据进行部分自动的签名。
如需要发送的数据为:其中时间戳timestamp是动态生成的。
可使用如下方式:
附上脚本:
let key = "XXXXXXX"; //签名Key
// let postparam = request.data; //post 参数
// let queryParam = pm.request.url.query.members; //get中的参数
let param = request.data;
// 动态的时间戳,这里是数值型
var ts = Math.round(new Date()/1000);
console.log("ts:"+ts);
var body=pm.request.body.raw;
body = body.replace("{{timestamp}}",ts);// 提取替换,否则可能在下一步序列化的时候报错
// 设置到全局变量
postman.setGlobalVariable("timestamp",ts);
// 序列化
var json="";
try {
json = JSON.parse(body); //序列化JSON BODY
param = json;
}catch(err){
//BODY不是JSON格式
console.log("json data error");
}
console.log(json);
// 参数排序
param = objSort(param);
let jsonStr = JSON.stringify(param).toString();
// 拼接待签名字串 (规则:json+key)
var sign = jsonStr+key;
console.log(sign);
// MD5签名
sign = CryptoJS.MD5(sign).toString();
console.log(sign);
// 设置到环境变量中
postman.setEnvironmentVariable("sign", sign);
// 定义对参数排序的方法,sign不参与排序
function objSort(obj)
{
let keys = Object.keys(obj).sort();
let arr = {};
for (let i in keys) {
if(keys[i]=="sign"){
continue;
}
arr[keys[i]] = obj[keys[i]];
}
return arr;
}
脚本实现功能,对psot的json参数进行参数升序排列后,对生成传json字串拼接加密key后进行MD5签名。