登录
首页 >  文章 >  php教程

CodeIgniter4集成Stripe教程详解

时间:2026-03-17 16:30:32 380浏览 收藏

本文手把手教你如何在 CodeIgniter 4 项目中正确集成 Stripe 官方 PHP SDK,彻底避开 `Class "Stripe\Stripe" not found` 这一高频报错陷阱——不靠错误的 PSR-4 手动映射(如将 init.php 当命名空间根目录),而是充分利用 Composer 原生自动加载机制:安装后无需修改任何 autoload 配置,只需确保 vendor/autoload.php 已被框架默认引入,并在控制器中规范使用 `use Stripe\Stripe;` 即可无缝调用支付功能,清晰、安全、符合现代 PHP 工程实践。

如何在 CodeIgniter 4 中正确集成 Stripe PHP SDK

本文详解在 CodeIgniter 4 项目中集成 Stripe 官方 PHP SDK 的标准方法,重点解决 Class "Stripe\Stripe" not found 常见错误,涵盖 Composer 自动加载配置、命名空间使用规范及控制器调用示例。

本文详解在 CodeIgniter 4 项目中集成 Stripe 官方 PHP SDK 的标准方法,重点解决 `Class "Stripe\Stripe" not found` 常见错误,涵盖 Composer 自动加载配置、命名空间使用规范及控制器调用示例。

CodeIgniter 4 原生支持 PSR-4 自动加载,但 Stripe SDK 是一个独立的第三方库,不应手动将其路径映射到 psr4 配置中(如 'Stripe' => ROOTPATH . 'vendor/stripe/stripe-php/init.php')。该写法存在严重逻辑错误:init.php 是引导文件而非命名空间根目录,且 .php 文件路径不能作为 PSR-4 的 namespace root;同时,psr4 仅用于自动加载类文件(.php),不适用于执行初始化脚本。

✅ 正确做法是:直接利用 Composer 生成的统一自动加载器 vendor/autoload.php。Stripe SDK 在安装后已自动注册其自身的 autoloader(通过 composer.json 中的 autoload 字段),只需确保该文件被引入即可。

✅ 正确集成步骤

  1. 安装 Stripe SDK(已执行)

    composer require stripe/stripe-php
  2. 无需修改 app/Config/Autoload.php 的 psr4 数组
    ❌ 删除或注释掉以下错误配置:

    // 'Stripe' => ROOTPATH . 'vendor/stripe/stripe-php/init.php', // 错误!禁止这样写
  3. 在控制器中引入 Stripe 类(推荐方式)
    CodeIgniter 4 默认已加载 vendor/autoload.php(位于 public/index.php 和 spark 脚本中),因此无需额外 require_once。你只需正确使用命名空间:

    <?php
    
    namespace App\Controllers;
    
    use CodeIgniter\Controller;
    use Stripe\Charge; // 显式 use 更清晰(可选,但推荐)
    use Stripe\Stripe;
    
    class Payment extends Controller
    {
        public function process()
        {
            // 设置密钥(建议从 .env 或 config 文件读取)
            Stripe::setApiKey(env('STRIPE_SECRET_KEY', 'sk_test_...'));
    
            try {
                $charge = Charge::create([
                    'amount'      => (int) $this->request->getPost('grandtotal') * 100, // 单位:分(GBP)
                    'currency'    => 'gbp',
                    'source'      => $this->request->getPost('stripeToken'),
                    'description' => 'Test payment via Stripe',
                ]);
    
                return $this->response->setJSON([
                    'success' => true,
                    'data'    => $charge->toArray()
                ]);
            } catch (\Stripe\Exception\CardException $e) {
                return $this->response->setJSON(['error' => $e->getError()->message]);
            } catch (\Exception $e) {
                return $this->response->setJSON(['error' => $e->getMessage()]);
            }
        }
    }

? 关键说明

  • Stripe 要求金额以「最小货币单位」传递(如 GBP 为分),所以 grandtotal 需 ×100 并转为整型;
  • 使用 \Stripe\Charge 或 use Stripe\Charge 均可,但避免 use Stripe;(它会导入整个 Stripe 命名空间,导致 Stripe::setApiKey() 写法冗余且易混淆);
  • 务必捕获 CardException 等具体异常,便于前端友好提示。

⚠️ 注意事项与最佳实践

  • 环境变量管理:将 STRIPE_SECRET_KEY 和 STRIPE_PUBLISHABLE_KEY 写入 .env 文件,避免硬编码:

    STRIPE_SECRET_KEY=sk_test_51xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    STRIPE_PUBLISHABLE_KEY=pk_test_51xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    然后在控制器中通过 env('STRIPE_SECRET_KEY') 安全读取。

  • 前端 Token 安全性:$_REQUEST["stripeToken"] 已过时,应使用 Stripe Elements + stripe.createToken() 或 stripe.confirmCardPayment() 获取 payment_method 或 payment_intent,后端改用 PaymentIntent 流程(更符合 Stripe 最佳实践)。

  • 版本兼容性:确认所用 stripe-php 版本与 Stripe Dashboard API 版本一致(推荐 ≥ v10.x),可通过 composer show stripe/stripe-php 查看。

  • 调试技巧:若仍报错,请运行 composer dump-autoload -o 重建自动加载映射,并检查 vendor/composer/autoload_psr4.php 中是否已包含 Stripe\\ 映射(正常情况下应有)。

遵循以上规范,即可彻底解决 Class "Stripe\Stripe" not found 错误,实现 CodeIgniter 4 与 Stripe 的稳定、安全集成。

到这里,我们也就讲完了《CodeIgniter4集成Stripe教程详解》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>