如何用PHP的file_get_contents获取接口响应?代码返回空白页求助
问题修正:获取XML接口的status字段
你的代码核心问题是把XML格式的接口响应当成JSON来解析,json_decode处理XML内容会返回null,所以页面输出空白。
接口明确返回XML格式,得用XML解析工具来处理,下面是修正后的代码,附带错误处理:
$ref_no = "123"; $postdata = http_build_query(array( 'apiToken' => '123', 'reqid' => $ref_no // 无需多余字符串拼接,直接使用变量即可 )); $opts = array( 'http' => array( 'method' => 'POST', 'header' => 'Content-Type: application/x-www-form-urlencoded', 'content' => $postdata ) ); $context = stream_context_create($opts); // 增加请求失败的错误捕获 $result = @file_get_contents('http://www.smslinkwallet.com/apiservice.asmx/GetRechargeStatus', false, $context); if (!$result) { die("接口请求失败,请检查网络或参数是否正确"); } // 加载XML内容并验证解析结果 $xml = simplexml_load_string($result); if (!$xml) { die("XML解析失败,接口响应内容:".$result); } // 处理XML命名空间(响应中带有xmlns="http://tempuri.org/") $namespace = $xml->getDocNamespaces()[0]; $status = (string)$xml->children($namespace)->status; echo "充值状态:".$status;
关键细节说明:
- 移除了无意义的字符串拼接:
''.$ref_no.''直接替换为$ref_no,代码更简洁。 - 增加了请求和解析环节的错误处理,方便快速定位问题(比如请求超时、参数错误、响应格式异常)。
- 使用PHP原生的
SimpleXML解析XML响应,这是处理XML格式数据的标准方式。 - 必须处理XML命名空间:由于接口返回的
<Result>节点带有命名空间属性,直接用$xml->status无法找到对应节点,需要通过children($namespace)访问命名空间下的子节点。 - 强制类型转换:用
(string)把SimpleXMLElement对象转为纯文本,确保输出的是状态字段的实际值。
内容的提问来源于stack exchange,提问作者Pepul Kart
相关产品推荐
相关产品推荐

