PHP引入ptt-payment-sdk提示Gateway类未找到报错
调用ptt-payment-sdk提示Gateway类未找到问题排查
相关代码仓库:ptt-payment-sdk
报错信息
Fatal error: Uncaught Error: Class 'Gateway' not found in /home/paylira/public_html/1.php:10 Stack trace: #0 {main} thrown in /home/paylira/public_html/1.php on line 10
问题背景
基于上述仓库的ptt-payment-sdk开发支付功能,已通过Composer安装composer.json中声明的全部依赖,运行测试代码时在实例化Gateway类的位置抛出上述类未找到的致命错误。
测试代码
include "vendor/autoload.php"; use AkilliEsnaf\Gateway; $apiUser = "Entegrasyon_01"; $clientId = "1000000032"; $apiPass = "gkk4l2*TY112"; $gateway = new Gateway($clientId, $apiUser, $apiPass); $orderId = "123127"; // 订单号需保证唯一 $amount = 125; // 对应金额1.25 TL $installment = 0; // 不分期 $result = $gateway->threeDPayment("http://www.example.com/return", $amount, $installment, $orderId); $threeDSessionId = $result->ThreeDSessionId;
composer.json配置
{ "require": { "weepay/weepay-php": "^1.0", "alttantire/ptt-payment-sdk": "^1.0" } }
解决步骤
按以下顺序逐一排查即可修复问题:
- 刷新Composer自动加载索引:在项目根目录执行命令
composer dump-autoload -o,生成优化后的类加载映射,排除自动加载缓存未更新导致的类识别失败问题。 - 修正自动加载文件引入路径:当前代码用相对路径引入
vendor/autoload.php,如果1.php文件和vendor文件夹不在同一级目录,会出现自动加载文件引入失败、所有Composer类都无法加载的问题。替换为绝对路径引入即可:include __DIR__ . "/vendor/autoload.php";,彻底规避相对路径的寻址错误。 - 修正类的命名空间引入:你当前写的
use AkilliEsnaf\Gateway;命名空间错误,直接进入vendor/alttantire/ptt-payment-sdk目录查看Gateway类文件开头的namespace声明即可看到,该类的实际命名空间为Ptt,将引入语句修改为use Ptt\Gateway;即可正常实例化对象。 - 验证依赖包完整性:如果以上操作后仍报错,检查vendor目录下
alttantire/ptt-payment-sdk文件夹是否存在完整源码,若文件缺失执行composer install --force强制重新拉取安装所有依赖。 - 清除代码缓存:如果服务器开启了OPcache等字节码缓存,重启PHP-FPM或Apache服务清除旧代码缓存,避免缓存导致的修改不生效问题。
提示:命名空间修正后如果出现方法调用报错,直接查看vendor目录下Gateway类的公开方法定义,确认
threeDPayment方法的参数顺序、参数数量是否和当前传参匹配,不同版本的SDK方法签名可能存在调整。
内容的提问来源于stack exchange,提问作者Heav
相关产品推荐
相关产品推荐

