记一次Apifox公共脚本添加签名的坑(纯记录)

先上最后结果:

// 获取 Query 参数对象
let queryParams = pm.request.url.query;
let appKey = pm.globals.get("appKey");
let random = parseInt(Math.random() * 32769 + 32768, 10);
// console.log('random', random);
let timestamp = new Date().getTime();
let signStr = 'appKey=' + appKey + '&timestamp=' + timestamp + '&random=' + random;
// console.log('signStr', signStr);
let sign = CryptoJS.MD5(signStr).toString();
queryParams.upsert({
  key: 'sign',
  value: sign,
});
queryParams.add({
  key: 'random',
  value: random.toString(),
});
queryParams.add({
  key: 'timestamp',
  value: timestamp.toString(),
});

//console.log('开始打印参数-----------》')
// 遍历整个 query
// queryParams.each((item) => {
//   console.log(item.key); // 输出参数名
//   console.log(item.value); // 输出参数值
// });

上面的脚本就是给请求加上三个参数:random,sign,timestamp。

第一个坑:

全局参数设置的mock值获取的问题:

参数值设置

参数值获取

 有意思的地方来了:请求头里面的数据是正确的,但是前置脚本里面获取的是mock数据的表达式,看下面的两个图:

上面的问题我也不知道是什么原因?有知道的可以帮我解释下,我最后的解决方案就是在前置脚本里面直接获取timestamp这个参数的数据,不用mock的动态值。

第二个坑:

queryParams.upsert({

  key: 'sign',

  value: sign,

});
queryParams.add({

  key: 'sign',

  value: sign,

});

 上面这两个方法里面的value必须是转换成字符串才能在请求头里面出现,否则你能在脚本里面打印出来,但是在请求头里面看不到。

到此结束!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值