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

2024-04-04

我想测试我的应用程序在订阅付款已完成(或失败)时对来自 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(使用前将#替换为@)

如何测试 Stripe 中的订阅续订流程? 的相关文章

随机推荐

  • 在 Android APK 中嵌入版本详细信息

    我的代码存储在SVN版本控制中 我使用 Eclipse 来构建我的 Android 应用程序 在我的应用程序中 我有一个关于框 我想在其中显示正确的源代码控制修订版 标签 任何内容 有没有一种方法可以自动执行此操作 以便我在 关于 框中的版
  • 如何在 Ruby 中拆分字符串并获取除第一个之外的所有项目?

    字符串是ex test1 test2 test3 test4 test5 当我使用 ex split first 它返回 test1 现在我想获取剩余的项目 即 test2 test3 test4 test5 如果我使用 ex split
  • 默认情况下,鼠标单击是否会将键盘焦点带到可聚焦控件上?

    这个问题看起来很奇怪 但根据我的经验 我已经习惯了只需用鼠标单击即可将键盘焦点设置到可聚焦元素 但是 UserControl 具有以下属性Focusable true and IsTabStop true让我感到惊讶的是 它通过 Tab 获
  • 如何监控 TensorFlow 估计器训练中的验证损失?

    我想问一个关于如何在 TensorFlow 估计器的训练过程中监控验证损失的问题 我查过类似的问题 估计器训练期间的验证 https stackoverflow com questions 45417502 validation durin
  • 如何在 MATLAB 中执行此累积和?

    我想计算第 2 列中的值的累积和dat txt下面是第 1 列中的每个字符串 所需的输出显示为dat2 txt dat txt dat2 txt 1 20 1 20 20 20 0 1 22 1 22 42 20 22 1 20 1 20
  • 解析树和抽象语法树(AST)有什么区别?

    它们是由编译过程的不同阶段生成的吗 或者它们只是同一事物的不同名称 这是基于表达评估器 http www antlr3 org works help tutorial calculator html泰伦斯 帕尔的语法 本例的语法 gramm
  • 修复了左侧的侧边栏菜单和顶部的固定标题

    所以我想做的是一个固定的侧边栏 顶部有一个固定的菜单 中间的内容可以滚动 body html height 100 margin 0 aside background 90EE90 height 100 left 0 position fi
  • validateRequest="false" 不起作用,即使 requestValidationMode="2.0"

    我有一个在 Visual Studio dev fabric azure 项目 中运行的 ASP NET 网站 并且正在使用 ACS 和 WIF 我的身份验证过程无法正常工作 因为登录后我收到以下信息 A potentially dange
  • Node.js 中的客户端-服务器通信

    我最近开始使用 Node js 来制作一个在线游戏 用于教育 通过阅读各种教程 我想出了如下所示的简单代码 使用我拥有的代码 我能够进行客户端 服务器通信 这基本上是我制作游戏所需的全部内容 只有一个问题 只有客户端可以发起会话 而服务器只
  • 在 gridview 中显示数据库中的数据

    有谁知道如何将数据库条目放入android中的gridview中 或者是否有一个教程解释了如何做到这一点 请通过提供完整的示例来帮助我 您将需要使用游标适配器 http developer android com reference and
  • 当片段更改时如何更新视图?

    我有一个活动 其中有 2 个 sherlockfragment 前两个页面显示带有自定义列表视图的片段 这些视图是使用 AsyncTask 从服务器的 xml 构建的 但是 当应用程序运行时 仅显示一个列表视图 另一页只是空白 public
  • new URL() - WHATWG URL API

    我正在摆弄节点 并试图获取 URL 类的实例 因为这些方便的属性 喜欢 const URL require url http createServer request response gt let uri new URL request
  • 如何生成具有给定限制和平均值的随机数? [复制]

    这个问题在这里已经有答案了 我想生成一系列 30 个随机数 其中上限为 40 下限为 12 平均值为 23 总结 n 30 最小值 12 最大值 40 平均值 23 提前致谢 如果您想要连续分布 您可以获得最小值和最大值之间的任何浮点值 一
  • 如何在 UML 中指定“一次一个”?

    我正在制作一个类图Classroom and a Course class 我怎样才能表明Classroom只能有一个Course一次在其中吗 我知道我可以使用多重性来指定教室可以只开设一门课程 但这并不能完全指定在不同时间可以有除该一门课
  • 列表中情侣的乘积之和

    我想找出列表中情侣的乘积之和 例如给出一个列表 1 2 3 4 我想要得到的是答案 1 2 1 3 1 4 2 3 2 4 3 4 我使用暴力来完成此操作 它会给我带来非常大的列表的超时错误 我想要一种有效的方法来做到这一点 请告诉我 我该
  • setFont(Times-Roman) 不能缺少 T1 文件吗?

    我有错误 Can t find pfb for face Times Roman Error reportlab graphics renderPM RenderPMError Can t setFont Times Roman missi
  • 使用 StreamReader 异步解码 utf-8

    我正在习惯 asyncio 并发现任务处理非常好 但将异步库与传统 io 库混合起来可能很困难 我当前面临的问题是如何正确解码异步 StreamReader 最简单的解决方案是read 字节字符串块 然后解码每个块 请参阅下面的代码 在我的
  • React Native 嵌套 ScrollView 锁定

    我正在尝试将 ScrollViews 嵌套在 React Native 中 带有嵌套垂直滚动条的水平滚动条 这是一个例子 var Test React createClass render function return
  • 使用 urllib2 或任何其他 http 库读取超时

    我有用于读取这样的网址的代码 from urllib2 import Request urlopen req Request url for key val in headers items req add header key val r
  • 如何测试 Stripe 中的订阅续订流程?

    我想测试我的应用程序在订阅付款已完成 或失败 时对来自 stripe 的 webhook 事件的处理 这是我到目前为止所尝试过的 设置新订阅 将用户的信用卡更新为可以添加到帐户但无法实际扣款的信用卡 将试用结束日期更改为一秒内 等待几秒钟