zoukankan      html  css  js  c++  java
  • postman发送HTTP请求自动生成MD5/SHA1签名

    POSTMAN是常用的接口测试工具

    如果需要生成签名之类的动态变量,可以通过Pre-request Script脚本来实现

    通俗说:它是js的语法,同时内置了postman的方法,可以轻松实现各种算法,截图如下:

    MD5签名

    先模拟一个简单的例子,从body中获取变量,然后手工拼接并生成MD5值

    代码如下:

    /**
     * 通过request.data获取body的内容,这个是postman内置变量
     * 常用内置参数如下:
     * request 获取请求的参数,包括头和请求体
     * responseHeaders 返回值的header
     * responseBody 返回值的body
     * responseCode 返回值的http code
     */
    var params = request.data;
    
    /**
     * MD5加签规则:
     * 1、根据key排序(这里就直接根据顺序拼接了)
     * 2、如果value不为空,就拼接如下:key1=value1&key2=value2 生成原串
     * 3、原串后+盐值,比如salt=shengpay,最终的摘要串=key1=value1&key2=value2shengpay
     * 4、消息摘要,并将结果转为大写
     * 
     */
    //连接符
    var join = '&';
    //盐值
    var MD5_SALT_SUFFIX = "shengpay";
    var md5salt = params.subMerchantNo + MD5_SALT_SUFFIX;
    
    var md5String = "orderId=" + params.orderId + join +
        "subMerchantNo=" + params.subMerchantNo + join +
        "terminalId=" + params.terminalId + md5salt;
    console.log("md5String---->" + md5String);
    
    var md5 = CryptoJS.MD5(md5String).toString().toUpperCase(); //MD5摘要后并转换为大写
    
    console.log("md5 digest---->" + md5);
    
    //放入环境变量
    //pm.environment.set("sign_message",md5)
    postman.setGlobalVariable("md5msg", md5);
    

      

    赋值:

    运行时候,打开控制台,就可以看到console.log()在控制台打印的日志啦

    代码很简单,直接看注释即可,唯一需要提一下,这里MD5签名使用到了CryptoJS类库,这是js的一个加解密的类库,支持AES、RSA等各种加解密算法;

    SHA1签名

    这里稍微复杂点,从body获取参数放入数组,然后排序,然后根据规则拼接字符串,最后生成SHA1签名串并使用十六进制编码;

    直接看代码:

    /**
     * 通过request.data获取body的内容,这个是postman内置变量
     * 常用内置参数如下:
     * request 获取请求的参数,包括头和请求体
     * responseHeaders 返回值的header
     * responseBody 返回值的body
     * responseCode 返回值的http code
     */
    var params = request.data;
    
    //body中参数放入数组
    var list = [params.subsystemId,params.clientId,params.account,params.timestamp];
    console.log("list---->" + list);
    
    // 字段排序:这里建议使用默认的排序,优先比较字符的第一个,相同则比对第二个...
    //list.sort(function(a, b){
        //return b-a;  //数字的排序
    //    return b.localeCompare(a); //字符串排序
    //});
    list.sort();
    console.log("list ---->" + list);
    
    //字段重新组装拼接
    var tmp='';
    for(var i=0;i<list.length;i++){
        tmp += list[i];
    }
    console.log("tmp ---->" + tmp);
    
    //生成签名串:这里使用SHA1算法并使用十六进制编码
    //CryptoJS-为JavaScript提供了各种各样的加密算法
    //作者:CryptoJS<>(https://code.google.com/p/crypto-js/)
    var signHmacSHA1=CryptoJS.SHA1(tmp).toString(CryptoJS.enc.Hex).toUpperCase();
    console.log("sign ---->" + signHmacSHA1);
    
    //放入环境变量
    //pm.environment.set("sha1msg",signHmacSHA1)
    postman.setGlobalVariable("sha1msg", signHmacSHA1);
  • 相关阅读:
    常用的DOCS命令
    [51NOD1126]求递推序列的第n项(矩阵快速幂)
    [HDOJ2830]Matrix Swapping II(胡搞)
    [每天一道A+B]签到检测程序
    [HIHO1260]String Problem I(trie树)
    [HIHO1300]展胜地的鲤鱼旗(栈,dp)
    [HIHO1299]打折机票(线段树)
    [51NOD1087]1 10 100 1000(规律,二分)
    [POJ2002]Squares(计算几何,二分)
    [HDOJ1015]Safecracker(DFS, 组合数学)
  • 原文地址:https://www.cnblogs.com/huahua035/p/9645202.html
Copyright © 2011-2022 走看看