Stripe API中Mode参数问题及Laravel代码报错求助
问题解答
关于Stripe API的Mode参数
Stripe Checkout Session的mode参数用于定义会话的交易类型,核心可选值有两个:
payment:适用于一次性付款场景,对应单次商品/服务购买subscription:适用于订阅制付款场景,对应定期扣费的会员、订阅服务
当你在Checkout Session中使用price_data或关联已创建的price对象时,必须明确指定mode——Stripe需要通过这个参数确定后续的交易处理逻辑,这也是你触发错误的直接原因。
错误修复方案
你的代码中缺少mode参数,只需在Session创建的配置数组中添加该字段即可,根据业务场景选择对应值:
场景1:一次性付款
$session = Session::create([ 'payment_method_types' => ['card'], 'mode' => 'payment', // 添加mode参数 'line_items' => [ [ 'price_data' => [ 'unit_amount' => $secretPlan['amount'] * 100, 'currency' => $secretPlan['currency'], 'product_data' => [ 'name' => $secretPlan['name'], 'description' => $secretPlan['description'] ] ], 'quantity' => $secretPlan['quantity'], ], ], 'success_url' => $successURL, 'cancel_url' => route('payment.cancel') ]);
场景2:订阅制付款
$session = Session::create([ 'payment_method_types' => ['card'], 'mode' => 'subscription', // 添加mode参数 'line_items' => [ [ 'price_data' => [ 'unit_amount' => $secretPlan['amount'] * 100, 'currency' => $secretPlan['currency'], 'product_data' => [ 'name' => $secretPlan['name'], 'description' => $secretPlan['description'] ], 'recurring' => [ // 订阅场景需补充周期配置 'interval' => 'month', // 可选值:day, week, month, year ], ], 'quantity' => $secretPlan['quantity'], ], ], 'success_url' => $successURL, 'cancel_url' => route('payment.cancel') ]);
注意:若选择订阅模式,price_data内必须补充recurring字段定义订阅周期,否则会触发新的参数校验错误。
内容的提问来源于stack exchange,提问作者Khandokar Nafis Jaman
相关产品推荐
相关产品推荐

