微信支付的统一下单接口,返回的是空值,麻烦大神看看什么原因

erlet 2016-01-07 12:22:54
function postXmlCurl($xml, $url, $useCert = false, $second = 30)
{
//初始化curl
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
//设置header
curl_setopt($ch, CURLOPT_HEADER, FALSE);
//要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
//post提交方式
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
//运行curl
$data = curl_exec($ch);
curl_close($ch);
//返回结果
if($data)
{
echo $data;
return $data;
} else {
$error = curl_errno($ch);
echo "curl出错,错误码:$error"."<br>";
echo "<a href='http://curl.haxx.se/libcurl/c/libcurl-errors.html'>错误原因查询</a></br>";
curl_close($ch);
return false;
}
}

function postXml()
{
$xml = $this->createXml();
$this->response = $this->postXmlCurl($xml,'https://api.mch.weixin.qq.com/pay/unifiedorder');
return $this->response;
}

// 设置标配的请求参数,生成签名,生成接口参数xml
function createXml()
{
$this->parameters["appid"] = $this->payments['wxpay_appid'];//公众账号ID
$this->parameters["mch_id"] = $this->payments['wxpay_mchid'];//商户号
$this->parameters["nonce_str"] = $this->create_noncestr();//随机字符串
$this->parameters["sign"] = $this->getWxSign($this->parameters);//签名
$res = $this->arrayToXml($this->parameters);
echo $res;
return $res;
}

function xmlToArray($xml)
{
//将XML转为array
$array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
return $array_data;
}

function arrayToXml($arr)
{
$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;

}

发送到https://api.mch.weixin.qq.com/pay/unifiedorder的XML数据都正确,返回的结果是空的,也没有任何报错,请教大神问题出在哪里?
...全文
9868 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
1.注意数据sign是否正确 , 比如signkey多了空格 导致 验签不通过 返回null 2.另外一个需要注意的是 若果使用tailLog显示日志xml返回数据可能不显示
I'm fine!!! 2018-01-09
  • 打赏
  • 举报
回复
引用 7 楼 u010711951 的回复:
我这边情况差不多,就是curl的时候,找不到服务器,造成延迟等问题,错误码6。 我这边排查了下,情况主要是DNS解析api.weixin.qq.com这个域名的时候找不到对应的服务器IP,造成的超时,你可以把这个域名,本地ping一下,换成IP地址写到微信支付的, https://api.mch.weixin.qq.com/pay/unifiedorder改成如https://xxx.xxx.xxx.xxx/pay/unifiedorder,这样子的话如果curl的时候有返回值,说明就是DNS的问题。 解决办法:DNS设置为119.29.29.29
感谢 就是这个问题
qq_34507658 2016-08-27
  • 打赏
  • 举报
回复
说错了,我是忘记把sign这个值放入xml了。没有传输签名给微信
qq_34507658 2016-08-27
  • 打赏
  • 举报
回复
我也遇到了同样的问题,明明参数都传入了的,但是微信就是没有返回结果。 后来我发现是notify_url 的问题,我写的notify_url 是乱写的,后来我改成一个有能访问的接口微信就有正常的消息返回了, 虽然现在还是错误码 (订单已关闭)
tangrongxing148 2016-08-24
  • 打赏
  • 举报
回复
我这边情况差不多,就是curl的时候,找不到服务器,造成延迟等问题,错误码6。 我这边排查了下,情况主要是DNS解析api.weixin.qq.com这个域名的时候找不到对应的服务器IP,造成的超时,你可以把这个域名,本地ping一下,换成IP地址写到微信支付的, https://api.mch.weixin.qq.com/pay/unifiedorder改成如https://xxx.xxx.xxx.xxx/pay/unifiedorder,这样子的话如果curl的时候有返回值,说明就是DNS的问题。 解决办法:DNS设置为119.29.29.29
山水天元 2016-08-22
  • 打赏
  • 举报
回复
仔细检查一下你的代码 一步一步dump 就能发现问题,同意下单接口不需要调用证书。
落叶秋2020 2016-08-19
  • 打赏
  • 举报
回复
你curl时候,都没带证书,没有证书那不是任何人都能访问了?所以你必须带上微信提供的证书才行
qq_31589137 2016-08-18
  • 打赏
  • 举报
回复
楼主解决了吗?
ayzen1988 2016-08-08
  • 打赏
  • 举报
回复
直接用微信提供的SDK,看看有没问题
田露 2016-08-08
  • 打赏
  • 举报
回复
我也遇到了 这个问题 楼主解决了吗?
lirenbing01 2016-01-07
  • 打赏
  • 举报
回复
这种接口类的 直接找商家咨询

21,881

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧