2011-12-01 76 views
2

我使用PHP SoapClient的消耗web服务..当服务参数是简单的和类似$客户机 - > GetProductById(阵列(“的productId” =>“ID”))PHP SoapClient复杂参数howto?

一切正常;诀窍...

但我需要访问的服务之一,需要更复杂的参数..我用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> 
+0

我和作者发现的解决方案一样。 – Ismael

+0

@BarCa:请在下面添加您的解决方案作为答案(请参阅我如何做这个示例),然后接受您的答案作为答案(是的,它是如何工作的,它完全被接受)。谢谢! – hakre

回答

1

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

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

0

到了问题的一部开拓创新的作家,从问题转移到一个答案:

编辑:最后我得到了它;)

可能不是最好的方法,但它的工作原理,我跟着一个用户留在PHP论坛的提示。基本上,我不得不创建一些类来表示参数结构,然后当我不得不使用SoapClient的'classmap'选项将该WSDL类型映射到我的PHP类...