条纹 Webhooks:Invoice.paid 与 Checkout.Session.Completed

Stripe Webhooks: Invoice.paid vs Checkout.Session.Completed

我使用 Stripes 的 webhook 并希望在客户成功“支付账单”时收到通知。我遇到了两个 webhook,在我看来它们都可以完成这项工作:

  1. Webhook“invoice.paid”- 根据 Stripe 文档:每当发票付款尝试成功或发票被标记为带外付款时发生。
  2. Webhook“checkout.session.completed”- 根据 Stripe 文档:在成功完成结帐会话时发生。

我的问题是:

  1. 我不明白“invoice.paid”网络钩子的第二部分:“发票被标记为带外支付”->“带外”是什么意思?这样算不算支付成功?
  2. 关于“checkout.session.complete” -> 如果付款失败,也会发生这种情况 - 正确吗?
  3. 我应该考虑使用哪些 webhook(或是否有其他 webhook)来查看“客户已成功支付账单”状态?
  4. 此外,我真的不知道争议是否应该被视为成功付款:一方面,我得到一个 invoice.paid webhook,另一方面,我得到一个 charge.dispute.created 网络钩子。天哪...

感谢您的帮助!谢谢

I don't understand the second part of the "invoice.paid" webhook: "invoice is marked as paid out-of-band" -> What does "out-of-band" mean? Is this to be considered a successful payment?

这具体指的是标记发票paid out of band(即,客户在 Stripe 之外向您付款,而您希望将 Stripe 发票标记为已支付而不收取款项).这不会涉及实际付款,但会将发票转换为 status=paid,因此会触发此事件。

Regarding "checkout.session.complete" -> This can also occur, if payment fails - correct?

此事件仅表示结帐会话已完成。根据结帐的 mode 用途,这可能涉及也可能不涉及付款。如果需要立即付款,则只有在付款成功后会话才会完成。例如,免费试用的 mode=setupmode=subscription 不会涉及立即付款。不过,试用订阅将创建一张 0 美元的发票并触发 invoice.paid

Which webhooks shall I consider (or are there other webhooks) to see the status "customer paid the bill successfully"?

这取决于您所说的“付费”和“账单”是什么意思。如果您专门针对发票(无论是否与订阅相关),那么 invoice.paid 是一个不错的选择。然后,您可以过滤大于 0 美元的金额等,以进一步限制“支付”方式。

What is more, I don't really know if disputes should be considered as successful payments or not: On one hand, I get a invoice.paid webhook, on the other hand, I get a charge.dispute.created webhook.

争议不是付款,应该完全分开讨论。您只能在付款后有争议。建议从阅读 docs on disputes.

开始

总结:你真正想做什么?这些事件是相关的,有时会重叠,但并非总是如此。这在很大程度上取决于你在做什么。