Stripe CLI 触发随机事件而不是 payment_intent.succeeded

Luc*_*Dev 3 express stripe-payments stripe-cli

这是我第一次使用 Stripe 进行测试,我无法解决我遇到的这个问题。我从这个链接复制了 Node/Express 的代码(我只是将端口更改为 3000 并删除了 bodyParser,因为我已经使用 app.use(bodyParser.json()) 对其进行了设置)并且我成功登录了我的帐户打字

stripe login
Run Code Online (Sandbox Code Playgroud)

在 CLI 中。在那之后,我设置了我的端点来监听 webhook

stripe listen --forward-to http://localhost:3000/webhook
Run Code Online (Sandbox Code Playgroud)

一切似乎都设置好后,我开始测试,但我注意到 Stripe CLI 中的一些随机行为:每次我尝试使用

stripe trigger payment_intent.succeeded
Run Code Online (Sandbox Code Playgroud)

我得到了不同的结果,如下所示:

2020-07-04 14:25:32   --> charge.succeeded [evt_1H1AQxH9PqQvGDtCJ7ShdAQE]
2020-07-04 14:25:32  <--  [400] POST http://localhost:3000/webhook [evt_1H1AQxH9PqQvGDtCJ7ShdAQE]
2020-07-04 14:25:34   --> payment_intent.succeeded [evt_1H1AQzH9PqQvGDtCl8ajm7po]
2020-07-04 14:25:34  <--  [200] POST http://localhost:3000/webhook [evt_1H1AQzH9PqQvGDtCl8ajm7po]
2020-07-04 14:25:34   --> payment_intent.created [evt_1H1AR0H9PqQvGDtC1xty9l6R]
2020-07-04 14:25:34  <--  [400] POST http://localhost:3000/webhook [evt_1H1AR0H9PqQvGDtC1xty9l6R]
2020-07-04 14:28:46   --> charge.succeeded [evt_1H1AU5H9PqQvGDtCHJ95Jb7H]
2020-07-04 14:28:46  <--  [400] POST http://localhost:3000/webhook [evt_1H1AU5H9PqQvGDtCHJ95Jb7H]
Run Code Online (Sandbox Code Playgroud)

我从未触发charge.succeeded 或payment_intent.created,但尽管如此,它们还是出现在CLI 中(作为400 错误)而不是正常的200 payment_intent.succeeded。我尝试控制台记录上面 Stripe Docs 示例中 switch 语句使用的 event.type,它确实显示事件是 charge.succeeded 和 payment_intent.created。

现在我的问题是:这是某种尚未修复的错误还是我做错了什么?也许有人可以帮我解决这个问题吗?

在此先感谢您的时间 :)

Luc*_*Dev 6

来自 Stripe 开发人员之一的回答:


当您使用 Stripe CLI 触发一个事件时,它会在幕后制作所有必需的 API 方法来触发该事件。在这种情况下,它正在创建和确认 PaymentIntent。

要获得最终的 payment_intent.succeeded 事件,您需要创建一个 PaymentIntent(payment_intent.created 将为此事件触发)。然后您需要确认付款意图并实际收款(结果为:charge.created、charge.succeeded 和 payment_intent.succeeded)。

对于诸如 checkout.session.completed 之类的其他事件类型,将触发许多其他事件,这些事件表示作为获得有效 checkout.session.completed 事件的先决条件的对象。

如果您只想在本地转发 payment_intent.succeeded 事件(并且在生产中为您的 webhook 端点仅启用选定的事件类型是一个好主意),那么您可能希望将-e参数传递给以stripe listen逗号分隔的特定列表你想听的事件。在这种情况下,您可以将您的监听命令更新为:

stripe listen --forward-to http://localhost:3000/webhook -e payment_intent.succeeded
Run Code Online (Sandbox Code Playgroud)

希望有帮助。如果您遇到任何问题,请随时通过 support.stripe.com/contact 或在 Freenode 上的 #stripe 频道中的 IRC 与团队联系。


我希望它对某人的帮助和对我的帮助一样多!


Joh*_*Doe -2

我也有同样的经历。相同的代码和运行的相同侦听器可以触发不同的 webhook。当我从 Stripe 的仪表板创建或取消用户订阅时,它根本不会触发任何 Webhook,有时触发一些发票 Webhook,有时触发一系列最多 10 个 Webhook,包括我期望的创建/取消订阅 Webhook。

天哪,条纹可能会非常令人沮丧。实施过程中的每一步都存在错误。有些我已经在他们的github上报告过,但没有得到任何回应。有些我什至没有报告。

我刚刚下载了新的 stripe CLI .deb 包。即使是输入品牌名称这样简单的事情,他们也做错了。它的拼写是“tripe CLI utility”。

无论如何,我只能建议您确保拥有所有最新的库。他们经常将库升级到新版本。

确保您的 stripe CLI 是最新的。stripe与您的节点服务器上相同。还可以在他们的 github 上开一张新票。例如,与 Google 不同,我认为 Stripe 没有任何工程师来监控 SO 上与 Stripe 相关的新问题。