我正试图为我的客户建立一个支付流程,当他们进入一个产品的结账页面时,我会给予他们一个订阅应用程序并获得产品折扣的报价。因此,我在后端为产品创建了一个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验证卡的错误。
1条答案
按热度按时间83qze16e1#
我不认为Stripe API真的支持将PaymentIntent与现有订阅链接起来。理想情况下,您应该只在客户准备结账时创建PaymentIntent(在他们选择订阅或不订阅之后)。这样你就可以创建一个一次性的PaymentIntent或者一个带有试用和一次性收费的订阅
这里的替代方法是在使用the new deferred PaymentIntent流创建PaymentIntent或Subscription之前收集PaymentMethod详细信息。