美文网首页
Postman - 使用pre-request-script动态

Postman - 使用pre-request-script动态

作者: 十毛tenmao | 来源:发表于2021-09-10 17:17 被阅读0次

    OpenApi一般都有签名,在对接的时候,不管文档写得多么完善,总是会有人不明白,所以可以提供一个Postman的Collection,里面包含了签名逻辑

    整体思路

    • 每个对接方分配一对appKey和appSecret,其中appSecret不能泄露
    • 每个请求需要appKey, timestamp以及signature
    • 根据请求信息(method, url, body) + appSecret生成signature

    请求样例

    • 请求URL如下
    https://www.tenmao.com/hello/world?app_key={{appKey}}&signtime={{timestamp}}&signature={{signature}}
    

    ps: 因为历史原因,这里的签名信息放在URL里面,其实最好还是放在header

    签名Pre-request-Script

    let timestamp = new Date().getTime().toString();
    
    //从环境变量读取appKey和appSecret
    const appKey = pm.environment.get("appKey")
    const appSecret = pm.environment.get("appSecret")
    console.log(`基本信息: appKey=${appKey}, appSecret=${appSecret}, timestamp=${timestamp}`)
    if (!appKey || !appSecret) {
        //如果不存在就直接抛出异常,这样就会弹出错误信息,同时不会再执行请求
        throw new Error("请先在环境变量中配置appKey和appSecret")
    }
    
    //计算签名 - 获取计算签名的数据
    var method = request.method;
    
    var canonicalUrl = pm.request.url.getPath();
    var data = pm.request.body.raw;
    if (!data) {
        data = "";
    }
    
    var message = method.toLowerCase() + "\n"
    + encodeURIComponent(canonicalUrl) + "\n"
    + data;
    
    //计算签名 - 第一次摘要(针对时间戳)
    var signKey = CryptoJS.HmacSHA1(timestamp, appSecret).toString(CryptoJS.enc.Hex);
    
    console.log("timestamp:" + timestamp + ", appSecret:" + appSecret + ",signKey:" + signKey)
    
    //计算签名 - 第二次摘要(计算最终签名)
    var signature = CryptoJS.HmacSHA1(message, signKey).toString(CryptoJS.enc.Hex);
    console.log(`签名信息: \nmessage=${message}\nsignKey=${signKey}\nsignature=${signature}`)
    
    //签名信息设置到环境变量
    pm.environment.set("timestamp", timestamp)
    pm.environment.set("signature", signature)
    

    script中关键点

    • 环境变量: pm.environment.get("appKey"), pm.environment.set("timestamp", timestamp)
    • ES6引入的字符串格式化语法: appKey=${appKey}, appSecret=${appSecret}, timestamp=${timestamp}
    • 异常提醒: throw new Error("请先在环境变量中配置appKey和appSecret")
    • 签名计算: CryptoJS.HmacSHA1(timestamp, appSecret).toString(CryptoJS.enc.Hex)

    相关文章

      网友评论

          本文标题:Postman - 使用pre-request-script动态

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