Laravel 收银员 (Stripe) - 结账 - invoice.paid & invoice.payment_failed 事件(webhooks)
Laravel Cashier (Stripe) - Checkout - invoice.paid & invoice.payment_failed events (webhooks)
使用 Checkout Subscriptions 时,Stripe 文档指出要监视的最少事件类型是:
checkout.session.completed
- 当您收到 checkout.session.completed 事件时,您可以提供订阅。
invoice.paid
- 支付成功时发送每个计费间隔。
invoice.payment_failed
- 如果您的客户的付款方式有问题,请发送每个计费间隔。
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.paid
和 invoice.payment_failed
事件以及 Laravel 收银员感到困惑:
我需要为这两个事件创建处理程序吗?
我问这个是因为 Cashier 已经处理了 customer.subscription.updated
和 customer.subscription.deleted
事件,如果我理解得很好(如果我错了请纠正我):
- 如果下个月付款(用于续订)成功,那么我将收到
customer.subscription.updated
并且订阅将继续'active'
:$user->subscribed('default')
将true
(在subscriptions
table stripe_status
中将保持active
)。
- 但是,如果下个月付款失败(例如,由于资金不足)- 那么
customer.subscription.updated
事件将为 triggered/sent,收银员将更改订阅状态(至 canceled
或 incomplete
?)和 $user->subscribed('default')
将是 false
,对吗?
如果是这样,那么我没有理由为 invoice.paid
和 invoice.payment_failed
事件创建处理程序。我会知道付款(订阅续订)是否成功,因为 customer.subscription.updated
事件将是 triggered/sent,收银员将更新 subscriptions
table 中的 stripe_status
。
或者我错了,那样行不通?如果我没有很好地理解,那么我猜 customer.subscription.updated
事件根本不会是 triggered/sent,或者它会但是如果支付(订阅续订)成功或者它不会包含信息不是(如果它失败了,那么在 invoice.payment_failed
事件的处理程序方法中我将不得不更新 stripe_status
(在 subscriptions
table 中)到 canceled
或incomplete
?
发票付款失败后是否删除订阅取决于您的订阅设置:https://dashboard.stripe.com/settings/billing/automatic
因此有可能获得 invoice.payment_failed
事件而不取消订阅。
由于这些事件非常不同,因此最安全的做法是聆听所有事件并相应地进行处理。 customer.subscription.updated
和 invoice.paid
也非常不同,前者会在订阅发生任何更新时触发(例如,如果您更新元数据),而后者只会在发票付款成功时触发。
这最终取决于您,但为确保您不会错过任何重要活动,您应该考虑收听上述所有活动。
使用 Checkout Subscriptions 时,Stripe 文档指出要监视的最少事件类型是:
checkout.session.completed
- 当您收到 checkout.session.completed 事件时,您可以提供订阅。invoice.paid
- 支付成功时发送每个计费间隔。invoice.payment_failed
- 如果您的客户的付款方式有问题,请发送每个计费间隔。
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.paid
和 invoice.payment_failed
事件以及 Laravel 收银员感到困惑:
我需要为这两个事件创建处理程序吗?
我问这个是因为 Cashier 已经处理了 customer.subscription.updated
和 customer.subscription.deleted
事件,如果我理解得很好(如果我错了请纠正我):
- 如果下个月付款(用于续订)成功,那么我将收到
customer.subscription.updated
并且订阅将继续'active'
:$user->subscribed('default')
将true
(在subscriptions
tablestripe_status
中将保持active
)。 - 但是,如果下个月付款失败(例如,由于资金不足)- 那么
customer.subscription.updated
事件将为 triggered/sent,收银员将更改订阅状态(至canceled
或incomplete
?)和$user->subscribed('default')
将是false
,对吗?
如果是这样,那么我没有理由为 invoice.paid
和 invoice.payment_failed
事件创建处理程序。我会知道付款(订阅续订)是否成功,因为 customer.subscription.updated
事件将是 triggered/sent,收银员将更新 subscriptions
table 中的 stripe_status
。
或者我错了,那样行不通?如果我没有很好地理解,那么我猜 customer.subscription.updated
事件根本不会是 triggered/sent,或者它会但是如果支付(订阅续订)成功或者它不会包含信息不是(如果它失败了,那么在 invoice.payment_failed
事件的处理程序方法中我将不得不更新 stripe_status
(在 subscriptions
table 中)到 canceled
或incomplete
?
发票付款失败后是否删除订阅取决于您的订阅设置:https://dashboard.stripe.com/settings/billing/automatic
因此有可能获得 invoice.payment_failed
事件而不取消订阅。
由于这些事件非常不同,因此最安全的做法是聆听所有事件并相应地进行处理。 customer.subscription.updated
和 invoice.paid
也非常不同,前者会在订阅发生任何更新时触发(例如,如果您更新元数据),而后者只会在发票付款成功时触发。
这最终取决于您,但为确保您不会错过任何重要活动,您应该考虑收听上述所有活动。