PHP SoapClient сложные параметры, как? - PullRequest
3 голосов
/ 02 декабря 2011

Я использую PHP SoapClient для использования веб-сервиса ..

Все работает нормально, когда параметры сервиса просты и что-то вроде $ client-> GetProductById (array ('productId' => 'ID'));делает свое дело ...

но одна из служб, к которой мне нужен доступ, требует более сложных параметров ... Я использовал SoapUI для тестирования веб-службы, и с помощью 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 ]

1 голос
/ 21 сентября 2012

Я думаю, что путь здесь заключается в том, чтобы сгенерировать соответствующие классы php в соответствии с вашим * .wsdl файлом. Это можно сделать с помощью таких инструментов, как wsdl2php -> http://www.urdalen.no/wsdl2php/.

После этого вы можете использовать сгенерированный класс Service для выполнения вызовов веб-службы или просто получить соответствующие классы и использовать опцию «classmap» при создании экземпляра вашего Soap Client.

0 голосов
/ 02 января 2013

Автор оригинального вопроса, перешел из вопроса в ответ:

edit: Наконец-то я понял;)

Вероятно, не лучший подход, но он работает, я следовал совету, который пользователь оставил на форумах PHP. В основном мне пришлось создать несколько классов для представления структуры параметров, а затем, когда мне пришлось использовать 'classmap опция SoapClient для отображения этого типа WSDL в мои классы PHP ...

...