在做微信的企业付款至银行卡功能,需要对商户证书做双向验证,我根据文档中的demo修改之后运行返回错误如下:
string(108) "<xml>
<return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[XML格式错误]]></return_msg>
</xml>"
我怀疑是系统libcurl版本的原因,服务器的系统是ubuntu,如何查看系统中的libcurl版本?
有没有大神做过求指点。
代码如下:
function certCheck($url='https://api.mch.weixin.qq.com/secapi/pay/refund',$vars='merchantid=1486229xxx',$second=30,$aHeader=array())
{
//$url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers';
//证书地址 绝对路径 ROOT_PATH
$certPath = ROOT_PATH . 'extend' . DS . 'cart' . DS . 'apiclient_cert.pem';
$keyPath = ROOT_PATH . 'extend' . DS . 'cart' . DS . 'apiclient_key.pem';
$ch = curl_init();
//超时时间
curl_setopt($ch, CURLOPT_TIMEOUT,$second);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
//默认格式为PEM,可以注释
curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');
curl_setopt($ch, CURLOPT_SSLCERT,$certPath);
//默认格式为PEM,可以注释
curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');
curl_setopt($ch, CURLOPT_SSLKEY,$keyPath);
if (count($aHeader) >= 1) {
curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);
}
curl_setopt($ch,CURLOPT_POST, 1);
curl_setopt($ch,CURLOPT_POSTFIELDS, $vars);
$data = curl_exec($ch);
if ($data) {
curl_close($ch);
return $data;
} else {
$error = curl_errno($ch);
echo "call faild, errorCode:$error\n";
curl_close($ch);
return false;
}
}