PHP使用CURL请求微信接口返回为空

先贴请求代码

/**
 * 发送post请求
 * @param	string	$url	需要请求的地址
 * @return 	json	$output	返回的json字符串
 */
function postUrl($url, $data){
	$data  = json_encode($data);
	$headerArray =array("Content-type:application/json;charset='utf-8'","Accept:application/json");
	$curl = curl_init();
	curl_setopt($curl, CURLOPT_URL, $url);
	curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
	curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE);
	curl_setopt($curl, CURLOPT_POST, 1);
	curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
	curl_setopt($curl,CURLOPT_HTTPHEADER,$headerArray);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	$output = curl_exec($curl);
	
	return json_decode($output,true);
}

几乎所有接口均为https协议,所以加上这两句。这里就可以排除https协议下的返回空值情况。

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE);

因为此前对接了一个微信代理商平台,我一直使用json来处理的请求参数和返回结果,这没什么问题。当我再次对接微信官方接口时,返回一直为空。经过断点排查,最终锁定为格式问题。

说到这里就要建议一下各位PHPer,当不确定打印数据类型时,尽量使用var_dump进行打印。
在这里插入图片描述
从上图可以看到微信接口的返回值,聪明的小伙伴一眼就发现问题了。明明就两个22却有1035个字节,此时原格式输出就可查看到微信返回的结果。
在这里插入图片描述此前我在方法外打印始终为空,是因为我做了json_decode操作,加上此前一直使用print_r在打印,竟然一时没排查出来,这都是坏习惯搞出来的破事儿啊。

最后附上修改后的代码,以及xml于PHP数组互转方法。

/**
 * 发送post请求
 * @param	string	$url	需要请求的地址
 * @return 	json	$output	返回的json字符串
 */
function postUrl($url, $data){
	$data  = arrayToXml($data);
	$headerArray =array("Content-type:application/json;charset='utf-8'","Accept:application/json");
	$curl = curl_init();
	curl_setopt($curl, CURLOPT_URL, $url);
	curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
	curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE);
	curl_setopt($curl, CURLOPT_POST, 1);
	curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
	curl_setopt($curl,CURLOPT_HTTPHEADER,$headerArray);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	$output = curl_exec($curl);
	
	return xmlToArray($output,true);
}

/**
 * 数组转XML
 * @param	string	$arr	数组
 * @return 	xml		$output	返回的xml数据
 */
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;
}

/**
 * XML转数组
 * @param	string	$xml	XML数据
 * @return 	xml		$output	返回的数组
 */
function xmlToArray($xml){
    $array = (array)simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
    return $array;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值