Stripe webhook,当支付的产品不是订阅而是一次性付款时,我如何才能收到 PRICE 项目?
Posted
技术标签:
【中文标题】Stripe webhook,当支付的产品不是订阅而是一次性付款时,我如何才能收到 PRICE 项目?【英文标题】:Stripe webhooks, how can I receive the PRICE item when the product paid for is not a subscription but a one-time payment? 【发布时间】:2021-04-23 04:40:17 【问题描述】:我在 Stripe 有 1 个产品,有 2 个价格
第一个价格是定期订阅 第二个价格是一次性付款我使用redirectToCheckout
处理这两个,第一个使用mode: subscription
,第二个使用mode: payment
,两者都在lineItems
中指示各自的价格代码
然后,当 Stripe 完成付款后,我会将 webhook 发送到我的 php 后端
对于第一个项目,我得到事件类型 customer.subscription.created
,并且在该 webhook 中发送的信息包括价格代码
我需要此价格代码以确保用户已为该特定price
商品付款
问题在于第二个项目,我已经能够识别出 4 个在付款后通过 webhooks 发送的事件:
customer.created
charge.succeeded
payment_intent.succeeded
checkout.session.completed
而且它们都不包含price
用户支付的产品信息
也许我可以在 fetch
操作中向 stripe 询问该信息,但是...不可能没有任何包含此基本 (?) 信息的 webhook
还是我理解错了?
编辑:
可能答案是this one,因此默认情况下 webhook (checkout.session.completed
) 不包含此信息,并且确实必须在第二步中检索它
【问题讨论】:
对于定期订阅,您可能希望收听invoice.paid
事件,其中将包括invoice.lines.data[].price
下的价格ID - 此信息应该在事件中随时可用。对于一次性付款,您需要监听 customer.session.completed
事件并检索展开 line_items 的会话。这是一个示例:stripe.com/docs/expand#includable-properties。价格将低于line_items.data.price
。我还推荐跟踪活动订阅者的文档:stripe.com/docs/billing/subscriptions/webhooks#tracking
谢谢,确实第一个链接解释得很好,也许你想把它格式化为一个 aswer(或者我可以做到)。也就是说,您在订阅 webhook 中默认获得的内容与一次性付款 webhook 中的默认值不一致,也许在未来的 api 更新条带决定将价格作为默认信息添加到任何地方
【参考方案1】:
正如@ttmarek 所说,答案在这里https://stripe.com/docs/expand#includable-properties 表明如果使用single payment
,则必须检索此信息
如果使用subscription
,则默认包含此信息,无需启动另一个请求
避免这种额外请求的替代方法是使用 amount
charged(大多数 webhook 附带),前提是您可以从该金额中确定您的价格
【讨论】:
以上是关于Stripe webhook,当支付的产品不是订阅而是一次性付款时,我如何才能收到 PRICE 项目?的主要内容,如果未能解决你的问题,请参考以下文章
使用 customer.subscription.update 而不是 invoice.paid 和 invoice.payment_failed 事件 webhook 来处理 Stripe 订阅