个人技术分享


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+"&timestamp=" +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"}]}  验签就通过了。 搞不懂。不知道有没有大佬可以解答