本地调用EasyWeChat类时cURL扩展报错

615次阅读
没有评论

cURL error 60: SSL certificate problem: unable to get local issuer certifica

 

解决方法

下载一个 ca-bundle.crt,放到对应的目录,在 php.ini 文件中配置下路径

https://github.com/bagder/ca-bundle/blob/e9175fec5d0c4d42de24ed6d84a06d504d5e5a09/ca-bundle.crt

在 php.ini 加入,重启 web 服务器

curl.cainfo=” 真实路径 /ca-bundle.crt”

注意在修改 php.ini 的 curl.cainfo 时候 路径一定要是 绝对路径, 不然会报如下错误
cURL error 77: error setting certificate verify locations

 

解决方法详细设置说明

转贴自:https://www.flowus.cn/uyevan/share/7eac6a70-3ca6-439a-94d4-fd9dbf6abd09

问题描述

在使用 PHP 的 cURL 功能访问 HTTPS 接口时(如微信 API、阿里云 API 等),经常会遇到以下 SSL 证书相关的错误:

cURL error 60: SSL certificate problem: unable to get local issuer certificate

cURL error 77: error setting certificate verify locations:
CAFile: [path]/cacert.pem
CApath: none

这些错误通常出现在以下场景:

  • 调用微信支付接口
  • 使用阿里云 SDK(如短信服务)
  • 访问其他需要 SSL 验证的 HTTPS 接口

原因分析

这个问题的根本原因是 PHP 的 cURL 模块在进行 HTTPS 请求时,需要验证服务器证书的有效性,但找不到用于验证的根证书文件(CA 证书)。具体可能是由于:

  1. 系统中没有配置 CA 证书文件
  2. CA 证书文件路径配置不正确
  3. PHP 无法访问证书文件
  4. OpenSSL 扩展未启用

解决方案

方案一:安装和配置 CA 证书(推荐)
  1. 下载 CA 证书
  1. 放置证书文件
  • 在 PHP 安装目录下创建 cert 目录:[PHP 安装路径]/cert/
  • 将下载的 cacert.pem 复制到该目录
  1. 配置 PHP
  • 打开 php.ini 文件
  • 找到 curl.cainfo 配置项
  • 去掉注释符号(;)
  • 设置证书路径,例如:curl.cainfo = “D:/php/cert/cacert.pem”
  - 同时设置 openssl 证书路径:openssl.cafile = "D:/php/cert/cacert.pem"

注意:路径分隔符使用正斜杠(/),不要使用反斜杠()

  1. 重启服务
  • 重启 PHP-FPM 或 Apache/Nginx 服务
  • 如果使用的是集成环境(如 XAMPP、WAMP),重启整个服务
方案二:临时禁用 SSL 验证(仅用于开发测试)

在代码中添加以下设置:

$curl = curl_init();
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

如果使用框架或 SDK:

// EasyWechat 配置
'http' => ['verify' => false]

// 阿里云 SDK 配置
$request->setVerifyPeer(false);

⚠️ 警告:此方案会降低安全性,不建议在生产环境使用。

正文完
有偿技术支持加微信
post-qrcode
 0
评论(没有评论)
验证码