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

Node.js/Express向'/webhook'发POST请求返回404错误排查求助

问题排查与修复方案
  • 请求地址配置错误

你当前往端口为3001的客户端发送webhook请求,自然会返回404。你的Firebase服务端模拟器运行在8080端口,且你导出的云函数名为api,所以接口路径默认会带上/api前缀,完整的本地请求地址格式为http://localhost:5001/[你的Firebase项目ID]/[部署区域,默认us-central1]/api/webhook,具体路径可以直接参考Firebase模拟器启动时终端输出的api函数访问地址。

  • Express中间件冲突

你全局注册了express.json()中间件,会自动解析所有请求的JSON格式请求体,但Stripe Webhook验签需要用到原始未被修改的请求体,全局解析会导致buffer(request)拿到的内容不符合验签要求,甚至直接报错。需要调整中间件注册逻辑,仅对非webhook的路由启用JSON解析:

// 替换原来的全局app.use(express.json())为下面的逻辑
app.use((req, res, next) => {
  if (req.originalUrl === '/webhook') {
    next();
  } else {
    express.json()(req, res, next);
  }
});
  • 代码语法错误

现有代码存在多处语法错误,会直接导致接口运行异常:

  1. 请求头获取方式错误:request.headers("stripe-signature") 应为 request.headers['stripe-signature'],headers是对象而非调用函数
  2. 变量未定义:捕获验签错误的分支里使用了未定义的res变量,你定义的请求参数为response,修改为response.status(400)
  3. 云函数导出参数错误:exports.api = functions.https.onRequest(app, firebaseAdmin) 中firebaseAdmin是多余参数,onRequest仅接收一个处理函数参数,直接改为exports.api = functions.https.onRequest(app)
  4. Firebase Admin初始化逻辑错误:admin.firebaseAdmin()是不存在的方法,多实例获取应用应该调用admin.app('firebaseAdmin'),修改为:
const firebaseAdmin = !admin.apps.length ? admin.initializeApp({
  credential: admin.credential.cert(serviceAccount)
}, 'firebaseAdmin') : admin.app('firebaseAdmin');
  • 缺少兜底响应逻辑

你仅处理了checkout.session.completed类型的事件,其他类型的Stripe事件推送过来时没有返回响应,会导致请求超时返回错误,需要在webhook路由最后添加兜底返回:

// 在webhook路由的最后补充
response.status(200).send('Event received');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 03:15:07