You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 14:35:19