今天调试一个PHP作为后端服务的小程序项目遇到的一个支付报错问题提,把解决过程记录了一下,希望能帮到遇到同样问题提的你~# 报错信息{"code":0,"msg":"支付配置错误:cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https:\/\/curl.haxx.se\/libcurl\/c\/libcurl-errors.html) for https:\/\/api.mch.weixin.qq.com\/pay\/unifiedorder","time":"1778153875","data":null}
这是 Windows 下的经典“水土不服”问题:Windows 不像 Linux 那样自带完整的 CA 证书库,所以 PHP 的 cURL 在对外发起 HTTPS 请求时就会卡壳。
跟着下面这 4 个步骤 操作,5分钟内必搞定!
第一步:下载 CA 证书包
我们需要手动下载一个权威的证书包(和微信支付后台下载的那个商户证书完全没关系,这个是系统级的):
- 浏览器访问这个官方地址:https://curl.se/ca/cacert.pem[1]
- 右键页面另存为,或者直接复制页面内容。
- 在电脑上新建一个文件夹,比如:
C:\php\extras\ssl\ (路径随意,只要PHP有权限读取)。 - 将文件保存为
cacert.pem 放进去。
第二步:修改 php.ini 配置文件
接下来要告诉 PHP 去哪里找这个证书。
- 找到你的 php.ini 文件。
- 不确定在哪? 在代码里运行
phpinfo();,搜索 Loaded Configuration File,就能看到绝对路径。
- 用记事本或 VS Code 以管理员身份 打开
php.ini。 - 搜索
curl.cainfo(如果前面有分号 ;,记得删掉注释),把它改成:curl.cainfo = "C:\php\extras\ssl\cacert.pem"
- 再搜索
openssl.cafile,同样修改为:openssl.cafile = "C:\php\extras\ssl\cacert.pem"
(注意:请把路径换成你第一步实际存放的真实路径)
第三步:重启你的集成环境 / Web 服务器
改完配置必须重启才能生效:
- 集成环境(如 PhpStudy, WAMP, XAMPP 等):直接在软件界面点击“重启服务”(Restart All)。
- 手动运行的 PHP 内置服务器:按
Ctrl+C 关掉,重新敲命令运行。
第四步:验证是否修复
你可以用一段简单的测试代码验证一下,或者直接重新触发小程序的下单接口:
<?php// 测试脚本:test_curl.phpfunctiontestWechatApi() {$ch = curl_init();// 尝试访问微信支付API域名curl_setopt($ch, CURLOPT_URL, "https://api.mch.weixin.qq.com");curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);$result = curl_exec($ch);if (curl_errno($ch)) {echo"❌ 依然报错: " . curl_error($ch); } else {echo"🎉 成功了!SSL 证书验证通过,可以去愉快地调微信支付了!"; }curl_close($ch);}testWechatApi();?>
在浏览器访问这个脚本,如果看到成功提示,就可以回去重新下单测试了!
注意哦
- 路径分隔符:Windows 路径推荐使用正斜杠
/,比如 C:/php/extras/ssl/cacert.pem,这样能避免很多奇葩的转义bug。 - 权限问题:确保存放
cacert.pem 的文件夹没有设置“拒绝读取”的权限。
按这四步做完,你的本地环境就能顺利和微信支付握手了!如果还有问题,随时把报错贴出来,广大网友来帮忙哦~