PHP SoapClient复杂参数如何实现


PHP SoapClient complex parameters howto?

我正在使用PHP SoapClient来消费web服务。

一切都工作良好,当服务参数是简单的,像$client->GetProductById(array('productId' => 'ID'));

但是我需要访问的一个服务,需要更复杂的参数…我已经使用SoapUI来测试web服务,使用SoapUI我可以很容易地使它工作。

问题是,我不能使它与PHP SoapClient工作,我根本找不到一种方法来表示所有这些参数..

发送到服务器的Soap消息如下(从SoapUI复制)

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:slps="http://www.microsoft.com/slps/">
<soapenv:Header/>
<soapenv:Body>
    <slps:GetLicensesByFilter>
         <slps:filter>
            <slps:ExcludeCommercial>false</slps:ExcludeCommercial>
            <slps:ExcludeTrial>false</slps:ExcludeTrial>
            <slps:IssueDateRange>
           <slps:End>2011-12-31T00:00:00.000Z</slps:End><slps:Start>2011-11-01T00:00:00.000Z</slps:Start>
            </slps:IssueDateRange>
            <slps:ProductId>1275b704-7622-c2xx-922e-76186497f744</slps:ProductId>
            <slps:SkuId>A35138F43-0119-0719-802a-B48CCE6229A4</slps:SkuId>
         </slps:filter>
     <slps:retrievalOptions>LicenseInfo</slps:retrievalOptions><slps:pageIndex>0</slps:pageIndex>
  </slps:GetLicensesByFilter>
</soapenv:Body>
</soapenv:Envelope>

我认为这里的方法是根据你的*生成相关的php类。wsdl文件。这可以使用像wsdl2php --> http://www.urdalen.no/wsdl2php/这样的工具来完成。

之后,您可以使用生成的Service类来执行您的webservice调用,或者您可以在创建Soap客户机实例时仅获取相关类并使用"classmap"选项。

由问题的原作者,从问题移到答案:

edit:我终于明白了;)

可能不是最好的方法,但它是有效的,我遵循了一个用户在PHP论坛留下的提示…基本上我必须创建一些类来表示参数结构,然后当我不得不使用SoapClient的'classmap'选项将WSDL类型映射到我的PHP类…