如何在Stripe中测试订阅续订流程?

19
我希望测试我的应用程序如何处理stripe的webhook事件,当订阅付款成功或失败时。到目前为止,我尝试过以下操作:
- 设置一个新的订阅 - 更新用户的信用卡,使其可以添加到帐户中,但实际上无法收取费用 - 将试用结束日期更改为一秒钟后 - 等待几秒钟,期望发送webhook
然而,根据文档
“如果您配置了webhook,则发票将等待最后一个webhook成功发送(或最后一个webhook在失败后超时)的一小时。”
一小时是很长时间,因为我正在尝试作为自动化集成测试套件的一部分进行此操作。
一种建议(来自IRC)是伪造Webhook请求,以便我的集成测试发送事件,而不是Stripe发送。但是,由于Stripe在Webhooks中不包含任何类型的HMAC,因此我无法信任负载中的数据。因此,我的应用程序只从Webhook负载中获取事件ID,并从Stripe API中获取事件:(https://stripe.com/docs/webhooks)

如果安全性是一个问题,或者确认Stripe发送了Webhook很重要,则应仅使用Webhook中发送的ID,并直接从API请求其余详细信息。

如果我试图为测试注入假事件,则显然这样做将无效(按设计)。
对于测试这种情况的最佳实践是什么?

2
我建议在测试此流程时不要验证事件? 我自己做的是在实时模式下从API检索事件,但在测试模式下,我只是“信任”有效负载,因为我是发送方(而且它是测试模式)。 - koopajah
不确定这是一个非常好的答案!也许你可以回答自己的问题,分享一下你尝试过的方法? :) - koopajah
1
进一步阅读:http://blog.launchdarkly.com/best-practices-for-testing-stripe-webhook-event-processing/ - ptim
@ptim 哈哈,那实际上是我的博客文章,在我弄清楚所有这些后写的 :) - pkaeding
2
哈!太棒了,非常有帮助,谢谢 :) - ptim
显示剩余2条评论
3个回答

3
似乎没有完美的方法来处理这个问题。正如@koopajah在评论中建议的那样,我在应用程序中添加了一个配置值,以禁用从Stripe获取事件,而是只信任webhook中的事件数据。这使我能够以几乎与在生产环境中使用相同的方式测试我的流程,因为webhook中的事件数据和从Stripe获取的事件是相同的(假设它是一个真实的webhook请求:)。
除非/直到Stripe在webhook请求中包含HMAC签名来验证它来自他们的身份,否则我认为这是解决问题的最佳方法。

我也在使用Stripe Webhook来处理支付成功(循环付款),但是如何测试订阅用户的信用卡是否过期,信用卡是否没有足够的资金?我的钩子响应会是什么?我在Stripe文档中搜索了一下,但没有找到任何这种类型的测试。 - shazim ali
@shazimali 你应该监听 invoice.payment_failed 事件,无论原因如何,Stripe 都会在错误代码中返回原因。 - James B
@shazimali,我在我的用户访问文档(没有SQL)中设置了一个过期日期,并让invoice.paid续订它。我没有高级订阅,如果出了问题,我只能给我的用户一个免费月份。目前为止还没有出现任何问题。 - Jordan

0
一个小时的等待时间很长,因为我正在尝试将其作为自动化集成测试套件的一部分来完成。您可以通过转到发票并选择下面显示的“收费客户”按钮来缩短等待时间。

enter image description here


0

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