微信企业付款报xml解析错误代码如下lass Base
{
const KEY = 'daibang24645451zmv46545456'; //请修改为自己的
const MCHID = '1494923235'; //请修改为自己的
const RPURL = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack';
const APPID = 'wx9ee2f32d0456465';//请修改为自己的
const CODEURL = 'https://open.weixin.qq.com/connect/oauth2/authorize?';
const OPENIDURL = 'https://api.weixin.qq.com/sns/oauth2/access_token?';
const SECRET = '0d8f225db561f8a8afcb98ff450beb68';//请修改为自己的
//获取用户openid 为避免重复请求接口获取后应做存储
/**
* 获取签名
* @param array $arr
* @return string
*/
public function getSign($arr){
//去除空值
$arr = array_filter($arr);
if(isset($arr['sign'])){
unset($arr['sign']);
}
//按照键名字典排序
ksort($arr);
//生成url格式的字符串
$str = $this->arrToUrl($arr) . '&key=' . self::KEY;
return strtoupper(md5($str));
}
/**
* 获取带签名的数组
* @param array $arr
* @return array
*/
public function setSign($arr){
$arr['sign'] = $this->getSign($arr);;
return $arr;
}
/**
* 数组转URL格式的字符串
* @param array $arr
* @return string
*/
public function arrToUrl($arr){
return urldecode(http_build_query($arr));
}
//数组转xml
function ArrToXml($arr)
{
if(!is_array($arr) || count($arr) == 0) return ''; $xml = "<xml>";
foreach ($arr as $key=>$val)
{
if (is_numeric($val)){
$xml.="<".$key.">".$val."</".$key.">";
}else{
$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
}
}
$xml.="</xml>";
return $xml;
}
//Xml转数组
function XmlToArr($xml)
{
if($xml == '') return '';
libxml_disable_entity_loader(true);
$arr = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
return $arr;
}
function postData($url,$postfields){
$ch = curl_init();
$params[CURLOPT_URL] = $url; //请求url地址
$params[CURLOPT_HEADER] = false; //是否返回响应头信息
$params[CURLOPT_RETURNTRANSFER] = true; //是否将结果返回
$params[CURLOPT_FOLLOWLOCATION] = true; //是否重定向
$params[CURLOPT_POST] = true;
$params[CURLOPT_POSTFIELDS] = $postfields;
$params[CURLOPT_SSL_VERIFYPEER] = false;
$params[CURLOPT_SSL_VERIFYHOST] = false;
//以下是证书相关代码
$params[CURLOPT_SSLCERTTYPE] = 'PEM';
$params[CURLOPT_SSLCERT] = 'cert/apiclient_cert.pem';
$params[CURLOPT_SSLKEYTYPE] = 'PEM';
$params[CURLOPT_SSLKEY] = 'cert/apiclient_key.pem'; curl_setopt_array($ch, $params); //传入curl参数
$content = curl_exec($ch); //执行
curl_close($ch); //关闭连接
return $content;
}
}
class WxComPay extends Base
{
private $params;
const PAYURL = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers"; public function comPay($data){
//构建原始数据
$this->params = [
'mch_appid' => self::APPID,//APPid,
'mchid' => self::MCHID,//商户号,
'nonce_str' => md5(time()), //随机字符串
'partner_trade_no' => date('YmdHis'), //商户订单号
'openid' => $data['openid'], //用户openid
'check_name' => 'NO_CHECK',//校验用户姓名选项 NO_CHECK:不校验真实姓名 FORCE_CHECK:强校验真实姓名
//'re_user_name' => '',//收款用户姓名 如果check_name设置为FORCE_CHECK,则必填用户真实姓名
'amount' => $data['price'],//金额 单位分
'desc' => '测试付款',//付款描述
'spbill_create_ip' => $_SERVER['SERVER_ADDR'],//调用接口机器的ip地址
];
//将数据发送到接口地址
return $this->send("https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers");
}
public function sign(){
return $this->setSign($this->params);
}
public function send($url){
$res = $this->sign();
$xml = $this->ArrToXml($res);
$returnData = $this->postData($url, $xml);
return $this->XmlToArr($returnData);
}
}$obj = new WxComPay();
/*
* 付款到零钱
*/
$data = [
'openid' => 'ocWaL0VMUlM-DoWfOZ3NBAYmB9Do',
'price' => '100'
];
$res = $obj->comPay($data);
echo '<pre>';
print_r($res);
错误信息Array
(
[return_code] => SUCCESS
[return_msg] => XML解析错误
[result_code] => FAIL
[err_code] => XML_ERROR
[err_code_des] => XML解析错误
)
{
const KEY = 'daibang24645451zmv46545456'; //请修改为自己的
const MCHID = '1494923235'; //请修改为自己的
const RPURL = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack';
const APPID = 'wx9ee2f32d0456465';//请修改为自己的
const CODEURL = 'https://open.weixin.qq.com/connect/oauth2/authorize?';
const OPENIDURL = 'https://api.weixin.qq.com/sns/oauth2/access_token?';
const SECRET = '0d8f225db561f8a8afcb98ff450beb68';//请修改为自己的
//获取用户openid 为避免重复请求接口获取后应做存储
/**
* 获取签名
* @param array $arr
* @return string
*/
public function getSign($arr){
//去除空值
$arr = array_filter($arr);
if(isset($arr['sign'])){
unset($arr['sign']);
}
//按照键名字典排序
ksort($arr);
//生成url格式的字符串
$str = $this->arrToUrl($arr) . '&key=' . self::KEY;
return strtoupper(md5($str));
}
/**
* 获取带签名的数组
* @param array $arr
* @return array
*/
public function setSign($arr){
$arr['sign'] = $this->getSign($arr);;
return $arr;
}
/**
* 数组转URL格式的字符串
* @param array $arr
* @return string
*/
public function arrToUrl($arr){
return urldecode(http_build_query($arr));
}
//数组转xml
function ArrToXml($arr)
{
if(!is_array($arr) || count($arr) == 0) return ''; $xml = "<xml>";
foreach ($arr as $key=>$val)
{
if (is_numeric($val)){
$xml.="<".$key.">".$val."</".$key.">";
}else{
$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
}
}
$xml.="</xml>";
return $xml;
}
//Xml转数组
function XmlToArr($xml)
{
if($xml == '') return '';
libxml_disable_entity_loader(true);
$arr = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
return $arr;
}
function postData($url,$postfields){
$ch = curl_init();
$params[CURLOPT_URL] = $url; //请求url地址
$params[CURLOPT_HEADER] = false; //是否返回响应头信息
$params[CURLOPT_RETURNTRANSFER] = true; //是否将结果返回
$params[CURLOPT_FOLLOWLOCATION] = true; //是否重定向
$params[CURLOPT_POST] = true;
$params[CURLOPT_POSTFIELDS] = $postfields;
$params[CURLOPT_SSL_VERIFYPEER] = false;
$params[CURLOPT_SSL_VERIFYHOST] = false;
//以下是证书相关代码
$params[CURLOPT_SSLCERTTYPE] = 'PEM';
$params[CURLOPT_SSLCERT] = 'cert/apiclient_cert.pem';
$params[CURLOPT_SSLKEYTYPE] = 'PEM';
$params[CURLOPT_SSLKEY] = 'cert/apiclient_key.pem'; curl_setopt_array($ch, $params); //传入curl参数
$content = curl_exec($ch); //执行
curl_close($ch); //关闭连接
return $content;
}
}
class WxComPay extends Base
{
private $params;
const PAYURL = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers"; public function comPay($data){
//构建原始数据
$this->params = [
'mch_appid' => self::APPID,//APPid,
'mchid' => self::MCHID,//商户号,
'nonce_str' => md5(time()), //随机字符串
'partner_trade_no' => date('YmdHis'), //商户订单号
'openid' => $data['openid'], //用户openid
'check_name' => 'NO_CHECK',//校验用户姓名选项 NO_CHECK:不校验真实姓名 FORCE_CHECK:强校验真实姓名
//'re_user_name' => '',//收款用户姓名 如果check_name设置为FORCE_CHECK,则必填用户真实姓名
'amount' => $data['price'],//金额 单位分
'desc' => '测试付款',//付款描述
'spbill_create_ip' => $_SERVER['SERVER_ADDR'],//调用接口机器的ip地址
];
//将数据发送到接口地址
return $this->send("https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers");
}
public function sign(){
return $this->setSign($this->params);
}
public function send($url){
$res = $this->sign();
$xml = $this->ArrToXml($res);
$returnData = $this->postData($url, $xml);
return $this->XmlToArr($returnData);
}
}$obj = new WxComPay();
/*
* 付款到零钱
*/
$data = [
'openid' => 'ocWaL0VMUlM-DoWfOZ3NBAYmB9Do',
'price' => '100'
];
$res = $obj->comPay($data);
echo '<pre>';
print_r($res);
错误信息Array
(
[return_code] => SUCCESS
[return_msg] => XML解析错误
[result_code] => FAIL
[err_code] => XML_ERROR
[err_code_des] => XML解析错误
)
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货