我想测试我的应用程序在订阅付款已完成(或失败)时对来自 stripe 的 webhook 事件的处理。这是我到目前为止所尝试过的:
- 设置新订阅
- 将用户的信用卡更新为可以添加到帐户但无法实际扣款的信用卡
- 将试用结束日期更改为一秒内
- 等待几秒钟,等待发送 webhook
然而,根据文档 https://stripe.com/docs/api/go#invoices:
如果您配置了 Webhook,发票将等到最后一个 Webhook 成功发送后一小时(或最后一个 Webhook 发送失败后超时)。
一小时是一个很长的等待时间,因为我试图将其作为自动化集成测试套件的一部分。
一项建议(来自 IRC)是伪造 Webhook 请求,以便我的集成测试发送事件,而不是 Stripe 发送事件。但是,由于 Stripe 的 Webhooks 中不包含任何类型的 HMAC,因此我无法信任有效负载中的数据。因此,我的应用程序只是从 webhook 负载中获取事件 ID 并获取来自 Stripe API 的事件 https://stripe.com/docs/webhooks:
如果安全性是一个问题,或者如果需要确认 Stripe 发送了 Webhook,则您应该仅使用 Webhook 中发送的 ID,并且应该直接从 API 请求其余详细信息。
如果我试图为我的测试注入假事件(按设计),这显然不起作用。
测试此类场景的最佳实践是什么?
似乎没有一个完美的方法来做到这一点。正如 @koopajah 在 a 中所建议的comment https://stackoverflow.com/questions/29836883/how-can-i-test-subscription-renewal-flows-in-stripe?noredirect=1#comment47820436_29836883,我在应用程序中添加了一个配置值,该值将禁用从 Stripe 获取事件,而只信任 Webhook 中的事件数据。这使我能够以与生产中几乎相同的方式测试我的流程,因为 Webhook 中的事件数据和从 Stripe 获取的事件是相同的(假设它是真实的 Webhook 请求:)
除非/直到 Stripe 在 webhook 请求中包含 HMAC 签名来验证它来自他们,我认为这是解决问题的最佳方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)