You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Stripe Cashier v13 $request->payment_method返回空问题求助

Stripe Cashier v13 payment_method为空问题排查方案
  • 首先排查前端参数提交是否正确:手动传入测试卡IDpm_card_visa可正常运行,说明后端Stripe配置、基础权限逻辑没有问题,优先检查前端在「使用默认支付方式」的场景下,是否没有传递payment_method字段,或者参数名拼写和后端接收的payment_method不匹配。
  • 修复现有代码的逻辑缺陷:当前代码未兼容「使用已有默认支付方式」的场景,当用户选择使用已保存的默认支付方式时,前端本身不会传递新的payment_method参数,你需要新增空值判断逻辑,读取用户已有的默认支付方法ID,参考修改如下:
public function create(Request $request, Plan $plan)
{
    $plan = Plan::findOrFail($request->get('plan'));
    $user = $request->user();
    $user->createOrGetStripeCustomer();
    
    $payment_method = $request->payment_method;
    // 新增:未传支付方法时,优先读取用户默认支付方法
    if (empty($payment_method)) {
        // 无支付方法时返回错误提示
        if (!$user->hasPaymentMethod()) {
            return back()->withErrors('请先添加或选择支付方式');
        }
        $payment_method = $user->defaultPaymentMethod()->id;
    }

    if(!$user->hasPaymentMethod()){
        $user->addPaymentMethod($payment_method);
        $user->updateDefaultPaymentMethod($payment_method);
    } else {
        foreach ($user->paymentMethods() as $payment){
            if($payment->asStripePaymentMethod()->id == $payment_method){
                $user->updateDefaultPaymentMethod($payment_method);
            }
        }
    }

    $user->newSubscription('default', $plan->stripe_plan)
        ->create($payment_method, [
            'email' => $user->email,
        ]);

    return redirect()->route('home')->with('success', 'Your plan subscribed successfully');
}
  • 检查请求参数是否被过滤:部分自定义中间件、全局参数过滤逻辑可能会移除payment_method字段,你可以在方法入口打印$request->all(),确认请求中是否真的携带了对应字段。
  • 检查Stripe支付组件配置:如果使用Stripe官方Elements组件实现支付功能,确认组件初始化时是否正确配置回调,是否将生成的支付方法ID正确绑定到提交参数中。

内容的提问来源于stack exchange,提问作者Gerulisss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 22:54:04