You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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就是解析签名值时触发的。
解决方法
  1. 修正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);
  1. 修正请求体JSON格式,给字符串变量加双引号、删除变量前的$前缀:
{
"studentId":"********",
"apiKey":"************",
"timeStamp":"{{isoDateTostring}}",
"messageSignature": "{{messageSignature}}"
}

内容的提问来源于stack exchange,提问作者albertyaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 17:36:03