За последние 24 часа нас посетили 194337 программистов и 1996 роботов. Сейчас ищет 1441 программист ...

Формирование SOAP запроса

Тема в разделе "PHP для новичков", создана пользователем mazahaler, 18 дек 2017.

  1. mazahaler

    mazahaler Новичок

    С нами с:
    2 ноя 2017
    Сообщения:
    66
    Симпатии:
    2
    Здравствуйте, мне нужно в php сформировать SOAP запрос.
    SOAP запрос выглядит так:
    Код (Text):
    1. <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">
    2.    <soapenv:Header/>
    3.    <soapenv:Body>
    4.       <v1:loadReportsListElem>
    5.          <!--Optional:-->
    6.          <v11:head>
    7.             <v11:startRow>1</v11:startRow>
    8.             <!--Optional:-->
    9.             <v11:maxRows>6</v11:maxRows>
    10.          </v11:head>
    11.          <v1:filter>
    12.             <v12:and>
    13.                <v12:like attr="code">
    14.                   <v12:value>%</v12:value>
    15.                </v12:like>
    16.                <v12:like attr="mapping">
    17.                   <v12:value>%</v12:value>
    18.                </v12:like>
    19.                <v12:like attr="dataFunction">
    20.                   <v12:value>%</v12:value>
    21.                </v12:like>
    22.             </v12:and>
    23.          </v1:filter>
    24.       </v1:loadReportsListElem>
    25.    </soapenv:Body>
    26. </soapenv:Envelope>
    Соответственно я написал следующее:
    PHP:
    1. $client = new
    2.             SoapClient(
    3.                 "http://localhost:8181/cxf/reports/v1?wsdl",array(
    4.                 'trace' => 1,
    5.                 'exceptions' => 1)
    6.             );
    7.  
    8. $paramsList = array(
    9.                 "startRow" => 1,
    10.                 "maxRows" => 6
    11.           );
    12.               $responseList = $client->__soapCall("loadReportsList", array($paramsList));
    Метод не вызывается потому что не правильно или не все параметры прописаны.
    Мне нужна помощь с составлением параметров в $paramsList в соответствии с SOAP запросом.
    Пожалуйста хелп.
     
  2. vaajnur

    vaajnur Новичок

    С нами с:
    15 май 2017
    Сообщения:
    40
    Симпатии:
    3
    попробуй запрос сделать так
    $responseList = $client->loadReportsList($paramsList);
     
    mazahaler нравится это.
  3. mazahaler

    mazahaler Новичок

    С нами с:
    2 ноя 2017
    Сообщения:
    66
    Симпатии:
    2
    @vaajnur это не работает, разве дело не в том, что в paramsList заполнены не все апраметры запроса?
     
  4. mazahaler

    mazahaler Новичок

    С нами с:
    2 ноя 2017
    Сообщения:
    66
    Симпатии:
    2
    Я не знаю, как мне прописать параметры которые прописаны вот здесь:
    Код (Text):
    1. <v1:filter>
    2.             <v12:and>
    3.                <v12:like attr="code">
    4.                   <v12:value>%</v12:value>
    5.                </v12:like>
    6.                <v12:like attr="mapping">
    7.                   <v12:value>%</v12:value>
    8.                </v12:like>
    9.                <v12:like attr="dataFunction">
    10.                   <v12:value>%</v12:value>
    11.                </v12:like>
    12.             </v12:and>
    13.          </v1:filter>
    тоесть мне нужно прописать эти знаки процентов(%) в php.
     
  5. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    mazahaler нравится это.
  6. mazahaler

    mazahaler Новичок

    С нами с:
    2 ноя 2017
    Сообщения:
    66
    Симпатии:
    2
    @Sail, спасибо, приходит полный ответ, выглядит он так:
    Код (Text):
    1. <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    2.    <soap:Body>
    3.       <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">
    4.          <s:code>0</s:code>
    5.          <s:responseTime>77</s:responseTime>
    6.          <s:responseDbTime>65</s:responseDbTime>
    7.          <s:requestId>edd1efc4-92e4-479a-bf6e-2cd47953dc6b</s:requestId>
    8.          <s:route>rbi@localhost:8181</s:route>
    9.          <rpt:pageInfo>
    10.             <s:start>1</s:start>
    11.             <s:next>0</s:next>
    12.             <s:loaded>5</s:loaded>
    13.             <s:total>5</s:total>
    14.             <s:hasMore>false</s:hasMore>
    15.          </rpt:pageInfo>
    16.          <rpt:result>
    17.             <rpt:cReportItem>
    18.                <rpt:code>RPT_MAIN</rpt:code>
    19.                <rpt:name>Основной отчет</rpt:name>
    20.                <rpt:description>Презентационный отчет</rpt:description>
    21.                <rpt:lastModified>2017-12-07</rpt:lastModified>
    22.                <rpt:dataFnc>data_RPT_MAIN</rpt:dataFnc>
    23.                <rpt:mappingType>none</rpt:mappingType>
    24.             </rpt:cReportItem>
    25.          </rpt:result>
    26.       </rpt:loadReportsListResponseElem>
    27.    </soap:Body>
    28. </soap:Envelope>
    НО при этом я не моу вывести <rpt:name>Основной отчет</rpt:name> следующим образом:
    PHP:
    1.             $client = new
    2.             SoapClient(
    3.                 "http://localhost:8181/cxf/reports/v1?wsdl",array(
    4.                 'trace' => 1,
    5.                 'exceptions' => 1)
    6.             );
    7.  
    8.               $paramsList = array(
    9.                 "startRow" => 1,
    10.                 "maxRows" => 6
    11.           );
    12.  
    13.             $responseList = $client->loadReportsList($paramsList);
    14.    
    15. $reportsList->$responseList->result->cReportItem->name;
    16.  
    17.    
    18.               echo ($reportsList);
    просто не выводится... Как я могу вывести name и другие параметры ответа?
     
  7. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    Начните с var_dump($responseList); чтобы определиться с тем, что находится в ответе... массивы, объекты...
     
    mazahaler нравится это.
  8. mazahaler

    mazahaler Новичок

    С нами с:
    2 ноя 2017
    Сообщения:
    66
    Симпатии:
    2
    @Sail, var_dump показывает следующее:
    Код (Text):
    1. 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" } } } }
     
  9. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @mazahaler, итого имеем: $responseList - object, $result - object, cReportItem - массив объектов....
    Соответственно и обращаться к этим элементам надо...
    Например:
    PHP:
    1. $aItems = $responseList->result->cRepotrItem;
    2. foreach($aItems as $item) {
    3.     echo $item->name;
    4. }
    --- Добавлено ---
    Форматирование там добавить, перенос строк... или поместить в промежуточный контейнер для хранения нужные данные.... :)
     
    mazahaler нравится это.
  10. mazahaler

    mazahaler Новичок

    С нами с:
    2 ноя 2017
    Сообщения:
    66
    Симпатии:
    2
    @Sail, спасибо, но почему-то php ругается и выдает ошибку "Invalid argument supplied for foreach()"
     
  11. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    Проверьте значение $responseList->result->cRepotrItem
    Ошибка намекает, что это не массив...
    --- Добавлено ---
    Или ошибка в написании переменной, которой присвоено это значение...
     
    mazahaler нравится это.
  12. mazahaler

    mazahaler Новичок

    С нами с:
    2 ноя 2017
    Сообщения:
    66
    Симпатии:
    2
    @Sail,
    действительно ошибка в написании переменной, спасибо вам большое за помощь!)