背景
由于我们的服务接口需要进行验签,每次通过Postman手动调用接口时都显得颇为繁琐。为了简化这一过程,我们可以充分利用Postman提供的脚本功能,自动为接口请求生成所需的签名。
案例
在Scripts中写生成接口签名的脚本。
以下是一个实用的脚本示例,展示了如何在Postman的Scripts中编写代码以生成接口签名:
// 设定你的签名密钥
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
的 headerpm.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中自动为接口请求生成签名,从而大大提高接口调用的效率和便捷性。