SoapClient创建XML

时间:2013-01-25 05:33:11

标签: php xml soap-client

我需要创建这个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的新手,需要一些帮助才能做到这一点。我该怎么做?

2 个答案:

答案 0 :(得分:0)

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

  1. 第一个是与PHP捆绑在一起的SoapClient和/或SoapServer类。它们工作正常,有关详细信息,请参阅http://php.net/manual/en/book.soap.php
  2. 第二个是WsdlDocument库。它生成服务的WSDL描述,因此其他客户端可以轻松使用它。请参阅http://code.google.com/p/wsdldocument/
  3. 使用SoapClient非常简单,初始化后,您将获得可以像往常一样调用方法的对象,并将这些调用转发给服务器。

    SoapServer只关于创建服务实例并调用handle方法。

    这些都不包括您发布的XML的手动处理。它神奇地在它自己的工作(非常字面)。

答案 1 :(得分:0)

我明白了。我需要做两件事。 首先,我需要创建具有安全性的标题部分。         $ soap_client = new SoapClient(“airportinfo.wsdl”,array(“trace”=&gt; 1,“exceptions”=&gt; 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我上面说过但是正确的xml让SoapClient正常工作