多次触发 Stripe invoice.payment_succeeded webhook

Posted

技术标签:

【中文标题】多次触发 Stripe invoice.payment_succeeded webhook【英文标题】:Stripe invoice.payment_succeeded webhook is triggered multiple times 【发布时间】:2016-04-14 01:46:52 【问题描述】:

我正在使用 Stripe(测试模式)在我的应用程序中开发支付模块。我做了以下,

    为客户订阅使用 Customer.create(customerParams) 在条带中创建的现有计划。据我了解,它将创建客户、订阅计划、创建发票、收取发票费用。

    我只为 invoice.payment_succeeded (paymentSuccess) 和 invoice.payment_failure (paymentFailure) 添加了 webhook。在我的应用程序中创建了一个 webhook。

我得到以下信息,

    在调用 Customer.create(customerParams) 后成功调用了我的 paymentSuccess webhook,我可以使用它检索事件、发票、费用和客户详细信息以在我的应用程序中处理它。付费标志设置为真。

    这个 webhook 在特定的时间间隔(大约 30 分钟左右)内被多次调用(甚至超过 3 次),具有不同的发票 ID、客户 ID、费用 ID。

我的问题:

    为什么同一事件有多个 webhook 调用? 如果是支付失败重试,其实没有失败支付。电话始终是 invoice.payment_succeeded。 即使事件重复发生,为什么每次的 customer_id、invoice_id 都不同,因为付款只进行了一次,所以应该是相同的。

任何帮助将不胜感激。提前致谢。

【问题讨论】:

【参考方案1】:

如果客户 ID、发票 ID 和费用 ID 不同,则不是同一事件。

您可能有多个客户在您的帐户上设置了订阅。

每当任何发票付款成功时,Stripe 都会发送一个invoice.payment_succeeded 事件。

如果您有多个订阅客户,Stripe 将在每个计费周期开始时自动为每个客户创建一张发票,并在创建后大约一小时尝试为这些发票付款。

您可以在任何invoice object 上查找attempt_count 属性,以了解这是否是给定发票的第一次付款尝试。

【讨论】:

感谢您的回复。实际上,没有其他客户订阅该特定计划。所以,澄清一下,1.我有一个“基本”计划 感谢您的回复。实际上没有其他客户订阅。因此,澄清一下,1. 我有一个“基本”计划 2. 在不同日期(1 月 1 日和 11 月 15 日)订阅了 2 位客户“alex and john”到该计划。 3. 因此,在 1 月 1 日,生成 alex 的发票并尝试付款,invoice.payment_succeeded 挂钩将被触发。因此, invoice.payment_succeeded 挂钩处理程序将被调用一次。 4. 那么,在 1 月 1 日,john 的 invoice.payment_succeeded 钩子也会被触发吗?如果是这样,为什么它应该只在 11 月 1 日? 嗨,卡里卡兰。您应该就此事写信给 Stripe 的支持部门,这样我们就可以直接查看您的帐户,并清楚地解释正在发生的事情。您可以使用support.stripe.com/email 的表格联系支持。 我已经成功实现了webhook并捕获了webhook事件来操作数据。我想获取订阅 ID、客户 ID 等详细信息,但无法通过对象直接访问属性来获取它。我该怎么做

以上是关于多次触发 Stripe invoice.payment_succeeded webhook的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Stripe 事件不会触发并且不会被 webhook 接收?

Stripe Connect Express Webhook - 如何在用户完成 Stripe Connect Express 表单并被重定向后触发 Stripe Webhook

php laravel 和 stripe 在特定时间自动触发付款

使用 Stripe Firebase 扩展 Webhook 运行订阅付款未触发

Firebase Cloud Functions - Stripe Connect Webhook 未触发

从 Firebase Cloud Function 连接到 Stripe 时出错