利用postman自动计算接口签名

这些文档本来保存在本地的,但后来想了想还是挑了个平台发表出来,话不多少来看看怎么使用的吧!
很多接口需要进行加密处理,比如对参数进行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"))

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,816评论 1 32
  • https://nodejs.org/api/documentation.html 工具模块 Assert 测试 ...
    KeKeMars阅读 11,515评论 0 6
  • 越长大就越不容易开心,不知道是要求太多过高还是得到的并不是想要的。幸福的形状都是相似的,不幸却各有各的不...
    行云流水畅遨游阅读 1,378评论 0 0
  • 今天晚上张志成泡脚有点心不在焉“妈妈!我可不可以多用几张彩纸,我想做一个手工?”儿子问道。“可以!不过我想知...
    张志成娘阅读 2,929评论 0 1
  • 那年秋天我要去常州上学。 因为脚踝扭伤了,所以没有及时去学校。等到伤好点的时候,正好学校催促,就赶过去了。 当时我...
    李若桃阅读 1,423评论 0 0