Здравствуйте, мне нужно в php сформировать SOAP запрос. SOAP запрос выглядит так: Код (Text): <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://bus.rbi.com/service/reports/v1" xmlns:v11="http://bus.rbi.com/common/support/v1" xmlns:v12="http://bus.rbi.com/common/query/v1"> <soapenv:Header/> <soapenv:Body> <v1:loadReportsListElem> <!--Optional:--> <v11:head> <v11:startRow>1</v11:startRow> <!--Optional:--> <v11:maxRows>6</v11:maxRows> </v11:head> <v1:filter> <v12:and> <v12:like attr="code"> <v12:value>%</v12:value> </v12:like> <v12:like attr="mapping"> <v12:value>%</v12:value> </v12:like> <v12:like attr="dataFunction"> <v12:value>%</v12:value> </v12:like> </v12:and> </v1:filter> </v1:loadReportsListElem> </soapenv:Body> </soapenv:Envelope> Соответственно я написал следующее: PHP: $client = new SoapClient( "http://localhost:8181/cxf/reports/v1?wsdl",array( 'trace' => 1, 'exceptions' => 1) ); $paramsList = array( "startRow" => 1, "maxRows" => 6 ); $responseList = $client->__soapCall("loadReportsList", array($paramsList)); Метод не вызывается потому что не правильно или не все параметры прописаны. Мне нужна помощь с составлением параметров в $paramsList в соответствии с SOAP запросом. Пожалуйста хелп.
Я не знаю, как мне прописать параметры которые прописаны вот здесь: Код (Text): <v1:filter> <v12:and> <v12:like attr="code"> <v12:value>%</v12:value> </v12:like> <v12:like attr="mapping"> <v12:value>%</v12:value> </v12:like> <v12:like attr="dataFunction"> <v12:value>%</v12:value> </v12:like> </v12:and> </v1:filter> тоесть мне нужно прописать эти знаки процентов(%) в php.
@mazahaler, проанализируйте ответ с помощью методов SoapClient::__getLastResponse и SoapClient::__getLastResponseHeaders
@Sail, спасибо, приходит полный ответ, выглядит он так: Код (Text): <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <rpt:loadReportsListResponseElem xmlns:q="http://bus.rbi.com/common/query/v1" xmlns:a="http://bus.rbi.com/common/about/v1" xmlns:bs="http://bus.rbi.com/common/basis/v1" xmlns:s="http://bus.rbi.com/common/support/v1" xmlns:rpt="http://bus.rbi.com/service/reports/v1"> <s:code>0</s:code> <s:responseTime>77</s:responseTime> <s:responseDbTime>65</s:responseDbTime> <s:requestId>edd1efc4-92e4-479a-bf6e-2cd47953dc6b</s:requestId> <s:route>rbi@localhost:8181</s:route> <rpt:pageInfo> <s:start>1</s:start> <s:next>0</s:next> <s:loaded>5</s:loaded> <s:total>5</s:total> <s:hasMore>false</s:hasMore> </rpt:pageInfo> <rpt:result> <rpt:cReportItem> <rpt:code>RPT_MAIN</rpt:code> <rpt:name>Основной отчет</rpt:name> <rpt:description>Презентационный отчет</rpt:description> <rpt:lastModified>2017-12-07</rpt:lastModified> <rpt:dataFnc>data_RPT_MAIN</rpt:dataFnc> <rpt:mappingType>none</rpt:mappingType> </rpt:cReportItem> </rpt:result> </rpt:loadReportsListResponseElem> </soap:Body> </soap:Envelope> НО при этом я не моу вывести <rpt:name>Основной отчет</rpt:name> следующим образом: PHP: $client = new SoapClient( "http://localhost:8181/cxf/reports/v1?wsdl",array( 'trace' => 1, 'exceptions' => 1) ); $paramsList = array( "startRow" => 1, "maxRows" => 6 ); $responseList = $client->loadReportsList($paramsList); $reportsList->$responseList->result->cReportItem->name; echo ($reportsList); просто не выводится... Как я могу вывести name и другие параметры ответа?
Начните с var_dump($responseList); чтобы определиться с тем, что находится в ответе... массивы, объекты...
@Sail, var_dump показывает следующее: Код (Text): object(stdClass)#3 (7) { ["code"]=> int(0) ["responseTime"]=> int(119) ["responseDbTime"]=> int(111) ["requestId"]=> string(36) "d0c41b24-e449-47f6-a395-d80c08212c70" ["route"]=> string(18) "rbi@localhost:8181" ["pageInfo"]=> object(stdClass)#4 (5) { ["start"]=> int(1) ["next"]=> int(0) ["loaded"]=> int(5) ["total"]=> int(5) ["hasMore"]=> bool(false) } ["result"]=> object(stdClass)#5 (1) { ["cReportItem"]=> array(5) { [0]=> object(stdClass)#6 (6) { ["code"]=> string(8) "RPT_MAIN" ["name"]=> string(27) "Основной отчет" ["description"]=> string(41) "Презентационный отчет" ["lastModified"]=> string(10) "2017-12-07" ["dataFnc"]=> string(13) "data_RPT_MAIN" ["mappingType"]=> string(4) "none" } [1]=> object(stdClass)#7 (6) { ["code"]=> string(9) "RPT_MAIN2" ["name"]=> string(39) "Второй главный отчет2" ["description"]=> string(61) "Описание второго главного отчета" ["lastModified"]=> string(10) "2017-11-25" ["dataFnc"]=> string(10) "get_Smthng" ["mappingType"]=> string(7) "request" } [2]=> object(stdClass)#8 (6) { ["code"]=> string(9) "RPT_MAIN1" ["name"]=> string(27) "Основной отчет" ["description"]=> string(41) "Презентационный отчет" ["lastModified"]=> string(10) "2017-11-25" ["dataFnc"]=> string(13) "data_RPT_MAIN" ["mappingType"]=> string(7) "request" } [3]=> object(stdClass)#9 (6) { ["code"]=> string(14) "RPT_DEMAND_REQ" ["name"]=> string(14) "RPT_DEMAND_REQ" ["description"]=> string(66) "КАРТА ЗАЯВКИ НА РЕМОНТ ОБОРУДОВАНИЯ" ["lastModified"]=> string(10) "2017-12-17" ["dataFnc"]=> string(19) "data_RPT_DEMAND_REQ" ["mappingType"]=> string(4) "none" } [4]=> object(stdClass)#10 (6) { ["code"]=> string(16) "RPT_FILTERED_REQ" ["name"]=> string(16) "RPT_FILTERED_REQ" ["description"]=> string(79) "СПИСОЧНАЯ ФОРМА ПРИНЯТЫХ ЗАЯВОК ПО ФИЛЬТРУ" ["lastModified"]=> string(10) "2017-12-17" ["dataFnc"]=> string(0) "" ["mappingType"]=> string(7) "request" } } } }
@mazahaler, итого имеем: $responseList - object, $result - object, cReportItem - массив объектов.... Соответственно и обращаться к этим элементам надо... Например: PHP: $aItems = $responseList->result->cRepotrItem; foreach($aItems as $item) { echo $item->name; } --- Добавлено --- Форматирование там добавить, перенос строк... или поместить в промежуточный контейнер для хранения нужные данные....
Проверьте значение $responseList->result->cRepotrItem Ошибка намекает, что это не массив... --- Добавлено --- Или ошибка в написании переменной, которой присвоено это значение...