Stripe发票支付成功webhook被多次触发

4
我正在使用Stripe(测试模式)开发我的应用程序中的支付模块。我已经完成了以下操作:
  1. 使用Customer.create(customerParams)将客户订阅到Stripe中创建的现有计划。我理解这将创建一个客户,订阅计划,创建发票并收取发票。
  2. 我已添加了一个Webhook,仅针对invoice.payment_succeeded(paymentSuccess)和invoice.payment_failure(paymentFailure)。在我的应用程序中创建了一个Webhook。
我得到了以下结果:
  1. 在调用Customer.create(customerParams)后,我的paymentSuccess Webhook成功调用,使用它可以检索事件、发票、费用和客户详细信息以在我的应用程序中处理。paid标志设置为true。
  2. 在特定时间间隔(大约30分钟左右)内,此Webhook会多次调用(甚至超过3次),具有不同的发票ID、客户ID和费用ID。
我的问题:
  1. 为什么同一事件会出现多个Webhook调用?
  2. 如果这是对失败付款的重试,实际上并没有失败的付款。调用始终是invoice.payment_succeeded。
  3. 即使事件重复,为什么每次的customer_id、invoice_id都不同,因为付款只进行了一次,所以应该是相同的。
如有帮助,将不胜感激。提前致谢。
2个回答

3
如果客户ID、发票ID和收费ID不同,则不是同一个事件。
您可能在您的账户上设置了多个客户的订阅。
每当任何一张发票成功付款时,Stripe都会发送一个invoice.payment_succeeded事件。
如果您有多个客户订阅,Stripe将在每个计费周期开始时自动为他们创建一张发票,并在创建后大约一小时尝试支付这些发票。
您可以查找任何发票对象上的attempt_count属性,以了解对于给定的发票,这是否是第一次付款尝试。

谢谢回复。实际上,没有其他客户订阅那个特定的计划。因此,为了澄清:
  1. 我有一个名为“基础”的计划。
- KayKay
感谢您的回复。实际上没有其他客户订阅。因此,为了澄清:
  1. 我有一个计划“基础”。
  2. 在不同的日期(1月1日和11月15日)订阅了两个客户“Alex和John”到该计划中。
  3. 因此,在1月1日,将生成Alex的发票并尝试付款,将触发invoice.payment_succeeded挂钩。因此,将调用invoice.payment_succeeded挂钩处理程序一次。
  4. 因此,在1月1日,是否也会触发约翰的invoice.payment_succeeded挂钩?如果是这样,为什么它应该只在11月1日才触发?
- KayKay
嗨,Karikalan。你应该向Stripe的支持团队发送邮件,这样我们就可以直接查看你的账户并清楚地解释发生了什么。你可以使用https://support.stripe.com/email上的表格联系支持团队。 - Ywain
我已成功实现了Webhook,并捕获了Webhook事件来操作数据。我想获取订阅ID、客户ID等详细信息,但我无法通过直接访问对象属性来获取它们。我该怎么做? - viper

0
你在事件结束时返回了状态码200吗?
这个事件可能会因为执行不成功而被多次触发。Stripe会尝试完成请求,所以应该有一个返回状态来通知Stripe是否已经完成或失败。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接