背景
由于我们的服务接口需要进行验签,每次通过Postman手动调用接口时都显得颇为繁琐。为了简化这一过程,我们可以充分利用Postman提供的脚本功能,自动为接口请求生成所需的签名。
案例
在Scripts中写生成接口签名的脚本。
以下是一个实用的脚本示例,展示了如何在Postman的Scripts中编写代码以生成接口签名:
script">// 设定你的签名密钥
let signSecret = 'your_sign_secret';// 初始化一个空对象,用于存放待签名的参数
let param = {};// 从请求体中解析出JSON参数
let jsonData = JSON.parse(pm.request.body.raw);
console.log(jsonData);// 调用自定义函数,根据参数生成待签名的字符串
let stringSignTemp = genSignStr(jsonData);// 获取当前的时间戳(毫秒级)
let timestamp = Date.now();
console.log(stringSignTemp);// 将时间戳和签名密钥拼接到待签名字符串的末尾
stringSignTemp += timestamp + signSecret;
console.log(stringSignTemp);// 使用CryptoJS库计算MD5签名
// 注意:确保CryptoJS库已在Postman环境中引入
let sign = CryptoJS.MD5(stringSignTemp).toString();
console.log(sign);try {// 将生成的签名和时间戳添加到HTTP请求的头部pm.request.headers.add({ key: "api-sign", value: sign });pm.request.headers.add({ key: "api-timestamp", value: timestamp.toString() });console.log('签名和时间戳已成功添加到请求头:');console.log(jsonData); // 在控制台打印完整的JSON数据以供调试
} catch (e) {// 捕获并打印任何可能发生的错误console.log(e);
}// 自定义函数:根据对象参数生成待签名的字符串
function genSignStr(objectMap) {// 此处应实现具体的签名参数拼接逻辑// 例如,将对象参数按键名排序,然后拼接成"key1=value1&key2=value2"的格式let resultString = "";// ...(签名参数拼接逻辑的实现)return resultString;
}
Tips:
- 如果你正在处理一个包含多个接口的项目,并且这些接口都需要使用相同的签名逻辑,那么你可以在Postman的项目文件夹中统一配置这个脚本,以便所有接口都能共享这一功能。
pm对象API参考:
pm.request
request
是接口请求对象。在前置脚本中表示将要发送的请求
,在后置脚本中表示已经发送了的请求
。
request
包含了以下结构:
-
pm.request.url
:Url
: 当前请求的 URL。 -
pm.request.getBaseUrl()
:获取当前运行环境选择的的前置 URL
,在 2.1.39 版本之后支持。 -
pm.request.headers
:HeaderList
:当前请求的 headers 列表。 -
pm.request.method
:String
当前请求的方法,如GET
、POST
等。 -
pm.request.body
:RequestBody
: 当前请求的 body 体。 -
pm.request.headers.add({ key: headerName:String, value: headerValue:String})
:function
: 给当前请求添加一个 key 为headerName
的 header。 -
pm.request.headers.remove(headerName:String)
:function
: 删除当前请求里 key 为headerName
的 header -
pm.request.headers.get(headerName:String)
:function
: 查询当前请求里的headerName
。 -
pm.request.headers.upsert({ key: headerName:String, value: headerValue:String})
:function
: upsert key 为headerName
的 header(如不存在则新增,如已存在则修改)。 -
pm.request.auth
: 当前请求的身份验证信息
通过上述脚本,你可以轻松地在Postman中自动为接口请求生成签名,从而大大提高接口调用的效率和便捷性。