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

如何修复Stripe webhook返回404、Express路由无法响应GET请求的问题

问题排查与修复方案

核心问题1:路由挂载规则误用导致路径重复拼接

Express的app.use(path, router)逻辑是把router内的所有路由路径 拼接到path前缀后面,而非直接替换。当前配置存在两个明显错误:

  • 你给/webhook路径挂载了webhooks路由,但webhooks路由内部又定义了router.route('/webhook').post(...),实际生效的webhook路径是/webhook/webhook,这就是Stripe请求/webhook返回404的直接原因。
  • orders路由多次重复挂载属于冗余配置,只需要挂载一次app.use('/', orders)即可,因为orders内部已经定义了/、/admin、/create-payment-intent这些子路径,重复挂载不会产生额外作用。

核心问题2:请求方法不匹配

你直接在浏览器地址栏访问路由默认发送的是GET请求,但:

  • /create-payment-intent仅定义了POST方法的处理逻辑
  • /webhook仅定义了POST方法的处理逻辑
    所以访问时会返回Cannot GET xxx的错误,属于预期行为,不属于配置错误。

修复步骤

第一步:清理app.js中的路由挂载逻辑,删除冗余的orders挂载

修改后的app.js路由注册部分代码:

// Register api routes
// 仅保留一次orders路由挂载即可,内部子路径会自动匹配
app.use('/', orders)
app.use('/webhook', webhooks)

第二步:修改webhooks路由内部的路径定义

因为已经给webhooks路由加了/webhook前缀,内部直接匹配根路径即可:
修改后的/routes/webhooks.js代码:

const express = require('express')
const router = express.Router()
const WebhooksController = require('../controllers/webhooksController')

// 这里修改为/,配合app.use('/webhook', webhooks),最终生效路径就是/webhook
router.route('/').post(express.raw({type: 'application/json'}), 
WebhooksController.apiPostWebhookEvent)

module.exports = router

补充说明

如果需要测试POST路由,可以用Postman、curl等工具发送POST请求,不要直接用浏览器地址栏GET访问。webhook和支付意图接口本身就只应该接收POST请求,不需要额外补充GET支持。

内容的提问来源于stack exchange,提问作者Kevin T.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:24:03