在使用 Checkout Subscriptions 时,Stripe 文档指出要监控的最少事件类型是:
checkout.session.completed
- 当您收到 checkout.session.completed 事件时,您可以配置订阅。invoice.paid
- 在付款成功时发送每个计费间隔。invoice.payment_failed
- 如果您客户的付款方式有问题,则在每个计费间隔发送。当您收到 checkout.session.completed 事件时,您可以配置订阅。当您收到invoice.paid 事件时,继续每月进行配置(如果按月计费)。如果您收到 invoice.payment_failed 事件,请通知您的客户并将他们发送到客户门户以更新他们的付款方式。
https://stripe.com/docs/billing/subscriptions/checkout#provision-and-monitor
然而,我仍然对 invoice.paid
和 invoice.payment_failed
事件以及 Laravel Cashier 感到困惑:
我需要为这两个事件制作处理程序吗?
我问这个是因为收银员已经处理了 customer.subscription.updated
和 customer.subscription.deleted
事件,如果我理解得很好(如果我错了,请纠正我):
customer.subscription.updated
并且订阅将继续为 'active'
:$user->subscribed('default')
将为 {{1} }(在true
表中subscriptions
将保留stripe_status
)。active
事件将被触发/发送,并且 Cashier 将更改订阅状态(到 customer.subscription.updated
或 {{ 1}}?)和 canceled
将是 incomplete
,对吗?如果是这样,那么我认为没有理由为 $user->subscribed('default')
和 false
事件制作处理程序。我会知道付款(订阅续订)是否成功,因为 invoice.paid
事件将被触发/发送,收银员将更新 invoice.payment_failed
表中的customer.subscription.updated
。
或者我错了,它不会那样工作?如果我不太明白,那么我猜 stripe_status
事件根本不会被触发/发送,或者它会但它不会包含付款(续订)成功与否的信息(如果失败,那么在 subscriptions
事件的处理程序方法中,我必须将 customer.subscription.updated
(在 invoice.payment_failed
表中)更新为 stripe_status
或 subscriptions
?
答案 0 :(得分:1)
发票付款失败后订阅是否被删除取决于您的订阅设置:https://dashboard.stripe.com/settings/billing/automatic
因此,可以获得 invoice.payment_failed
事件而不取消订阅。
由于这些事件非常不同,因此最安全的做法是听取所有这些事件并进行相应处理。 customer.subscription.updated
和 invoice.paid
也非常不同,前者会在对订阅进行任何更新时触发(例如,如果您更新元数据),而后者只会在发票付款成功时触发。< /p>
这最终取决于您,但为了确保您不会错过任何重要事件,您应该考虑收听上述所有事件。