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

Express框架下Stripe Webhook本地测试提示签名验证失败如何解决?

Stripe Webhook签名验证失败问题解决方案

问题根源

你全局配置的express.json()中间件会将所有请求的原始请求体自动解析为JavaScript对象,而Stripe的签名校验算法要求传入未经过修改的原始请求体字符串/Buffer来计算签名,解析后的对象和原始内容不一致,直接导致签名校验失败。

解决步骤

  • 第一步:修改app.js中的全局JSON解析配置,排除Webhook路由
    把原有的全局app.use(express.json())替换为以下逻辑,仅对非Webhook的路由启用JSON解析:
app.use((req, res, next) => {
  // 此处路径替换为你实际的Stripe Webhook路由地址
  if (req.originalUrl === '/stripe-webhook') {
    return next();
  }
  express.json()(req, res, next);
});

// 原有express.urlencoded、cors等其他中间件保持不变
  • 第二步:给Webhook路由单独配置原始Body解析
    在定义Webhook路由时,单独使用express.raw中间件处理该路由的请求,保留原始请求体:
// 路径和上方排除的路径保持一致,type指定匹配Stripe的请求头类型
app.post(
  '/stripe-webhook',
  express.raw({ type: 'application/json' }),
  yourController.stripeListenWebhook
);
  • 第三步:确认密钥匹配
    本地测试用Stripe CLI触发事件时,需要使用CLI启动后输出的whsec_开头的本地测试密钥,不要直接使用线上Dashboard生成的Webhook密钥,两者不通用会导致校验失败。

修改后重新启动服务,再执行stripe trigger checkout.session.completed即可正常完成签名校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:54:02