Laravel 收银员 (Stripe) - 结账 - invoice.paid & invoice.payment_failed 事件(webhooks)

Laravel Cashier (Stripe) - Checkout - invoice.paid & invoice.payment_failed events (webhooks)

使用 Checkout Subscriptions 时,Stripe 文档指出要监视的最少事件类型是:

When you receive a checkout.session.completed event, you can provision the subscription. Continue to provision each month (if billing monthly) as you receive invoice.paid events. If you receive an invoice.payment_failed event, notify your customer and send them to the customer portal to update their payment method.

https://stripe.com/docs/billing/subscriptions/checkout#provision-and-monitor

但是,我仍然对 invoice.paidinvoice.payment_failed 事件以及 Laravel 收银员感到困惑:

我需要为这两个事件创建处理程序吗? 我问这个是因为 Cashier 已经处理了 customer.subscription.updatedcustomer.subscription.deleted 事件,如果我理解得很好(如果我错了请纠正我):

如果是这样,那么我没有理由为 invoice.paidinvoice.payment_failed 事件创建处理程序。我会知道付款(订阅续订)是否成功,因为 customer.subscription.updated 事件将是 triggered/sent,收银员将更新 subscriptions table 中的 stripe_status

或者我错了,那样行不通?如果我没有很好地理解,那么我猜 customer.subscription.updated 事件根本不会是 triggered/sent,或者它会但是如果支付(订阅续订)成功或者它不会包含信息不是(如果它失败了,那么在 invoice.payment_failed 事件的处理程序方法中我将不得不更新 stripe_status(在 subscriptions table 中)到 canceledincomplete?

发票付款失败后是否删除订阅取决于您的订阅设置:https://dashboard.stripe.com/settings/billing/automatic

因此有可能获得 invoice.payment_failed 事件而不取消订阅。

由于这些事件非常不同,因此最安全的做法是聆听所有事件并相应地进行处理。 customer.subscription.updatedinvoice.paid 也非常不同,前者会在订阅发生任何更新时触发(例如,如果您更新元数据),而后者只会在发票付款成功时触发。

这最终取决于您,但为确保您不会错过任何重要活动,您应该考虑收听上述所有活动。