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

Laravel集成Cartalyst Stripe发起支付报错:未定义charges()方法

解决Cartalyst\Stripe调用charges()方法报错的问题

这个错误很常见,主要是因为你使用的Cartalyst Stripe版本和调用方式不匹配导致的,我来帮你梳理下解决方案:

错误原因

Call to undefined method Cartalyst\Stripe\Stripe::charges() 说明你当前使用的Cartalyst Stripe版本中,并不存在静态调用的charges()方法——不同版本的包API调用方式差异很大,下面分两种主流版本给出修复方案:


方案1:如果你使用的是Cartalyst Stripe v2.x版本

v2.x版本的包支持静态调用,但创建支付的方法是Stripe::charge()而非charges()->create(),同时要注意Stripe的金额要求是最小货币单位的整数(比如10美元要传1000,代表1000美分),不能传字符串格式的小数。修改后的代码如下:

public function store(Request $request) {
    try {
        // 注意:金额改为整数1000(对应10.00 USD)
        $charge = Stripe::charge([
            'amount' => 1000,
            'currency' => 'USD',
            'source' => $request->stripeToken,
            'description' => 'Order',
            'metadata' => []
        ]);

        return back()->with('success_message', 'Thank You! Your payment has been successfully accepted!');
    } catch (\Cartalyst\Stripe\Exception\CardException $e) {
        // 捕获卡片相关错误,返回更友好的提示
        return back()->with('error_message', $e->getMessage());
    } catch (\Exception $e) {
        // 捕获其他通用错误
        return back()->with('error_message', 'Payment failed, please try again later.');
    }
}

方案2:如果你使用的是Cartalyst Stripe v3.x+版本

v3.x+版本不再支持静态调用,需要先实例化Stripe客户端,再调用charges()->create()方法,代码示例如下:

use Cartalyst\Stripe\Stripe;

public function store(Request $request) {
    try {
        // 从配置文件获取Stripe密钥并实例化客户端
        $stripe = new Stripe(config('services.stripe.secret'));
        
        $charge = $stripe->charges()->create([
            'amount' => 1000, // 同样注意最小货币单位的整数要求
            'currency' => 'USD',
            'source' => $request->stripeToken,
            'description' => 'Order',
            'metadata' => []
        ]);

        return back()->with('success_message', 'Thank You! Your payment has been successfully accepted!');
    } catch (\Cartalyst\Stripe\Exception\CardException $e) {
        return back()->with('error_message', $e->getMessage());
    } catch (\Exception $e) {
        return back()->with('error_message', 'Payment failed, please try again later.');
    }
}

额外注意事项

  1. 确保你的config/services.php中配置了正确的Stripe密钥:
'stripe' => [
    'secret' => env('STRIPE_SECRET'),
    'key' => env('STRIPE_KEY'),
],
  1. 尽量捕获具体的Stripe异常(比如CardException),而不是泛型的Exception,这样能给用户返回更精准的错误提示(比如卡片过期、余额不足等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:24:09