function guid() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx' .replace(/[xy]/g, function (c) {
var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
return v.toString(16);
});
}
var timestamp = Math.round(new Date());
var nonce = guid();
pm.collectionVariables.set('timestamp',timestamp);
pm.collectionVariables.set("nonce", nonce);
var A= pm.environment.get("A");
var B= pm.environment.get("B");
var params = JSON.parse(pm.request.body.raw);
var strParams=JSON.stringify(params.data);
var url = pm.request.url;
var mpath=url.path;
var method=mpath[4];
var paramsEncode = "A="+A+ "&method="+ method+"×tamp=" +timestamp+ "&nonce=" +nonce + "&data="+strParams;
var signature = require('crypto-js') .HmacSHA1(paramsEncode, secret).toString();
var s = require('crypto-js').enc.Utf8.parse(signature);
var base64 = require('crypto-js').enc.Base64.stringify(s);
pm.collectionVariables.set("signature", base64);
注意:新版本已经无法用CryptoJS需要用require('crypto-js')。 竟然不是更简洁的方法 也是令人费解。有个疑问在于一直验签不通过,后面发现postman请求的body里面是常规的json形式!例如
"data": {
"productModel": "xx",
"deviceList": [
{
"did": "AA"
}
]
}
这种的通过pm.request.body.raw获取的时候 获取到的是
{"productModel":"xx","deviceList":[{"did":"AA"}]}
常规形式这种 竟然是默认有空格的 所以一直验签失败。 搞不懂 后面把请求体换成
{"productModel":"xx","deviceList":[{"did":"AA"}]} 验签就通过了。 搞不懂。不知道有没有大佬可以解答