postman 在接口调用中使用动态变量
- 前端
- 2024-05-25
- 42热度
- 0评论
在接口调用中经常会遇到使用sign签名,需要动态生成,并且有加密,排序等需求
// Replace with your app secret
var secret = "7bf9fa93cd06a160c03f5789be285ac36df8701f"
function objKeySort(obj) {
var newKey = Object.keys(obj).sort()
var newObj = {}
for (var i = 0; i < newKey.length; i++) {
newObj[newKey[i]] = obj[newKey[i]]
}
return newObj
}
function getEnvVar(k) {
var v = pm.variables.get(k)
if (v != null) {
return v
}
v = pm.environment.get(k)
if (v != null) {
return v
}
v = pm.globals.get(k)
if (v != null) {
return v
}
return null
}
var ts = Date.parse(new Date()) / 1000
pm.variables.set("timestamp", ts)
calSign = function(secret) {
var ts = getEnvVar("timestamp")
var queryParam = pm.request.url.query.members
var param = {}
for (var item in queryParam) {
if (queryParam[item].key == "timestamp") {
v = ts
} else {
var v = queryParam[item].value
if (v == null || v == "{{" + queryParam[item].key + "}}") {
v = getEnvVar(queryParam[item].key)
}
}
param[queryParam[item].key] = interpolateVar(v)
}
delete param["sign"]
delete param["access_token"]
var sortedObj = objKeySort(param)
var signstring = secret + pm.request.url.getPath()
for (var key in sortedObj) {
signstring = signstring + key + sortedObj[key]
}
signstring = signstring + interpolateVar(pm.request.body.toString()) + secret
console.log(signstring)
sign = CryptoJS.HmacSHA256(signstring, secret).toString()
return sign
}
function interpolateVar (value) {
const {Property} = require('postman-collection')
return Property.replaceSubstitutions(value, pm.variables.toObject())
}
var sign = calSign(secret)
pm.variables.set("sign", sign)