如何连接到 PHP 中的以下示例 SOAP 服务并向其发出请求?

How do I connect to and make a request to the following sample SOAP service in PHP?

我刚刚注意到我将不得不在不久的将来与 SOAP API 进行交互。不过到目前为止,我只使用过 REST APIs 而从未使用过 SOAP API.

我一直在阅读有关 SOAP API 的文章,到目前为止我的(很可能是错误的)理解如下:

我有两个问题:

  1. 我对上述 SOAP 的理解是否正确?
  2. 如何使用 PHP 连接并向以下示例 SOAP API 发出请求:http://www.webservicex.com/globalweather.asmx?op=GetWeather

(如果上面链接的示例 SOAP API 不是一个很好的示例,那么我愿意学习如何将 SOAP 与任何其他可用的示例 SOAP API 一起使用。 )


Edit: pawelwaw,我写了下面的示例代码来测试一切,但似乎无论我在 [=] 中为 CityName 使用什么值13=] 操作,我没有得到任何数据。是我的理解不正确,还是 SOAP API 不是很好?

<?php

  $client = new SoapClient('http://www.webservicex.com/globalweather.asmx?wsdl');

  echo '<h2>Types:</h2>';
  echo '<pre>';
    var_dump($client->__getTypes());
  echo '</pre>';

  echo '<h2>Functions:</h2>';
  echo '<pre>';
    var_dump($client->__getFunctions());
  echo '</pre>';

  echo '<h2>GetCitiesByCountry:</h2>';
  echo '<pre>';
    echo htmlentities($client->GetCitiesByCountry([
      'CountryName' => 'Poland'
    ])->GetCitiesByCountryResult);
  echo '</pre>';

  echo '<h2>GetWeather:</h2>';
  echo '<pre>';  
    var_dump($client->GetWeather([
      'CityName' => 'Krakow',
      'CountryName' => 'Poland'
    ]));
  echo '</pre>';

我通常使用 SOAP api。 而对于这项服务 您可以使用此示例代码获取国家/地区的城市

<?php
  $api = new SoapClient ( 'http://www.webservicex.com/globalweather.asmx?WSDL' );
  $res = $api->GetCitiesByCountry(array( 'CountryName' =>"Poland"));

  var_dump($res);
?>

然后你就可以运行这个api的第二种方法来获取天气 http://www.webservicex.com/globalweather.asmx?op=GetWeather

希望对您有所帮助。

函数 GetWeather ( http://www.webservicex.com/globalweather.asmx?op=GetWeather ) 似乎无法正常工作。当我在网站上手动填写值时,没有数据响应,但是对于函数 GetCitiesByCountry ( http://www.webservicex.com/globalweather.asmx?op=GetCitiesByCountry ) returns 数据。 我对 API 没有多少经验,但这应该可以工作,在我看来,SOAP 中的此功能存在问题,因为也不能通过 http 工作。 我通过 REST 对其进行了测试,但该功能不符合规范。