如何使用 Stripe Webhooks 实现订单状态自动更新

Stripe Webhooks(网络钩子) 是实现真正的支付结果异步监听与自动状态变更。本文深入讲解如何配置 Stripe Webhooks,并在实际项目中实现订单状态的自动更新机制。

20250618135538281-image

一、什么是 Stripe Webhooks?

Webhooks 是 Stripe 向你服务器发送事件通知的一种机制。当某个事件,如付款成功、退款完成、订阅变更等发生时,Stripe 会向你预设的 URL(Webhook 端点)发送一个 POST 请求,包含事件详细信息。

使用 Webhooks 有哪些优势?

  • 异步通知:不用用户跳转或刷新页面,也能获取订单状态。
  • 实时更新:支付结果可以瞬时反馈,提高用户信任度。
  • 稳定可靠:Stripe 会自动重试失败的 webhook 事件,确保消息到达。
  • 扩展灵活:支持监听几十种事件类型,如 payment_intent.succeededcharge.refundedinvoice.payment_failed 等。
20250618135627377-image

二、如何配置 Stripe Webhook 端点?

第一步:进入 Webhook 配置页面

  1. 打开 Stripe 后台:https://dashboard.stripe.com
  2. 登录账户后,切换为测试模式(页面上方显示“测试模式”)在搜索栏中直接搜索 Webhook 即可快速创建
  3. 也可点击进入 Webhook 页面:
    https://dashboard.stripe.com/test/workbench/webhooks
20250618143024899-image

第二步:创建 Webhook 的“向导流程”

第一步选择侦听的事件类型

20250618143722460-image

推荐勾选的事件:

类别 推荐事件 说明
PaymentIntent payment_intent.succeeded 支付成功(常用于标记订单已支付)
PaymentIntent payment_intent.payment_failed 支付失败
20250618143928950-image

选好后,点击页面右下角的紫色按钮:
继续

第三步:配置 Webhook 端点信息

第 1 步:选择你要监听的事件(推荐选择):

  • payment_intent.succeeded(支付成功)
  • payment_intent.payment_failed(支付失败)

第 2 步:选择接收端类型

  • 选择Webhook端点,然后点继续
20250618144231332-image

第四步:填写配置接收端

在这一步你将看到一个表单,填写:

字段 内容
端点 URL(Endpoint URL) 输入你的服务器接收地址,如:https://yourdomain.com/webhook/stripe
描述(可选) 如“订单状态更新监听”

然后点击 创建目的地“ 即可完成 Webhook 配置!

20250618144555604-image
20250618144727494-image

三、订单状态自动化更新流程

1. 客户提交订单并跳转支付

创建 PaymentIntent 时附加订单 ID:

\Stripe\PaymentIntent::create([
    'amount' => 29900,
    'currency' => 'usd',
    'metadata' => ['order_id' => 'ORDER12345'],
]);

2. 客户完成支付,Stripe 自动触发 Webhook

事件如 payment_intent.succeeded 被触发,Stripe 将发送请求到你的 webhook 端点。

20250618150551744-image
20250618145423620-image

3. 后端解析事件,更新订单状态

运用 $event->type 区分事件,调用系统的订单更新逻辑(数据库写入、日志记录、通知发送等)。

4. 自动通知客户

在 webhook 接收逻辑中还可以:

  • 发送支付成功邮件
  • 推送站内通知
  • 通知发货系统准备物流

四、安全性与调试建议

1. 验证 Stripe 签名

建议启用 webhook 的签名验证,确保数据来源真实可靠。密钥签名可在 Stripe 后台 Webhook 配置页中找到。

20250618145725945-image

2. 本地开发推荐使用 stripe-cli

使用命令工具把 Stripe 事件转发到本地服务器:

stripe listen --forward-to localhost:8000/webhook/stripe

还可以使用模拟测试特定事件:

stripe trigger payment_intent.succeeded

五、支持的常用事件推荐清单

事件类型 描述
payment_intent.succeeded 支付成功,常用于确认订单
payment_intent.payment_failed 支付失败,可用于重试提醒
charge.refunded 退款完成,更新状态为已退款
checkout.session.completed Checkout 支付成功(如用 Stripe Checkout)
invoice.payment_succeeded 订阅类账单支付成功
invoice.payment_failed 自动续费失败

更多事件类型可参考官方文档:
https://stripe.com/docs/api/events/types

六、总结

Stripe Webhooks构建一个稳定、高效、不用人工介入的订单状态自动更新系统。无论是一次性支付、订阅服务、退款处理,Webhook 都可以帮助系统在第一时间做出响应,是现代电商系统的核心机制。


了解 宝藏号 的更多信息

订阅后即可通过电子邮件收到最新文章。

© 版权声明

相关文章

暂无评论

none
暂无评论...

了解 宝藏号 的更多信息

立即订阅以继续阅读并访问完整档案。

继续阅读