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

生成JWT Token后用变量请求PaySprint服务器报500错误排查

JWT Token赋值请求头导致500错误排查

现象总结

复制控制台打印的Token值手动粘贴到请求头,调用PaySprint服务器可正常返回数据;但直接将生成的token变量赋值到请求头时,服务器返回500错误。

核心排查方向

Token本身是有效的(手动粘贴能正常请求),问题大概率出在变量传递、时机控制或细微格式差异上,而非Token生成逻辑本身。

具体排查步骤

  1. 检查变量作用域与值一致性

    • 在makereq函数内部直接打印token的具体值,而非仅打印typeof,对比是否和控制台输出的Token完全一致。
    • 确认token变量在makereq函数的作用域内可正常访问,不存在变量未定义或被覆盖的情况。
  2. 验证异步时机问题

    • 检查timestamp和randomNumber的生成逻辑:如果这两个值是异步获取(比如调用接口、生成随机数的异步方法),需确保生成Token前这两个值已经被正确赋值,避免Token生成时使用了未初始化的无效值。
  3. 处理不可见字符

    • 控制台打印的Token可能存在隐藏的换行或空格,生成Token后添加.trim()去除首尾空白字符:
      let token = jwt.sign(payload, secretKey, { header }).trim();
      
  4. 确认环境变量一致性

    • 验证生成Token时使用的process.env.SECRETKEY、process.env.PARTNERID,和手动粘贴测试时的环境变量值完全一致,避免运行时环境变量被修改。

示例修改代码

// Create Token
const secretKey = `${process.env.SECRETKEY}`;
const header = { typ: 'JWT', alg: 'HS256' };
// 确保timestamp和randomNumber已正确赋值
const payload = {
  timestamp: timestamp,
  partnerId: process.env.PARTNERID,
  reqid: randomNumber,
};
// 添加trim处理可能的空白字符
let token = jwt.sign(payload, secretKey, { header }).trim();
console.log(token);

// Call PaySprint Server
const makereq = async () => {
  try {
    const headerz = {
      "token": token,
      "authorisedkey": process.env.AUTHORISEDKEY
    };
    // 打印实际请求使用的Token,对比控制台输出
    console.log("Request Token:", token);
    
    const callPaysprint = await axios.post(url, body, { headers: headerz });
    return {
      data: callPaysprint.data,
      url: url,
      request: body,
    };
  } catch (error) {
    // 打印错误详情,帮助定位服务器返回500的具体原因
    console.error("Request Error:", error.response?.data || error.message);
    throw error;
  }
};
const result = await makereq();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 09:25:03