起初,我也以为是微信支付的SDK可能存在BUG。在网上找了很多解决办法都是千篇一律,一致认为要把这两行代码curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验修改成:curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);//严格校验2”仔细琢磨之后,我想微信开发团队不可能存在这么“低级”错误,SDK没测试通过就敢丢网上给大家使用?CURLOPT_SSL_VERIFYPEER,CURLOPT_SSL_VERIFYHOST是要求验证“通信双方身份”是否合法?也就是说采用https证书通信的时候,可以通过验证对方的证书是否正确来核对身份,确保接下来的通信是安全的。如果将这2句改为FALSE就会导致curl不再核实对方的身份有效性,直接把购买订单,退款等信息进行传输。到此,您应该没明白为什么不能直接改成FALSE了吧?
最后,因为有些系统下,CA根证书被删除了,导致无法正常解析SSL证书链。正确的解决办法是:从
https://curl.haxx.se/ca/cacert.pem
这个地方下载最新的CA证书,并且打开编辑php.ini文件,大概在这个文件的末尾找到[curl]这个节添加如下配置:
curl.cainfo=/path/curlca/cacert.pem
(路径自行修改为你服务器上正确的路径)
微信开发人员的注释:“//严格校验” ,我们必须得遵守才能保证安全。
网友评论