如何在条带中测试订阅续订流程?
How can I test subscription renewal flows in stripe?
我想测试我的应用程序在订阅付款完成(或失败)后对来自 stripe 的 webhook 事件的处理。到目前为止,这是我尝试过的:
- 设置新订阅
- 将用户的信用卡更新为可以添加到帐户但不会实际收费的信用卡
- 将试用结束日期更改为一秒后
- 等待 webhook 发送几秒钟
然而,根据the documentation:
If you have configured webhooks, the invoice will wait until one hour after the last webhook is successfully sent (or the last webhook times out after failing).
一个小时的等待时间很长,因为我正在尝试将此作为自动化集成测试套件的一部分。
一个建议(来自 IRC)是伪造 webhook 请求,以便我的集成测试发送事件,而不是 Stripe 发送它。但是,由于 Stripe 在 webhook 中不包含任何类型的 HMAC,因此我无法信任有效负载中的数据。所以,我的应用程序只是从 webhook 负载中获取事件 ID 并获取 event from the Stripe API:
If security is a concern, or if it's important to confirm that Stripe sent the webhook, you should only use the ID sent in your webhook and should request the remaining details from the API directly.
如果我试图为我的测试注入虚假事件(按设计),这显然不起作用。
测试此类场景的最佳做法是什么?
似乎没有完美的方法来做到这一点。正如@koopajah 在 中所建议的那样,我在我的应用程序中添加了一个配置值,该值将禁用从 Stripe 获取事件,而是只信任 webhook 中的事件数据。这使我能够以几乎与生产环境相同的方式测试我的流程,因为 webhook 中的事件数据和从 Stripe 获取的事件是相同的(假设它是一个真实的 webhook 请求:)
Unless/until Stripe 在 webhook 请求中包含一个 HMAC 签名以验证它来自他们,我认为这是解决问题的最佳方法。
我想测试我的应用程序在订阅付款完成(或失败)后对来自 stripe 的 webhook 事件的处理。到目前为止,这是我尝试过的:
- 设置新订阅
- 将用户的信用卡更新为可以添加到帐户但不会实际收费的信用卡
- 将试用结束日期更改为一秒后
- 等待 webhook 发送几秒钟
然而,根据the documentation:
If you have configured webhooks, the invoice will wait until one hour after the last webhook is successfully sent (or the last webhook times out after failing).
一个小时的等待时间很长,因为我正在尝试将此作为自动化集成测试套件的一部分。
一个建议(来自 IRC)是伪造 webhook 请求,以便我的集成测试发送事件,而不是 Stripe 发送它。但是,由于 Stripe 在 webhook 中不包含任何类型的 HMAC,因此我无法信任有效负载中的数据。所以,我的应用程序只是从 webhook 负载中获取事件 ID 并获取 event from the Stripe API:
If security is a concern, or if it's important to confirm that Stripe sent the webhook, you should only use the ID sent in your webhook and should request the remaining details from the API directly.
如果我试图为我的测试注入虚假事件(按设计),这显然不起作用。
测试此类场景的最佳做法是什么?
似乎没有完美的方法来做到这一点。正如@koopajah 在
Unless/until Stripe 在 webhook 请求中包含一个 HMAC 签名以验证它来自他们,我认为这是解决问题的最佳方法。