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 = "&lt;xml&gt;";
        foreach ($arr as $key=>$val)
        {
 if (is_numeric($val))
          {
           $xml.="&lt;".$key."&gt;".$val."&lt;&#47;".$key."&gt;"; 
 }
          else
 {
 $xml.="&lt;".$key."&gt;&lt;![CDATA[".$val."]]&gt;&lt;&#47;".$key."&gt;"; 
 }
        }
        $xml.= "&lt;&#47;xml&gt;";
        return $xml;

    }发送到https://api.mch.weixin.qq.com/pay/unifiedorder的XML数据都正确,返回的结果是空的,也没有任何报错,请教大神问题出在哪里?

解决方案 »

  1.   

    直接用微信提供的SDK,看看有没问题
      

  2.   

    你curl时候,都没带证书,没有证书那不是任何人都能访问了?所以你必须带上微信提供的证书才行
      

  3.   

    仔细检查一下你的代码  一步一步dump 就能发现问题,同意下单接口不需要调用证书。
      

  4.   

    我这边情况差不多,就是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
      

  5.   

    我也遇到了同样的问题,明明参数都传入了的,但是微信就是没有返回结果。
    后来我发现是notify_url 的问题,我写的notify_url  是乱写的,后来我改成一个有能访问的接口微信就有正常的消息返回了,
    虽然现在还是错误码 (订单已关闭)
      

  6.   

    说错了,我是忘记把sign这个值放入xml了。没有传输签名给微信
      

  7.   

    1.注意数据sign是否正确 , 比如signkey多了空格 导致 验签不通过 返回null
    2.另外一个需要注意的是 若果使用tailLog显示日志xml返回数据可能不显示