如何模拟Stripe订阅续订失败?

41
我正在尝试测试不同的Stripe订阅失败情况。具体来说,当一个活跃的订阅在最初卡片被接受并且订阅处于活跃状态时,续订付款被拒绝,或者客户在订阅期间删除了卡片,会发生什么情况。
我该如何在Stripe上模拟这种情况?

15
我已经编辑了这个问题,希望它可以重新开放。我在使用 Stripe API 进行开发时发现它非常有用。 - gingerlime
我同意@gingerlime的观点,这确实有助于提供输入。 - Jim M
这个答案至少对我有用,因为我有类似于OP的问题。 - aidan
1个回答

70

编辑于2023年02月02日:下面的回答是2016年编写的,尽管它仍然有效,但你现在可以使用测试时钟以更直接的方式实现。


为了测试失败的订阅支付,你可以按照以下步骤进行:

  1. 使用一个有效的卡片令牌(例如 4242 4242 4242 4242)在 source 参数中创建客户

  2. 创建订阅计划。由于第一次付款会成功,所以订阅将成功创建。

  3. 使用一个失败的卡片令牌(例如 4000 0000 0000 0341)在 source 参数中更新客户信息

  4. 使用 trial_end 参数设置未来几秒钟的时间,并将 prorate 设为 false更新订阅计划。这将有效地更改订阅的下次计费日期。

一旦达到 trial_end 日期,将开始新的计费周期并创建发票。约一个小时后,该发票将关闭并尝试进行付款。接下来会根据你的订阅账户设置决定发生什么。

为了测试第二个场景,您可以将上述第3步简单更改为删除卡片而不是使用一个失败的卡片来更新客户。点击此处了解更多关于删除卡片的信息。

6
一张发票创建后,到尝试支付它之间大约有一小时的延迟。这是出于设计考虑,您可以在最后时刻添加项目到发票中,这在某些情况下很有用(例如按度数计费)。您可以使用API强制提早支付尝试:https://stripe.com/docs/api#pay_invoice。 - Ywain
2
太好了。我现在明白了我需要做什么来测试这个案例。非常感谢你。 - Charlie Fish
1
对我来说,使用 trial_end 更新没有起作用,但是这个可以:subscription = await stripe.subscriptions.update(subscriptionId, { billing_cycle_anchor: 'now', proration_behavior: 'none' }); - dcts
3
Stripe的测试时钟功能很可能是2023年最好的选择。 - Kenzo
@Kenzo 如果我们想对连接的账户订阅进行这类测试,该怎么办? - undefined
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接