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

时间:2016-12-27 21:14:02

标签: php web-services soap wsdl

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

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

  • 您首先连接到SOAP服务。当你连接时,你输入WSDL文件的URL,然后告诉你哪些“服务”(我在这里使用正确的术语?)是通过SOAP API提供的。
  • 一旦知道要调用哪个服务,就可以使用必要的参数调用服务,并向SOAP服务器发送XML请求,然后发送回XML响应。

我有两个问题:

  1. 我对上面的SOAP的理解是否正确?
  2. 如何使用PHP连接以及对以下示例SOAP API发出请求:http://www.webservicex.com/globalweather.asmx?op=GetWeather
  3. (如果上面链接的示例SOAP API不是很好,那么我愿意学习如何将SOAP与任何其他可用的示例SOAP API一起使用。)

    编辑:pawelwaw,我编写了以下示例代码来测试所有内容,但似乎无论我在CityName操作中使用GetWeather的值是什么,我没有得到任何数据。我的理解是不正确的,还是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>';
    

1 个答案:

答案 0 :(得分:1)

我经常使用SOAP api。 并为此服务 您可以使用此示例代码获取Country of Country

<?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)返回数据。 我对API没有多少经验,但是这应该有效,在我看来这个函数在SOAP中存在问题,因为也不能通过http工作。 我通过REST测试它,并且此功能不符合规范。