业务场景
如用户微信提现
官方文档
https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1
代码
按照文档组合参数

返回
<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[证书出错,请登录微信支付商户平台下载证书]]></return_msg>
<mch_appid><![CDATA[wx5528375a7c38bacc]]></mch_appid>
<mchid><![CDATA[1498211602]]></mchid>
<result_code><![CDATA[FAIL]]></result_code>
<err_code><![CDATA[CA_ERROR]]></err_code>
<err_code_des><![CDATA[证书出错,请登录微信支付商户平台下载证书]]></err_code_des>
</xml>
然后去微信商户平台 —》 账号中心 -》 api安全 —> 下载证书
修改一下代码,封装函数
function curl_post_ssl($isdir, $url, $vars, $second = 30, $aHeader = array()){
$ch = curl_init();//初始化curl
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);//
curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');//证书类型
curl_setopt($ch, CURLOPT_SSLCERT, $isdir . 'apiclient_cert.pem');//证书位置
curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');//CURLOPT_SSLKEY中规定的私钥的加密类型
curl_setopt($ch, CURLOPT_SSLKEY, $isdir . 'apiclient_key.pem');//证书位置
curl_setopt($ch, CURLOPT_CAINFO, 'PEM');
curl_setopt($ch, CURLOPT_CAINFO, $isdir . 'rootca.pem');
if (count($aHeader) >= 1) {
curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);//设置头部
}
curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);//全部数据使用HTTP协议中的"POST"操作来发送
$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;
}
}
然后代码调用: