php 如何使用订阅Stripe创建payment_intent

kq0g1dla  于 2023-04-28  发布在  PHP
关注(0)|答案(1)|浏览(226)

我正试图为我的客户建立一个支付流程,当他们进入一个产品的结账页面时,我会给予他们一个订阅应用程序并获得产品折扣的报价。因此,我在后端为产品创建了一个payment_intent,并将密钥发送到前端以创建支付元素。这是我的代码:

$paymentIntent = $stripe->paymentIntents->create(
                    [
                        'setup_future_usage' => 'off_session',
                        'customer' => 'customer_id',
                        'currency' => 'usd',
                        'amount' => '4999,
                        'automatic_payment_methods' => [
                            'enabled' => 'true',
                        ],
                    ]
                );
return $paymentIntent->client_secret;

当用户单击结帐页面上的按钮以获得订阅时,会调用后端,在那里我在条带中创建一个新的订阅,并将产品的条带价格附加到订阅-〉创建数据。然后从最新的发票中获取订阅+产品的payment_intent,并发送回密码以刷新支付元素。这是我的代码:

$subscriptionStripe = $stripe->subscriptions->create([
            'customer' => $customer,
            'items' => [
                ['price' => $planEntity->getStripePaymentLinkMonthly()],
            ],
            'payment_behavior' => 'default_incomplete',
            'add_invoice_items' => [['price' => $price]],
            'expand' => ['latest_invoice.payment_intent'],
            'trial_end' => $trial_end,
        ]);

        $invoice = $stripe->invoices->retrieve($subscriptionStripe->latest_invoice->id);

        $client_secret = $stripe->paymentIntents->retrieve($invoice->payment_intent)->client_secret;

我的订阅有一个试用期,当我使用这个支付流程时,用户会被收取产品费用,但当需要向他收取订阅费用时,他需要去验证3ds代码,付款失败。如果我删除试用期,用户将收取产品和订阅费用,一切正常。
我可以通过试用期来实现这一点吗?
同样,当我这样做的时候,我最初为产品创建了一个payment_intent,然后它仍然不完整。是否有方法更新产品的初始payment_intent,以包含订阅发票?
任何其他建议将不胜感激。
谢谢你
我尝试先支付产品的初始payment_intent,然后off_session支付订阅的发票,但我得到了用户需要用3ds验证卡的错误。

83qze16e

83qze16e1#

我不认为Stripe API真的支持将PaymentIntent与现有订阅链接起来。理想情况下,您应该只在客户准备结账时创建PaymentIntent(在他们选择订阅或不订阅之后)。这样你就可以创建一个一次性的PaymentIntent或者一个带有试用和一次性收费的订阅
这里的替代方法是在使用the new deferred PaymentIntent流创建PaymentIntent或Subscription之前收集PaymentMethod详细信息。

相关问题