PHP SoapClient复杂参数howto?

时间:2011-12-01 20:28:04

标签: php soap nested webservice-client soap-client

我正在使用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>

2 个答案:

答案 0 :(得分:1)

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

之后,您可以使用生成的Service类进行Web服务调用,也可以在创建Soap Client实例时获取相关类并使用“classmap”选项。

答案 1 :(得分:0)

  

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

编辑:最后我明白了;)

可能不是最好的方法,但是它有效,我已经按照用户离开PHP论坛的提示...基本上我必须创建一些类来表示参数结构,然后当我不得不使用'classmap '选择SoapClient将WSDL类型映射到我的PHP类......