所有文章
支付事件以 Webhook 形式流入本地检查器,并带有已验证的签名。
Stripewebhook debugginglocal testingpayments

本地测试 Stripe Webhook:完整指南

本地测试 Stripe Webhook 让你在上线生产前就能在自己的机器上验证支付事件处理逻辑。你在本地运行应用,通过公网 HTTPS URL 对外暴露,并在签名验证完全保留的情况下接收真实的 Stripe 测试模式事件。

为什么 Stripe Webhook 需要公网 URL

Stripe 通过公网把 Webhook 事件投递到配置好的端点 URL。像 127.0.0.1:3000 这样的地址 Stripe 服务器无法访问,因此本地开发需要一座桥梁。localhost 隧道 会把一个公网 HTTPS URL 映射到你的本地进程,无需修改路由器或防火墙。

测试前你需要准备什么

  • 处于测试模式的 Stripe 账户。
  • 带有 Webhook 路由的本地应用(例如 /api/webhooks/stripe)。
  • 在环境变量中配置好的 Stripe Webhook 签名密钥。
  • 能为签名校验保留请求头的隧道工具。

分步操作:用 PortPreview 在本地测试 Stripe Webhook

  1. 在目标端口上本地启动你的应用。
  2. 运行 npx portpreview 3000 生成公网 HTTPS URL。
  3. 在 Stripe 控制台进入 开发者 → Webhooks,添加隧道 URL 加上你的 Webhook 路径。
  4. 选择你要测试的事件(例如 checkout.session.completedinvoice.paid)。
  5. 从 Stripe 控制台或 CLI 触发测试事件,并检查每一次投递。
  6. 确认你的处理器返回 2xx 响应且签名校验通过。

PortPreview 会捕获请求头、请求体和响应状态,让你无需仅凭服务器日志猜测,就能调试失败的投递。

在本地验证 Stripe Webhook 签名

开发期间切勿关闭签名校验。Stripe 用你的 Webhook 密钥对每个负载签名,你的处理器应当像在生产中一样精确校验 Stripe-Signature 头。保留原始请求头的隧道工具让你能够测试真实的代码路径。

本地测试中常见的签名失败:

  • 使用了错误的 Webhook 密钥(控制台密钥与 CLI 密钥混用)。
  • 在校验前读取已解析的 JSON 请求体,而非原始请求体。
  • 时钟偏差超出 Stripe 的容差窗口。

值得在本地测试的事件

结账与订阅

测试 checkout.session.completedcustomer.subscription.createdinvoice.payment_failed,以确认开通、访问授权和催款逻辑。

Connect 与平台市场流程

如果你使用 Stripe Connect,请在上线前用测试关联账户验证账户更新事件和转账通知。

幂等性与重试

Stripe 会重试失败的投递。使用 Webhook 重放 确认你的处理器能安全处理重复事件。

Stripe CLI 与 localhost 隧道

Stripe CLI 可以用 stripe listen --forward-to 转发事件,适合快速检查。localhost 隧道给你一个稳定的公网 URL,可以粘贴进控制台、与队友共享,并用于多个服务商——不只是 Stripe。许多团队两者并用:CLI 用于快速迭代,隧道用于贴近生产配置的集成测试。

何时从本地转向预发布

本地测试涵盖处理器逻辑、负载解析和签名校验。对于受管密钥、数据库迁移和端到端发布流水线等环境相关的检查,请转向预发布环境。对于日常的支付功能开发,本地 Stripe Webhook 测试把迭代时间从几分钟缩短到几秒。

阅读我们关于 在本地调试 Webhook 的完整指南,或 加入 PortPreview 等候名单 体验以 Webhook 为先的隧道工作流。

常见问题

如何在 localhost 上测试 Stripe Webhook?
在本地运行应用,用 PortPreview 启动隧道获取公网 HTTPS URL,然后在 Stripe 控制台把该 URL 添加为 Webhook 端点。触发测试模式事件并检查每一次投递。
Stripe 签名校验能在隧道下工作吗?
可以,只要隧道保留原始请求头和请求体。PortPreview 会原样转发请求头,因此 Stripe-Signature 校验与生产环境表现一致。
我该用 Stripe CLI 还是 localhost 隧道?
Stripe CLI 适合单人快速调试。localhost 隧道提供稳定的公网 URL,用于控制台配置、团队共享,以及贴近生产配置的多服务商 Webhook 测试。