利用postman自动计算接口签名

2018-10-12  本文已影响0人  七点水123

这些文档本来保存在本地的,但后来想了想还是挑了个平台发表出来,话不多少来看看怎么使用的吧!
很多接口需要进行加密处理,比如对参数进行ASCII排序并进行MD5加密生成新的参数sign请求。常用的请求有两种:post和get

待签名字符的生成规则如下:
1. 请求参数都按照名称ASCII码,升序排列(参数名称不允许相同)
2. 如果参数值带有中文, 需要制定字符集编码为UTF-8
3. 如果参数值为空,那么该参数不参与签名
4. 秘钥作为最后一个参数, 参数名为:key 将请求参数按上述顺序用&拼接。 然后,用MD5算法,对待签名字符串进行加密, 生成的签名数据(32位小写字符), 即是参数中sign的值。

postman自动加密流程如下:
1.设置环境变量key;sign值随意设置(此过程可省略)


image

2.请求参数设置中,引用sign值


image

3.Pre-request-Script中写MD5加密签名规则的脚本

a.get脚本:

// 获取sign签名
console.log(request.url);  //获取参数
var url = request.url;
var param = url.split("?")[1];
//排序
if (param != null){
    param += "&sign_key=1234567890";
    var params = param.split("&");
    params.sort();
    var keys = new Array(params.length);
    var values = new Array(params.length);
    for (var i = 0; i < params.length; i++) {
        keys[i] = params[i].split("=")[0];
        values[i] = params[i].split("=")[1];
    }
    var str = []
    for (var p = 0; p < keys.length; p++) {
        if (keys[p] == "sign" || values[p] === "") {
            continue;
        }
      //参数中含有时间戳时可使用此方法替换
        var temp;
        if(values[p].indexOf("{{") != -1 && values[p].indexOf("}}") != -1) {
            temp = values[p].replace("{{", "");
            temp = temp.replace("}}", "");
            if(temp == "$timestamp") {
                values[p] = Math.round(new Date().getTime()/1000); //获取时间戳
                console.log(values[p])
            }
            console.log(values[p]);
        }
        str.push(keys[p] + "=" + values[p]);
    }
    var sign = str.join("&");
    console.log(sign);
    pm.environment.set("sign", CryptoJS.MD5(sign).toString());  //将sign设置为环境变量
}

2.post方法

 //获取sign签名
console.log(request.url);  //获取参数
var url = request.url;
var param = url.split("?")[1];
if (param != null){
    param += "&sign_key=1234567890"
    var params = param.split("&");
    params.sort();
    var keys = new Array(params.length);
    var values = new Array(params.length);
    for (var i = 0; i < params.length; i++) {
        keys[i] = params[i].split("=")[0];
        values[i] = params[i].split("=")[1]; //取值
        // console.log(values[i])
    }
    var str = []
    for (var p = 0; p < keys.length; p++) { 
        if (keys[p] == "sign" || values[p] === "") {
            continue;
        }
        var temp;
        if(values[p].indexOf("{{") != -1 && values[p].indexOf("}}") != -1) {
            temp = values[p].replace("{{", "");
            temp = temp.replace("}}", "");
        }
        str.push(keys[p] + "=" + values[p]);
    }
    var sign = str.join("&");    
    console.log(sign);
    pm.environment.set("sign", CryptoJS.MD5(sign).toString());
    }

当然,上述脚本中也可将sign_key设置为全局变量,然后在获取
代码如下:
str.push('key=' + pm.environment.get("key"))

上述方法也有可优化之处,欢迎各位大神指正!

上一篇下一篇

猜你喜欢

热点阅读