Stripe 客户门户网站在更新付款方式后立即对“逾期”发票强制重试收费

Posted

技术标签:

【中文标题】Stripe 客户门户网站在更新付款方式后立即对“逾期”发票强制重试收费【英文标题】:Stripe Customer Portal force retry charge on "past due" invoice immediately after updating payment method 【发布时间】:2022-01-20 10:40:31 【问题描述】:

一位客户注册了试用订阅。试用结束后,客户的卡被扣款。如果充值失败,则在接下来的 3 周内条带重试 4 次充值(默认设置)。在成功收费之前,客户的订阅处于“过期”状态。我要求客户更新他们的卡详细信息。

问题在于,当他们通过客户门户网站更新付款方式时,Stripe 不会立即对更新后的卡收取费用以支付“逾期”发票。它遵循默认“重试”的时间表。

我找不到客户门户的任何设置或 API 配置,这些设置或 API 配置会在卡详细信息更新后立即提示向客户的卡收费。

我接受了允许客户无需试用即可注册新订阅的选项,而不是更新他们的卡详细信息。在这种情况下,我面临的问题是,如果客户确实在重试的 3 周内创建了新订阅,那么之前的“逾期”发票仍会从他的卡中扣除。在这种情况下,我必须手动取消他们之前的订阅。

有人可以建议处理这个问题的最佳方法吗?

更新

根据乔纳森的建议,我是这样处理的:

            const customerId = event.data.object.customer;
            const subscriptions = await stripe.subscriptions.list(
              customer: customerId,
              status: "past_due",
              limit: 1,
            );
            if (subscriptions.data) 
              // retrieve and pay open invoice for overdue subscription
              const invoices = await stripe.invoices.list(
                customer: customerId,
                subscription: subscriptions.data[0].id,
                status: "open",
                limit: 1,
              );
              if (invoices.data) 
                await stripe.invoices.pay(invoices.data[0].id);
              
            

【问题讨论】:

【参考方案1】:

在客户更新其付款详细信息后,无法立即强制对未付发票进行付款。您需要通过订阅payment_method.attached event 自己处理这个问题。然后在您的 webhook 处理程序中,您可以实现 pay the invoice 所需的逻辑。

【讨论】:

感谢@jonathan 的澄清,我用我处理事件的方法更新了我的问题。

以上是关于Stripe 客户门户网站在更新付款方式后立即对“逾期”发票强制重试收费的主要内容,如果未能解决你的问题,请参考以下文章

使用附加卡对客户进行条带化,但没有默认付款方式

条带付款后如何访问响应/重定向?

Stripe 更新订阅并使用 3d 安全添加新的付款方式

Stripe:n 次付款后过期/取消订阅

Laravel Cashier - 更新订阅的付款方式

Stripe 在 PHP 中创建客户和经常性费用