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

Laravel 8集成Stripe支付网关报错Must provide source or customer如何解决?

错误根因

Stripe触发「Must provide source or customer」报错的核心是调用Stripe\Charge::create方法时,传入的source参数值为空,结合你提供的控制器代码,具体可能的触发场景如下:

  • 前端stripe支付页面未正确生成stripeToken参数,没有将该参数随表单提交到stripePost接口,导致$request->stripeToken返回空值
  • 前端提交的请求参数中stripeToken字段名拼写错误,后端无法读取到对应值
  • 你使用的Stripe前端JS SDK版本和后端Stripe SDK版本不匹配,导致生成的token格式异常无法被后端识别
修复方案

1. 新增请求参数校验

在调用Stripe接口之前先校验stripeToken是否存在,拦截无效请求直接返回报错,同时添加异常捕获逻辑避免系统直接抛出错误:

public function stripePost(Request $request)
{
    // 新增参数校验
    $validated = $request->validate([
        'stripeToken' => 'required|string'
    ]);

    Stripe\Stripe::setApiKey(env('STRIPE_SECRET'));
    try {
        Stripe\Charge::create ([
                "amount" => 100*100,
                "currency" => "INR",
                "source" => $validated['stripeToken'],
                "description" => "This payment is testing purpose of websolutionstuff.com",
        ]);
        Session::flash('success', 'Payment Successful !');
    } catch (\Exception $e) {
        Session::flash('error', $e->getMessage());
    }
       
    return back();
}

2. 检查前端stripe页面配置

确保前端页面引入了正确的Stripe JS,并且表单提交时会自动生成stripeToken参数随请求提交。如果使用Stripe Elements组件的场景下,要确保JS初始化逻辑执行正常,token生成后会自动插入到表单提交参数中,不会出现空值情况。

3. 兼容性优化建议

如果使用较新版本的Stripe API时,官方已经不再推荐使用Charge接口,建议替换为PaymentIntent接口进行支付流程处理,兼容性和安全性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 11:06:01