如何获取soap Web服务数据

时间:2014-07-22 18:01:02

标签: php web-services soap

我有一个关于肥皂的新手问题。我试图从肥皂网服务获取数据,我有一个供应商提供的链接,如

https://project/services/productLog?wsdl

如果我在浏览器中输入网址,我会收到一堆肥皂数据。我想知道如何使用php获取返回的数据。

返回的数据类似于

...more..

<xs:complexType name="getProduct">
   <xs:sequence>
   <xs:element minOccurs="0" name="id" type="xs:dateTime"/>
</xs:sequence>

</xs:complexType>
   <xs:complexType name="getProductOwner">
   <xs:sequence>
   <xs:element minOccurs="0" name="return" type="tns:getID"/>
   </xs:sequence>
</xs:complexType>

...more

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您看到的数据是实际的WSDL文件。要向Web服务发出请求,您需要使用Web服务客户端。 PHP网站在这方面有一些很好的信息:

http://php.net/manual/en/class.soapclient.php

答案 1 :(得分:1)

开始时SOAP是背后的痛苦......在开始之前检查the official documentation是个好主意,以及有关SOAP如何工作的一些信息。

话虽这么说,首先要考虑的是你获得的url实际上是web服务的WSDL。 这相当于一个合同,它指定了Web服务提供的方法以及它需要执行的参数。

使用wsdl,您可以创建一个SoapClient实例,然后可以使用该实例调用特定方法。客户端本身是一个动态对象,使用WSDL中指定的相同方法自动创建。

这意味着如果你想执行一个名为&#34; getProduct&#34;的方法。从Web服务中,只需要为它实例化一个SoapClient,然后调用 $ yourSoapClientInstance-&gt; getProduct()

想象一下,您想要使用this网络服务的方法。 该服务提供了两种方法&#34; TodaysDilbert&#34;和&#34; DailyDilbert&#34;。这样做很简单:

<?php
try {

    $wsdl = "http://www.gcomputer.net/webservices/dilbert.asmx?wsdl"
    $soapClient = new SoapClient($wsdl);

    $response = $soapClient->TodaysDilbert();

    print "<pre>" . print_r($response, true) . "</pre>";

} catch (SoapFault $f) {
   // Your exception handling
}
?>

您应该注意,如果来自ExapClient方法的响应是一个复杂的结构,那么您的返回值将是一个包含整个响应结构的stdClass对象。

希望这有帮助!