PHP-php 读取远程xml报错
用php读取支付宝返回的xml,用来处理发货的相关信息。
用dom的load()和simplexml_load_file()方法都报错,找不到实体文件,但是在浏览器地址栏直接访问可以返回正确的xml。不知道哪里出了问题。
1.请求的url
2.php代码
$doc = new DOMDocument();
$doc->load($url);
//获取成功标识is_success
$itemIs_success= $doc->getElementsByTagName( "is_success" );
$nodeIs_success[$ls] = $itemIs_success->item(0)->nodeValue;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
你的url对应的不是一个xml文件,所以你load时会告诉没有实体。
浏览器中可以用是因为请求这个url后返回的是xml文件,浏览器只是把这个请求输出。
你可以用curl或者file_get_content请求后,把内容存储到文件中,然后再用load方法操作。
function getHttpResponsePOST($url, $cacert_url, $para, $input_charset = '') {
if (trim($input_charset) != '') {
$url = $url."_input_charset=".$input_charset;
}
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);//SSL证书认证
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//严格认证
curl_setopt($curl, CURLOPT_CAINFO,$cacert_url);//证书地址
curl_setopt($curl, CURLOPT_HEADER, 0 ); // 过滤HTTP头
curl_setopt($curl,CURLOPT_RETURNTRANSFER, 1);// 显示输出结果
curl_setopt($curl,CURLOPT_POST,true); // post传输数据
curl_setopt($curl,CURLOPT_POSTFIELDS,$para);// post传输数据
$responseText = curl_exec($curl);
curl_close($curl);
return $responseText;
}
$html_text = getHttpResponsePOST($url, $cacert_url, $para, $input_charset );
$doc = new DOMDocument();
$doc->loadXML($html_text);
if ($doc->getElementsByTagName ( "is_success" )->item ( 0 )->nodeValue == 'T') {
...
}
上面是我用的支付宝同步发货的方法,用的是$doc->loadXML($html_text);
我也在做用php读取支付宝返回的xml,遇到了和你一样的问题,现在已经解决了。
不知道您有没有注意到接口文档里面有这样一句话,“(7) 本地电脑或商户服务器的配置上需支持XML远程解析,如:需要支持SSL;”。
我的环境就没有支持ssl的扩展,后来下载了libeay32.dll,ssleay32.dll,再修改一下php.ini,使服务器环境支持了ssl。再运行程序的时候就不提示错误了。
首先这个问题可以分为2个方面:
1、读取远程内容
2、读取内容后,解析内容
浏览器能取到远程内容,不代表loadcurlfile_get_content能取到远程内容,首先要保证通过程序取到的内容和浏览器获取的内容一致,然后考虑2的问题。
至于2的问题,任何一个解析器都不会仅仅一种方式方式输入的。如果已经排除了1的问题,那么就是一个解析的问题,就好处理的多。