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

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包:

  1. 先发布包的配置文件(未发布过的话执行):
    php artisan vendor:publish --provider="DarthSoup\Whmcs\WhmcsServiceProvider"
    
  2. 在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证书

  1. 下载最新的Mozilla CA证书包,保存到服务器固定路径(比如/usr/local/share/ca-certificates/cacert.pem)。
  2. 修改PHP配置文件php.ini,添加或更新以下配置:
    curl.cainfo = "/usr/local/share/ca-certificates/cacert.pem"
    openssl.cafile = "/usr/local/share/ca-certificates/cacert.pem"
    
  3. 重启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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:25:19