美文网首页
利用postman自动计算接口签名

利用postman自动计算接口签名

作者: 七点水123 | 来源:发表于2018-10-12 15:49 被阅读0次

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

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

    相关文章

      网友评论

          本文标题:利用postman自动计算接口签名

          本文链接:https://www.haomeiwen.com/subject/gjrgaftx.html