-2

我需要创建这个xml:

<soapenv:Envelope
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"  
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">  
  <soapenv:Header>  
    <wsse:Security xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/04/secext">  
      <wsse:UsernameToken>  
        <wsse:Username>user</wsse:Username>  
        <wsse:Password>password</wsse:Password>  
      </wsse:UsernameToken>  
    </wsse:Security>  
  </soapenv:Header>  
  <soapenv:Body>  
    <vb:getAirportInfo xmlns:vb="http://www.example.com/schema/2005/02/booking.xsd">  
      <airport>BNE</airport>  
      <airport>PPP</airport>  
      <airport>MEL</airport>  
    </vb:getAirportInfo>  
  </soapenv:Body>  
</soapenv:Envelope>  

我是使用 SoapClients 的新手,需要一些帮助。我该怎么做?

4

2 回答 2

0

要从 PHP 中成功使用 SOAP,您需要做两件事:

  1. 第一个是与 PHP 捆绑的 SoapClient 和/或 SoapServer 类。它们工作正常,有关详细信息,请参阅http://php.net/manual/en/book.soap.php
  2. 第二个是 WsdlDocument 库。它为您的服务生成 WSDL 描述,因此其他客户端可以轻松使用它。请参阅http://code.google.com/p/wsdldocument/

使用 SoapClient 非常简单,一旦初始化它,您将获得可以像往常一样调用方法的对象,并将这些调用转发到服务器。

SoapServer 只是关于创建服务实例和调用句柄方法。

这些都不包括手动处理您发布的 XML。它可以自己神奇地工作(从字面上看)。

于 2013-01-29T22:41:39.507 回答
0

我想到了。我需要做两件事。首先,我需要创建包含安全性的标题部分。$soap_client = new SoapClient("airportinfo.wsdl", array("trace" => 1,"exceptions"=>0));

    $header_part = '
        <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" SOAP-ENV:mustUnderstand="1">
            <wsse:UsernameToken>
                <wsse:Username>'.$username.'</wsse:Username>
                <wsse:Password>'.$password.'</wsse:Password>
            </wsse:UsernameToken>
        </wsse:Security>
    ';
    $soap_var_header = new SoapVar( $header_part, XSD_ANYXML, null, null, null );
    $soap_header = new SoapHeader( 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd', 'wsse', $soap_var_header, true );
    $soap_client->__setSoapHeaders($soap_header);

其次,我需要创建一个数组并将其传递给 WSDL 所具有的函数。我通过使用 __getFunctions() 获得了这些列表。然后我使用此代码生成最后一个 xml

    $airports = array("AirportInfoRQ" => array("AirportCode" => "PPP", "AirportCode" => "BNE"));
    $responce = $soap_client->AxisTransaction($airports);

这给了我上面所说的稍微不同的 xml,但它是让 SoapClient 正常工作的正确 xml

于 2013-02-06T23:07:10.233 回答