Postman 之添加请求时间和签名 pre-request Script

分类:Javascript |

// 说明:JS时间Date格式化参数

// 参数:格式化字符串如:'yyyy-MM-dd hh:mm:ss'

// 结果:如2016-06-01 10:09:00

Date.prototype.format = function (fmt) { 

    var o = {

        "M+": this.getMonth() + 1, //月份 

        "d+": this.getDate(), //日 

        "h+": this.getHours(), //小时 

        "m+": this.getMinutes(), //分 

        "s+": this.getSeconds(), //秒 

        "q+": Math.floor((this.getMonth() + 3) / 3), // 季度

        "S": this.getMilliseconds() // 毫秒

    };


    // 根据y的长度来截取年

    if (/(y+)/.test(fmt)){ 

        fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));

    }

    for (var k in o){

        if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));

    }

    return fmt;

}


var appSecret = "xxxxxx"; 

var datetime=new Date().format("yyyy-MM-dd hh:mm:ss");


var sortKeys = Object.keys(request.data).sort();  //请求参数名按照ASCII码升序排序

var str = [];  //拼接待签名字符串

for (var i = 0; i < sortKeys.length; i++) { 

    if(sortKeys[i] == "sign" || request.data[sortKeys[i]] === ""){ // == 宽松相等,隐性类型转换,值相等,返回true;

        continue; // === 严格相等,值和类型都相等,返回true

    }

    if(sortKeys[i] == "datetime"){

        str.push(sortKeys[i] + datetime);

        continue;

    }

    str.push(sortKeys[i] + request.data[sortKeys[i]]);

}


var preSign = str.join("");

preSign = CryptoJS.MD5(preSign).toString().toUpperCase(); // 签名规则

var sign = CryptoJS.MD5(preSign+appSecret).toString().toUpperCase();


//重设环境变量

//pm.environment.unset("sign");

//pm.environment.unset("datetime");

pm.environment.set("sign", sign);

pm.environment.set("datetime", datetime);