微信红包接口返回CA证书出错解决办法
更新时间:2016-06-02 点击量:1791
Tag关键词: 红包 ecshop模板 ecshop4.0模板 二次开发 ecshop3.6模板 ecshop小程序

今天在调试微信红包接口的时候,出现“CA证书出错”的错误,弄了一晚上,才发现是路径上的斜杠(/)或反斜杠(/)的原因。现在把过程记录下,供以后参考。
1、部分源码
$certs = array(
'SSLCERT' => getcwd().'\application\Common\hongbao\apiclient_cert.pem',
'SSLKEY' => getcwd().'\application\Common\hongbao\apiclient_key.pem',
'CAINFO' => getcwd().'\application\Common\hongbao\rootca.pem',
);
$response = $this->;);
function ){
$ch = curl_init();
curl_setopt($ch,CURLOPT_TIMEOUT, $second);
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,true);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);
curl_setopt($ch,CURLOPT_HEADER,FALSE);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
if (isset($params)) {
curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
curl_setopt($ch,CURLOPT_SSLCERT, $params['SSLCERT']);
curl_setopt($ch,CURLOPT_SSLKEYTYPE, 'PEM');
curl_setopt($ch,CURLOPT_SSLKEY, $params['SSLKEY']);
curl_setopt($ch, CURLOPT_CAINFO, 'PEM');
curl_setopt($ch,CURLOPT_CAINFO, $params['CAINFO']);
}
print_r($params['CAINFO']);
if ($method=='post') {
curl_setopt($ch,CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields);
}
$data = curl_exec($ch);
if(!$data){
$error = curl_errno($ch);
$data='<xml><err_code>'.$error.'</err_code><err_code_des>curl'.$error.'</err_code_des></xml>';
}
curl_close($ch);
return $data;
}
返回结果如下:
<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[CA证书出错,请登录微信支付商户平台下载证书]]></return_msg>
<result_code><![CDATA[FAIL]]></result_code>
<err_code><![CDATA[CA_ERROR]]></err_code>
<err_code_des><![CDATA[CA证书出错,请登录微信支付商户平台下载证书]]></err_code_des>
<mch_billno><![CDATA[126992330120******915305913]]></mch_billno>
<mch_id>126*********01</mch_id>
<wxappid><![CDATA[wx9388********a81]]></wxappid>
<re_openid><![CDATA[oC7bosgutIjMmq*******leSU]]></re_openid>
<total_amount>100</total_amount>
</xml>
检查证书路径,都是正确的。然后就是反复的重新下载证书,修改curl参数,测试,测试结果要么不是ca证书出错就是curl出错。
<xml><err_code>77</err_code><err_code_des>cur77</err_code_des></xml>
测试中打印出证书路径,才发现路径中的斜杠和反斜杠的问题
Array
(
[SSLCERT] => /data/home/qyu2064360001/htdocs\Application\Common\hongbao\apiclient_cert.pem
[SSLKEY] => /data/home/qyu2064360001/htdocs\Application\Common\hongbao\apiclient_key.pem
[CAINFO] => /data/home/qyu2064360001/htdocs\Application\Common\hongbao\rootca.pem
)
系统是linux,路径中用的是斜杠“/”,而代码中后半段用的是反斜杠“\”,最后把路径的统一用斜杠“/”,测试,发送成功。
<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[发放成功]]></return_msg>
<result_code><![CDATA[SUCCESS]]></result_code>
<mch_billno><![CDATA[12699233*******50817271856]]></mch_billno>
<mch_id>126*****1</mch_id>
<wxappid><![CDATA[wx9388*****a81]]></wxappid>
<re_openid><![CDATA[oC7bosgut*****mxleSU]]></re_openid>
<total_amount>100</total_amount>
<send_listid><![CDATA[0010569217*****0797713673]]></send_listid>
<send_time><![CDATA[20160525081728]]></send_time>
</xml>
百度搜索了下,linux中用斜杠“/”来分隔路径,windows则反之。
如果文章对您有帮助,就打赏一个吧