针对付款失败的 Stripe 结帐事件

no.*_*no. 7 php stripe-payments

我有一个付费会员网站,通过 Stripe Checkout服务器集成)进行付款。当用户注册时,他们会被重定向到 Stripe 结帐(其 ID 作为“client_reference_id”传递),并在其中输入卡详细信息。对于结帐履行,我有一个链接到事件“ checkout.session.complete ”的Webhook设置。

一切正常,网络钩子触发,端点处理数据并将相应的帐户标记为已激活,向帐户持有者和网站管理员发送电子邮件,让他们知道帐户已创建并且付款已完成成功的。

但是,如果付款失败,我不知道将什么事件附加到 webhook 来通过 Stripe Checkout 检测失败的付款。记录的唯一结帐事件是“checkout.session.complete”,没有类似“checkout.session.failed”之类的事件。有“invoice. payment_failed”,但这用于订阅而不是一次性结帐付款。

我们主要希望在付款失败时通知网站管理员,以便他们知道帐户已创建但仍在等待付款。

是否有我遗漏的结帐事件或其他查找失败结帐交易的方法?

Mar*_*tin 5

要通过信用卡或借记卡收费,您需要创建一个Charge对象。您可以检索和退还个别费用以及列出所有费用。费用由唯一的随机 ID 标识。

- 来自 Stripe API 文档

然后,您可以检测的webhook响应charge.failed,以表明尝试使用charge对象失败

Stripe 曾经有非常清晰的文档,但最近他们有点迷失了方向。

Stripe 卡支付始终使用Charge对象,有时这些是由您设置的(invoicessubscriptions等),有时这些是由 Stripe 在幕后设置(“结帐流程”等)——但它们始终是设置的,因此您的 webhook 始终可以检测charge.failed事件。


附录

但是,这确实有效,因为 client_reference_id 不在 charge.failed 数据中,因此我无论如何都无法将失败的付款链接到特定帐户。但就我的实际问题而言,此事件确实有效并且是正确的答案,只是不幸的是它不能解决我的具体情况。

为了解决这个问题;使用 Stipe 接口或通过编码:

1) 创建一个Customer对象并保留该客户 ID 的某种记录。

2) 当 StripeCharge运行时,会设置关联的 $charge->customer。这可供您的网络钩子使用。

3) 当 webhook 结果出现时,使用此(通常)$event->data->object->customer值来交叉引用服务器上正确客户的费用。

4) 正如评论中提到的,Stripe Webhook 测试不会使用示例数据填充 webhook,例如->customer...:-(