Postman生成SHA256的messageSignature时报base64未定义错误
问题原因
- Pre-request Script存在语法错误:
let msg定义行末尾存在多余的;+ JSON.stringify(msg)无效代码,会导致脚本执行中断,后续签名生成逻辑无法正常运行。 - 生成的签名未存入Postman全局变量:仅将
isoDateTostring存入了全局变量,但messageSignature生成后没有调用pm.globals.set存储,请求体无法读取到该变量值。 - 请求体变量引用格式错误:
- 自定义全局变量不需要加
$前缀,$开头是Postman内置动态变量的标识,应该用{{isoDateTostring}}、{{messageSignature}}格式引用。 - 字符串类型的变量在JSON里必须包裹双引号,现有写法没有加引号,会被JSON解析器识别为变量标识符而非字符串值,解析不到对应标识符时就会抛出
xxx is not defined类错误,你遇到的base64 is not defined就是解析签名值时触发的。
- 自定义全局变量不需要加
解决方法
- 修正Pre-request Script代码,删除无效逻辑、补充变量存储逻辑:
var dateIso = new Date().toISOString(); pm.globals.set("isoDateTostring", dateIso); console.log('timestamp var is:', pm.globals.get("isoDateTostring")); // 替换为实际的apiKey、studentId取值 let msg = "你的实际apiKey值" + "你的实际studentId值" + pm.globals.get("isoDateTostring"); const hmac = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, "你的实际secretKey"); hmac.update(msg); // 如果接口要求base64格式签名,把下方的CryptoJS.enc.Hex替换为CryptoJS.enc.Base64即可 const messageSignature = hmac.finalize().toString(CryptoJS.enc.Hex); // 将签名存入全局变量 pm.globals.set("messageSignature", messageSignature);
- 修正请求体JSON格式,给字符串变量加双引号、删除变量前的
$前缀:
{ "studentId":"********", "apiKey":"************", "timeStamp":"{{isoDateTostring}}", "messageSignature": "{{messageSignature}}" }
内容的提问来源于stack exchange,提问作者albertyaz
相关产品推荐
相关产品推荐

