订阅结帐会话中的付款意图为空

Mir*_*lak 5 stripe-payments

我按照本教程使用 php 集成 stripe: https://phppot.com/php/manage-recurring- payments-using-stripe-billing-in-php / (我的网站有一些订阅计划并重定向到 stripe 结账形式 ) 。然而,对于最后一步,我决定不使用 webhooks,我选择像本教程中那样存储信息https://www.codexworld.com/stripe-checkout- payment-gateway-integration-php/ (我知道不用于订阅,但我只是使用本教程中的 success.php 代码来收集客户信息和付款意图详细信息)。我测试了它,完成了条带结帐表单,成功后我打印了结帐会话对象,并注意到该对象的 payment_intent 字段为空!因此,尽管付款已成功完成并且显示在仪表板上,但我无法加载付款意图对象并获取其信息。知道为什么吗?

编辑:根据结帐会话的文档(https://stripe.com/docs/api/checkout/sessions/object), payment_intent 字段存储支付模式下结帐会话的 PaymentIntent ID。就我而言,我有一种订阅模式,而不是付款模式。但是,如果我仍然想获取 $intent->status ,我可以使用会话对象 $checkout_session-> payment_status 的 payment_status 字段吗?如果订阅付款确实没有 paymentintents ,那么为什么付款会出现在仪表板上的付款部分?

Zhi*_*Kai 9

根据您传入的内容,或mode之一将被填充,其余的将被填充。payment_intentsubscriptionsetup_intentnull

付款后Subscription,您的用户将收到发票,因此它被视为付款并将显示在付款仪表板中。您可以检索Subscription并访问该latest_invoice字段来获取该Invoice对象。该Invoice对象包含该payment_intent字段。这可能就是您正在寻找的。

使用 webhook 可以简化该过程,因为您可以监听invoice.payment_suceeded以检索 PaymentIntent ID。