【问题标题】:How can I test subscription renewal flows in stripe?如何以条带方式测试订阅续订流程?
【发布时间】:2015-07-02 10:21:51
【问题描述】:

当订阅支付完成(或失败)时,我想测试我的应用程序对来自条带的 webhook 事件的处理。到目前为止,这是我尝试过的:

  • 设置新订阅
  • 将用户的信用卡更新为可以添加到帐户的信用卡,但不会实际收费
  • 将试用结束日期更改为一秒
  • 等待几秒钟,等待 webhook 被发送

但是,根据the documentation

如果您已配置 webhook,发票将等到最后一个 webhook 成功发送后一小时(或最后一个 webhook 失败后超时)。

一小时的等待时间很长,因为我正在尝试将其作为自动化集成测试套件的一部分。

一个建议(来自 IRC)是伪造 webhook 请求,以便我的集成测试发送事件,而不是 Stripe 发送它。但是,由于 Stripe 在 webhook 中不包含任何类型的 HMAC,我不能信任有效负载中的数据。所以,我的应用程序只是从 webhook 有效负载中获取事件 ID 并获取 event from the Stripe API

如果担心安全性,或者如果确认 Stripe 发送了 webhook 很重要,您应该只使用在 webhook 中发送的 ID,并且应该直接从 API 请求剩余的详细信息。

如果我试图为我的测试注入虚假事件(按设计),这显然不起作用。

测试这种场景的最佳实践是什么?

【问题讨论】:

  • 我会说在您测试此流程时不要验证事件?我自己做的是在实时模式下从 API 检索事件,但在测试模式下,我只是“信任”有效负载,因为我是发送它的人(而且它是测试模式)。
  • @koopajah 谢谢,我想这是要走的路。如果您想将其发布为答案,我会将其标记为“已接受”。
  • 延伸阅读:blog.launchdarkly.com/…
  • 哈!太棒了,很有帮助,谢谢:)
  • 如果您正在寻找 ASP.NET 中 Stripe 订阅/定期支付集成的最新解决方案,请查看演示 ==> techtolia.com/StripeSubscriptions

标签: integration-testing stripe-payments


【解决方案1】:

似乎没有完美的方法来做到这一点。正如@koopajah 在comment 中所建议的那样,我在我的应用程序中添加了一个配置值,它将禁用从 Stripe 获取事件,而只信任 webhook 中的事件数据。这允许我以几乎与在生产环境中相同的方式测试我的流程,因为 webhook 中的事件数据和从 Stripe 获取的事件是相同的(假设它是一个真实的 webhook 请求:)

除非/直到 Stripe 在 webhook 请求中包含 HMAC 签名以验证它来自他们,否则我认为这是解决问题的最佳方法。

【讨论】:

  • 我也在使用条纹 webhook 来支付成功(定期支付),但是我如何测试订阅的用户卡是否过期,卡有空资金?我的钩子反应是什么?我搜索了条带文档,但没有找到任何这种类型的测试。
  • @shazimali 您应该留意 invoice.payment_failed 事件,无论什么原因,Stripe 都会在错误代码中返回原因。
  • @shazimali,我在我的用户访问文档(没有 SQL)中设置了一个到期日期,并让 invoice.paid 更新它。我没有高额订阅,如果出现问题,我可以给我的用户一个月的免费时间。什么都没有。
猜你喜欢
  • 1970-01-01
  • 2012-10-12
  • 1970-01-01
  • 2020-10-12
  • 2018-01-02
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
  • 2020-01-16
相关资源
最近更新 更多