【问题标题】:PHP SoapClient complex parameters howto?PHP SoapClient 复杂参数howto?
【发布时间】:2011-12-01 20:28:04
【问题描述】:

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

【问题讨论】:

  • 我的解决方法和作者发现的一样。
  • @BarCa:请在下面添加您的解决方案作为答案(请参阅我是如何做到这一点的),然后接受您的答案作为答案(是的,它就是这样工作的,并且完全被接受)。谢谢!

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    编辑:终于明白了;)

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

    【讨论】:

      猜你喜欢
      • 2014-07-05
      • 1970-01-01
      • 2014-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多