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

处理Stripe Webhook时持续触发StripeSignatureVerificationError求助

Stripe Webhook 签名验证错误(StripeSignatureVerificationError)排查方案

以下是针对该错误的核心排查方向及解决方法:

  • 确认签名密钥准确性
    必须使用Stripe Dashboard对应Webhook端点的签名密钥(格式为whsec_xxx),而非API密钥。复制时确保无空格、字符遗漏或多余符号。

  • 保证请求体未被修改
    签名验证依赖原始请求体,若Express中间件(如express.json())提前解析或修改了请求体,会直接导致验证失败。正确处理方式:

    // 先以原始格式接收请求体,再处理
    app.use('/webhook', express.raw({type: 'application/json'}));
    app.post('/webhook', (req, res) => {
      const sig = req.headers['stripe-signature'];
      let event;
      try {
        event = stripe.webhooks.constructEvent(
          req.body,
          sig,
          process.env.STRIPE_WEBHOOK_SECRET
        );
      } catch (err) {
        return res.status(400).send(`Webhook Error: ${err.message}`);
      }
      // 后续事件处理逻辑
    });
    
  • 检查请求头传递完整性
    确认stripe-signature请求头未被代理、服务器(如Nginx)过滤或修改。需配置相关服务保证该头信息原样传递至Express服务。

  • 校准服务器时间
    Stripe签名包含时间戳,若服务器与Stripe服务器时间偏差超过5分钟会触发错误。同步服务器时间至NTP服务器即可解决;临时排查可放宽时间容忍度(不推荐长期使用):

    event = stripe.webhooks.constructEvent(
      req.body,
      sig,
      process.env.STRIPE_WEBHOOK_SECRET,
      300 // 放宽至5分钟,单位为秒
    );
    
  • 本地测试规范
    使用Stripe CLI测试时,确保CLI绑定了正确的签名密钥;通过ngrok等工具暴露本地服务时,禁用压缩功能,避免请求体被篡改。

补充:你提供的两张截图中,第一张明确显示StripeSignatureVerificationError签名验证失败的错误提示;第二张为代码中捕获该错误的处理逻辑片段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:50:38