微信红包接口返回"CA证书出错,请登录微信支付商户平台下载证书"错误

摘要: 今天在调试微信红包接口的时候,出现“CA证书出错”的错误,弄了一晚上,才发现是路径上的斜杠(/)或反斜杠(/)的原因。现在把过程记录下,供以后参考。1、部分源码 $certs = array( 'SSLCERT' => getcwd().'\Application

微信红包接口返回

今天在调试微信红包接口的时候,出现“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->http_request($this->url, $xml, $certs, 'post');

function http_request($url, $fields, $params, $method='get', $second=30){
        $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则反之。

猜你喜欢

微信QQ空间QQ好友新浪微博联系客服