【问题标题】:Laravel Cashier (Stripe) - Checkout - invoice.paid & invoice.payment_failed events (webhooks)Laravel Cashier (Stripe) - 结帐 - invoice.paid & invoice.payment_failed 事件(webhooks)
【发布时间】:2021-09-10 07:10:30
【问题描述】:

使用 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.paidinvoice.payment_failed 事件和 Laravel Cashier 感到困惑:

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

  • 如果下个月支付(续订)成功,那么我将收到customer.subscription.updated,订阅将继续为'active'$user->subscribed('default')将是true(在subscriptions表@ 987654334@ 将保留为active)。
  • 但是,如果下个月付款失败(例如,由于资金不足) - 那么customer.subscription.updated 事件将被触发/发送,Cashier 将更改订阅状态(变为canceledincomplete?)和$user->subscribed('default') 将是 false,对吧?

如果是这样,那么我认为没有理由为invoice.paidinvoice.payment_failed 事件创建处理程序。我会知道付款(续订)是否成功,因为customer.subscription.updated 事件将被触发/发送,Cashier 将更新subscriptions 表中的stripe_status

或者我错了,它不会那样工作?如果我不太理解,那么我猜customer.subscription.updated 事件根本不会被触发/发送,或者它会但不会包含付款(续订)是否成功(如果它失败了,然后在invoice.payment_failed 事件的处理程序方法中,我必须将stripe_status(在subscriptions 表中)更新为canceledincomplete

【问题讨论】:

    标签: laravel laravel-cashier stripe-payments


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢。关于已经有customer.subscription.updated 事件处理程序的 Laravel Cashier 的一个问题:如果下个月付款失败(例如,由于资金不足) - 那么customer.subscription.updated 事件将被触发/发送并 Cashier将更新订阅的状态(subscriptions 表中的stripe_status 列)然后$user->subscribed('default') 将是错误的,对吗?如果是这样,那么在invoice.payment_failed 事件的处理程序方法中,我不需要更新subscriptions 表中的任何内容,我可以用它来“知道”付款是否失败?
    猜你喜欢
    • 2021-08-22
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多