我见过this similar question,但它没有回答所提出的问题。
我无法理解如何管理重复订阅。
我做了一个测试,成功Stripe Checkout
测试付款后触发了以下事件:
charge.succeeded
checkout.session.completed
payment_method.attached
invoice.created
customer.subscription.created
invoice.updated
customer.subscription.updated
invoice.finalized
invoice.paid
我的问题是 checkout.session.completed
和 invoice.paid
都被解雇了。我了解在以下情况下可以完成会话
Stripe
文档说 this:
要监控的最少事件类型:
EVENT NAME |
DESCRIPTION |
---|---|
checkout.session.completed |
当客户点击 Checkout 中的“支付”或“订阅”按钮时发送,通知您有新购买。 |
invoice.paid |
在付款成功时发送每个计费间隔。 |
invoice.payment_failed |
如果您客户的付款方式有问题,则发送每个计费间隔。 |
在代码部分:
<块引用>对于checkout.session.completed
:
# 您应该提供订阅并将客户 ID 保存到您的数据库中。
对于invoice.paid
:
#随着付款的继续进行,继续提供订阅。
所以我认为肯定有一种方法可以识别 checkout.session.completed
和 invoice.paid
是否彼此相关,但问题是 checkout.session.completed
不包含任何 {{ 1}} id 并且 Invoice
不包含创建它的 invoice.paid
的 id。
如何让用户只订阅 1 个月,而不是 2 个月? CheckoutSession
甚至会跟踪订阅的结束时间吗?
因为在 tracking
section here 中,它说:
因此,此页面完全忽略 Stripe
端点并仅依赖于 checkout.session.completed
,据推测它可能只在会话完成后几个小时到达。 (我找不到这个链接。)
答案 0 :(得分:0)
我的问题是 checkout.session.completed
和 invoice.paid
都被解雇了。我了解在以下情况下可以完成会话
这是不正确的。 checkout.session.completed
仅在结帐会话成功完成时触发。 The documentation in the API reference for checkout.session.completed
事件说:
在结帐会话成功完成时发生。
我注意到您在有关此事件的文档中提到了这句话:
<块引用>当客户点击 Checkout 中的“支付”或“订阅”按钮时发送,通知您有新购买。
那里的关键词是“通知您有新购买”;此事件不会因未付款(即未进行购买)而触发。但是,它会在通过试用成功创建订阅后被触发。
<块引用>所以我认为肯定有一种方法可以识别 checkout.session.completed
和 invoice.paid
是否彼此相关,但问题是 checkout.session.completed
不包含任何 {{ 1}} id 并且 Invoice
不包含创建它的 invoice.paid
的 id。
结帐会话将在 its subscription
property 中指定关联的订阅。从那里您可以查看 Subscription's latest_invoice
property 以获取最新的发票 ID。
要确定您是否应该提供您的客户订阅的任何商品或服务,您可能需要使用 the customer.subscription.updated
event。这将为您提供有关 the status
of the Subscription 更改的更新,您可以根据该 CheckoutSession
进行配置。例如,如果 status
是 status
或 trialing
,则授予他们访问权限,但如果是其他任何内容,则不授予他们访问权限。