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

使用PHP调用SOAP API的GetAllVill接口返回值异常求助

解决方案

问题根因

你当前拿到的接口返回属于正常响应,问题出在PHP内置SoapClient没有自动解析.NET平台返回的DataSet类型结果,将DataSet的序列化内容直接存储到了any属性中。

调整步骤

方案1:基于原生SoapClient优化解析逻辑

  • 第一步:初始化SoapClient时补充配置参数,避免解析异常同时方便调试
$soapclient = new SoapClient('你的WSDL地址', [
    'trace' => 1, // 开启调试能力,可查看请求、响应的原始报文
    'exceptions' => 1, // 开启异常抛出,方便快速定位错误
    'features' => SOAP_SINGLE_ELEMENT_ARRAYS, // 统一返回数组格式,避免单个元素时返回对象格式不一致
]);
  • 第二步:解析any属性中的DataSet序列化内容
$param = [
    'strTaluka' => '你的实际参数值',
    'Username' => '你的接口用户名',
    'Password' => '你的接口密码'
];
$response = $soapclient->GetAllVill($param);
// 取出DataSet对应的原始XML内容
$rawDataSetXml = $response->GetAllVillResult->any;
// 加载XML并转为数组格式,处理非规范XML时关闭错误提示
libxml_use_internal_errors(true);
$xmlObj = simplexml_load_string($rawDataSetXml);
libxml_clear_errors();
// 转为关联数组方便后续业务处理
$formattedResult = json_decode(json_encode($xmlObj), true);
// 输出规范结构化结果
var_dump($formattedResult);
  • 第三步(可选):打印原始报文确认返回内容
    如果解析结果不符合预期,可以调用SoapClient的调试方法查看原始报文,确认服务端返回是否符合规范:
// 打印原始请求报文
echo "请求报文:" . htmlspecialchars($soapclient->__getLastRequest()) . "<br>";
// 打印原始响应报文
echo "响应报文:" . htmlspecialchars($soapclient->__getLastResponse()) . "<br>";

方案2:直接使用CURL模拟SOAP请求

如果原生SoapClient的封装逻辑持续导致解析问题,可以直接按照官方示例构造请求报文发送,完全避开Soap封装的解析逻辑:

// 构造符合官方要求的请求XML
$requestXml = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <GetAllVill xmlns="http://apps.in/wsror">
      <strTaluka>你的实际参数值</strTaluka>
      <Username>你的接口用户名</Username>
      <Password>你的接口密码</Password>
    </GetAllVill>
  </soap:Body>
</soap:Envelope>
XML;
$apiUrl = 'http://10.159.159.1/wsror/Form.asmx';
$headers = [
    'Content-Type: text/xml; charset=utf-8',
    'SOAPAction: http://apps.in/wsror/GetAllVill',
    'Content-Length: ' . strlen($requestXml)
];
// 初始化CURL发送请求
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $requestXml);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 忽略SSL证书校验(如果是HTTPS接口且证书不规范可开启)
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$responseXml = curl_exec($ch);
curl_close($ch);
// 解析响应内容
libxml_use_internal_errors(true);
$soapObj = simplexml_load_string($responseXml);
libxml_clear_errors();
// 提取指定命名空间下的返回结果
$bodyContent = $soapObj->children('http://schemas.xmlsoap.org/soap/envelope/')->Body;
$resultContent = $bodyContent->children('http://apps.in/wsror')->GetAllVillResponse->GetAllVillResult;
// 输出规范结果
var_dump($resultContent);

内容的提问来源于stack exchange,提问作者sahilver

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:27:00