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

如何在CodeIgniter 4中正确调用Stripe PHP API?

解决CodeIgniter 4中Stripe PHP API加载错误的问题

你遇到的Call to undefined function App\Controllers\Base\Stripe()错误,核心原因有两个:一是错误地将Stripe类当作函数调用,二是手动配置的classmap可能干扰了Composer的自动加载机制。下面是分步解决方法:

1. 移除手动添加的Classmap配置

打开你的Autoload.php,删除这一行手动配置的classmap:

$classmap = ['Stripe' => '../../vendor/stripe/stripe-php/lib/Stripe.php'];

CodeIgniter 4默认已经启用了Composer的自动加载,Stripe的类文件会被Composer自动识别和加载,不需要手动添加classmap,强行添加反而可能导致加载冲突。

2. 确认Composer自动加载已启用

检查app/Config/Autoload.php中的$composerAutoload配置,确保它设置为true:

public $composerAutoload = true;

这一步默认是开启的,但如果被修改过,需要改回true——这样CI4会自动加载vendor/autoload.php文件,接管所有Composer依赖的类加载工作。

3. 在控制器中正确初始化Stripe

你之前的代码把Stripe当作函数调用了,但它是一个类;同时你的控制器在App\Controllers\Base命名空间下,直接引用Stripe会在当前命名空间查找,所以需要加上全局命名空间前缀\,或者使用Stripe v6版本的标准命名空间写法:

标准初始化方式(适配Stripe v6)

Stripe v6的官方用法是通过命名空间调用静态方法设置密钥,再创建对应资源对象,示例代码如下:

public function __construct($request, $response, $logger = null) {
    parent::__construct($request, $response, $logger);
    $this->db = \Config\Services::db();
    
    // 初始化Stripe API密钥(替换成你的真实密钥)
    \Stripe\Stripe::setApiKey('sk_test_xxxxxx');
}

// 示例:创建测试客户
public function createTestCustomer() {
    try {
        $customer = \Stripe\Customer::create([
            'email' => 'test@example.com',
            'source' => 'tok_visa', // Stripe测试用支付token
        ]);
        // 处理返回结果
        var_dump($customer);
    } catch (\Stripe\Exception\ApiErrorException $e) {
        // 捕获并处理API错误
        log_message('error', $e->getMessage());
    }
}

如果你确实需要实例化全局Stripe类(比如旧版本兼容写法),则需要用new关键字,并且加上全局命名空间:

$this->stripe = new \Stripe();

4. 刷新Composer自动加载缓存

如果以上步骤完成后仍有问题,执行以下命令重新生成Composer自动加载文件,确保所有依赖类都能被正确识别:

composer dump-autoload

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:37:38