Сложные параметры PHP SoapClient как?

Я использую 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>

person BraCa    schedule 01.12.2011    source источник
comment
Я делаю то же решение, что и автор узнал.   -  person Ismael    schedule 05.12.2011
comment
@BarCa: Пожалуйста, добавьте свое решение в качестве ответа ниже (посмотрите, как я сделал это примерное), а затем примите свой ответ в качестве ответа (да, именно так это работает, и это полностью принято). Спасибо!   -  person hakre    schedule 02.01.2013


Ответы (2)


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

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

person Giorgiolino    schedule 21.09.2012

Первоначальный автор вопроса, переведенный из вопроса в ответ:

редактировать: Наконец-то я понял ;)

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

person hakre    schedule 02.01.2013