如何使用SoapClient从非WSDL检索数据

时间:2015-03-01 09:18:17

标签: php web-services soap soap-client

有一个非wsdl Web服务URL。此Web服务直接在URL中使用XML格式获取一些身份验证参数:

[Snip:我使用example更改了我的实际域名

http://example.com/WSV2/StaticData.php?xml=<StaticDataRequest><Header><Code>TT4533</Code><Username>skyman211</Username><Password>ammkj43</Password></Header><Body><GetStaticData>cities</GetStaticData><ExtraParams><CountryCode>98</CountryCode></ExtraParams></Body></StaticDataRequest>

使用以下结构返回城市详细信息:

<?xml version="1.0" encoding="UTF-8"?>
<StaticDataResponse>
   <Country code="98" />
   <Cities>
      <City code="320">
         <Name>Tehran</Name>
      </City>
      <City code="1907">
         <Name>Shiraz</Name>
      </City>
      <City code="9971">
         <Name>Bandar Abbas</Name>
      </City>
   </Cities>
</StaticDataResponse>

现在,我需要使用SoapClient访问该网址并检索城市详情(codename)。

我阅读了很多关于使用SoapClient连接到非WSDL Web服务的线程,但是我没有成功。

这是我到目前为止所尝试的内容,我确信它不完整:

$URL = 'http://example.com/WSV2/StaticData.php?xml=<StaticDataRequest><Header><Code>TT4533</Code><Username>skyman211</Username><Password>ammkj43</Password></Header><Body><GetStaticData>cities</GetStaticData><ExtraParams><CountryCode>67</CountryCode></ExtraParams></Body></StaticDataRequest>';

$client = new SoapClient(null, array(
    'location' => $URL,
    'uri'      => "http://example.com/WSV2/",
    'trace'    => 1,
    ));

$return = $client->__soapCall();

请告诉我如何通过SoapClient检索城市codename

1 个答案:

答案 0 :(得分:0)

您必须使用file_get_contents()而不是SoapClient。 file_get_contents()检索您所需的一切:

$URL = 'http://example.com/WSV2/StaticData.php?xml=<StaticDataRequest><Header><Code>TT4533</Code><Username>skyman211</Username><Password>ammkj43</Password></Header><Body><GetStaticData>cities</GetStaticData><ExtraParams><CountryCode>67</CountryCode></ExtraParams></Body></StaticDataRequest>';

$data = file_get_contents($URL);

现在,$data是一个字符串变量,其中包含Web服务检索的所有城市详细信息。

echo '<pre>' . print_r(htmlspecialchars($data), true) . '</pre>';

输出:

<?xml version="1.0" encoding="UTF-8"?>
<StaticDataResponse>
   <Country code="98" />
   <Cities>
      <City code="320">
         <Name>Tehran</Name>
      </City>
      <City code="1907">
         <Name>Shiraz</Name>
      </City>
      <City code="9971">
         <Name>Bandar Abbas</Name>
      </City>
   </Cities>
</StaticDataResponse>