一. 起因:
今天用yii框架,请求java接口,始终返回false.
二. 分析历程:
使用curl_error()方法打印出Peer’s Certificate issuer is not recognized。
翻译出来的意思是ssl证书未认证通过,证书问题?不细揪,通过结果判断,就是证书的问题。
不过毕竟是第三方的接口,要解决需要联系运维,查看证书,还要重新设置证书路径,很麻烦,不好处理。
附上要设置的(未验证),供参考
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true); curl_setopt($curl,CURLOPT_CAINFO,dirname(__FILE__).'/cacert.pem');
三. 解决办法
关掉curl对于证书的验证。不过curl类的封装是统一的,为了不影响其他的代码。
php curl关掉ssl验证:
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);//原生 $curl->setOption(CURLOPT_SSL_VERIFYPEER=>0);//YII2
在此过程中还遇到了,对方接口不识别返回的json数据
解决办法,设置header
$curl->setHeaders(['Content-Type' => 'application/json']);
结果,再次测试,接口通了。