PHP集成Stripe创建多订阅遇支付未完成问题求助
Stripe订阅集成问题排查
我用PHP给网站集成Stripe,设置了两个订阅方案:
- 方案1:75美元/年
- 方案2:6美元/月(附加方案,含更多功能)
逻辑规则:
- 用户选方案1时,仅创建对应年付订阅(已启用3DS/SCA,运行正常)
- 用户选方案2时,需一次性支付75美元+6美元,同时订阅两个方案
现在遇到的问题:选方案2时,用户成功订阅第二个方案,但第一个订阅的支付状态始终未完成。
我的代码如下:
$subscription_data = \Stripe\Subscription::create([ 'customer' => $customer->id, "items" => [ [ "plan" => $plan->id, ] ], 'payment_behavior' => 'default_incomplete', 'payment_settings' => ['save_default_payment_method' => 'on_subscription'], 'expand' => ['latest_invoice.payment_intent', 'pending_setup_intent'], ]);
问题根源与修正方法
你遗漏了将两个计划合并到同一个订阅中的关键步骤,当前代码仅创建了单个计划的订阅,而不是包含两个计划的订阅。
核心问题
如果用户选方案2时,你是创建了两个独立的订阅(一个年付、一个月付),那么每个订阅都会生成独立的发票和Payment Intent。若只处理了其中一个的支付流程,另一个订阅就会停留在未完成状态。正确的做法是创建一个订阅,同时包含两个计划条目,这样Stripe会自动生成合计81美元的发票,一次支付完成后两个计划都会生效。
修正后的代码
假设年付计划ID为plan_yearly_75,月付附加计划ID为plan_monthly_6,修改items数组同时包含两个计划:
$subscription_data = \Stripe\Subscription::create([ 'customer' => $customer->id, "items" => [ ["plan" => "plan_yearly_75"], // 年付方案 ["plan" => "plan_monthly_6"] // 月付附加方案 ], 'payment_behavior' => 'default_incomplete', 'payment_settings' => ['save_default_payment_method' => 'on_subscription'], 'expand' => ['latest_invoice.payment_intent', 'pending_setup_intent'], ]);
额外注意事项
- 确保前端正确处理这个订阅对应的
latest_invoice.payment_intent,完成3DS/SCA验证流程,支付完成后订阅会自动变为活跃状态,两个计划都会生效。 - 若你之前是创建两个独立订阅,需调整逻辑为单订阅多计划模式,避免拆分支付导致的状态不一致问题。
内容的提问来源于stack exchange,提问作者Pratik Ranpara
相关产品推荐
相关产品推荐

