Laravel集成WHMCS API遇cURL 60证书过期及请求返回false求助
解决WHMCS API集成中的cURL SSL证书错误
问题分析
错误cURL error 60: SSL certificate problem: certificate has expired指向两种核心原因:
- 目标WHMCS服务器的SSL证书确实已过期
- 本地PHP环境的CA证书库未更新,无法信任目标服务器的有效证书
直接cURL请求返回false,本质也是因为SSL验证失败,cURL默认会在验证不通过时返回false。
解决方案
1. 先确认目标服务器证书状态
打开浏览器访问https://billing.pakchamp.com/includes/api.php,查看地址栏的证书信息:
- 如果证书显示已过期,联系WHMCS主机服务商更新证书,这是最根本的解决办法。
- 如果证书有效,问题出在本地PHP环境的CA信任配置。
2. 临时绕过SSL验证(仅测试环境使用)
针对laravel-whmcs包:
- 先发布包的配置文件(未发布过的话执行):
php artisan vendor:publish --provider="DarthSoup\Whmcs\WhmcsServiceProvider" - 在
config/whmcs.php中添加verify参数并设为false:return [ 'api_url' => env('WHMCS_API_URL'), 'api_identifier' => env('WHMCS_API_IDENTIFIER'), 'api_secret' => env('WHMCS_API_SECRET'), 'api_accesskey' => env('WHMCS_API_ACCESSKEY'), 'verify' => false, // 禁用SSL验证 ];
针对直接cURL请求:
在代码中添加禁用SSL验证的选项,并增加错误排查逻辑:
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://billing.pakchamp.com/includes/api.php'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query( array( 'action' => 'DomainWhois', 'username' => env('WHMCS_API_IDENTIFIER'), // 用环境变量替代硬编码 'password' => env('WHMCS_API_SECRET'), 'id' => '1', 'domain' => 'exampkhkjhkjhkjlehhkuhuhuih.com', 'responsetype' => 'json', ) ) ); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 临时禁用SSL验证(仅测试环境) curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $response = curl_exec($ch); // 排查cURL错误 if (curl_errno($ch)) { dd('cURL错误:' . curl_error($ch)); } curl_close($ch); dd($response);
3. 生产环境正确解决方案:更新本地CA证书
- 下载最新的Mozilla CA证书包,保存到服务器固定路径(比如
/usr/local/share/ca-certificates/cacert.pem)。 - 修改PHP配置文件
php.ini,添加或更新以下配置:curl.cainfo = "/usr/local/share/ca-certificates/cacert.pem" openssl.cafile = "/usr/local/share/ca-certificates/cacert.pem" - 重启PHP服务(比如
php-fpm、Apache或Nginx)。
针对laravel-whmcs包的额外配置:
如果不想修改全局PHP配置,可以在config/whmcs.php中单独指定CA证书路径:
return [ // ... 其他原有配置 'verify' => '/usr/local/share/ca-certificates/cacert.pem', // 指定CA证书路径 ];
注意事项
- 绝对不要在生产环境禁用SSL验证,这会导致请求数据被窃听或篡改,带来严重安全风险。
- 优先解决目标服务器的证书过期问题,这是最安全合规的方案。
内容的提问来源于stack exchange,提问作者Adnan Ali
相关产品推荐
相关产品推荐

