php 如何在php中使用soap类(举例)?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/9018236/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-26 05:59:48  来源:igfitidea点击:

How to use soap class in php (with example)?

phpsoap

提问by Dan Soap

I would like to learn the basic usage of SOAP through this (weather) example. How is it worthy to process this data?

我想通过这个(天气)示例学习 SOAP 的基本用法。处理这些数据的价值如何?

Request:

要求:

POST /globalweather.asmx HTTP/1.1
Host: www.webservicex.net
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <GetWeather xmlns="http://www.webserviceX.NET">
      <CityName>string</CityName>
      <CountryName>string</CountryName>
    </GetWeather>
  </soap12:Body>
</soap12:Envelope>
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

Response:

回复:

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <GetWeatherResponse xmlns="http://www.webserviceX.NET">
      <GetWeatherResult>string</GetWeatherResult>
    </GetWeatherResponse>
  </soap12:Body>
</soap12:Envelope>

回答by Dan Soap

The most simple approach would be:

最简单的方法是:

$requestParams = array(
    'CityName' => 'Berlin',
    'CountryName' => 'Germany'
);

$client = new SoapClient('http://www.webservicex.net/globalweather.asmx?WSDL');
$response = $client->GetWeather($requestParams);

print_r($response);

would output

会输出

stdClass Object
(
    [GetWeatherResult] => <?xml version="1.0" encoding="utf-16"?>
<CurrentWeather>
  <Location>Berlin-Tegel, Germany (EDDT) 52-34N 013-19E 37M</Location>
  <Time>Jan 26, 2012 - 07:50 AM EST / 2012.01.26 1250 UTC</Time>
  <Wind> from the SE (130 degrees) at 14 MPH (12 KT):0</Wind>
  <Visibility> greater than 7 mile(s):0</Visibility>
  <SkyConditions> mostly clear</SkyConditions>
  <Temperature> 33 F (1 C)</Temperature>
  <Wind>Windchill: 23 F (-5 C):1</Wind>
  <DewPoint> 21 F (-6 C)</DewPoint>
  <RelativeHumidity> 59%</RelativeHumidity>
  <Pressure> 30.27 in. Hg (1025 hPa)</Pressure>
  <Status>Success</Status>
</CurrentWeather>
)

The rest can then be parsed with SimpleXML or something similar.

然后可以使用 SimpleXML 或类似的东西解析其余部分。

Note, that the kind of response is specific to this web service. There are better web services out there, which do not simply return an xml string, but rather provide the response structure within the WSDL.

请注意,响应类型特定于此 Web 服务。有更好的 Web 服务,它们不简单地返回一个 xml 字符串,而是在 WSDL 中提供响应结构。



EDITAn example for a "more structured" webservice could be the GeoIP lookup on the same site:

编辑“更结构化”网络服务的一个例子可能是同一站点上的 GeoIP 查找:

$client = new SoapClient('http://www.webservicex.net/geoipservice.asmx?WSDL');
$result = $client->GetGeoIP(array('IPAddress' => '8.8.8.8'));

print_r($result);

this gives you:

这给你:

stdClass Object
(
    [GetGeoIPResult] => stdClass Object
        (
            [ReturnCode] => 1
            [IP] => 8.8.8.8
            [ReturnCodeDetails] => Success
            [CountryName] => United States
            [CountryCode] => USA
        )

)

Now you can simply access the values by invoking

现在您可以通过调用简单地访问这些值

$country = $result->GetGeoIPResult->CountryName;