За последние 24 часа нас посетили 196652 программиста и 2020 роботов. Сейчас ищут 1904 программиста ...

SOAP ответ

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

  1. mazahaler

    mazahaler Новичок

    С нами с:
    2 ноя 2017
    Сообщения:
    66
    Симпатии:
    2
    Здравтствуйте, у меня SOAP запрос получает в общем виде вот такой ответ:
    Код (Text):
    1. <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    2.    <soap:Body>
    3.       <rpt:loadReportFileResponseElem 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>какая-то инфа</s:code>
    5.          <s:responseTime>какая-то инфа</s:responseTime>
    6.          <s:responseDbTime>какая-то инфа</s:responseDbTime>
    7.          <s:requestId>какая-то инфа</s:requestId>
    8.          <s:route>какая-то инфа</s:route>
    9.          <rpt:result>
    10.             <rpt:file>какая-то инфа</rpt:file>
    11.          </rpt:result>
    12.       </rpt:loadReportFileResponseElem>
    13.    </soap:Body>
    14. </soap:Envelope>
    Как мне вытащить из этого ответа только
    Код (Text):
    1. <rpt:file>какая-то инфа</rpt:file>
    и затем присвоить переменной?
    Например так я получаю весь ответ:
    PHP:
    1. $client = new
    2.             SoapClient(
    3.                 "http://localhost:8181/cxf/reports/v1?wsdl",array('trace' => 1)
    4.             );
    5.        
    6.               echo "Ответ:\n" . $client->__getLastResponse() . "\n";
    И как мне из этого ответа получить только <rpt:file>какая-то инфа</rpt:file>
    Очень нужна помощь.

    Т.е. другими словами как мне SOAP ответ преобразовать в массив. А дальше из этого массива я буду тащить только нужные мне данные?
     
  2. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    На случай, если сервис предоставляет wsdl (что видно из кода), для обращения к методам используйте __soapCall()
    И ничего выгрызать из ответа не придётся.
     
    mazahaler нравится это.
  3. mazahaler

    mazahaler Новичок

    С нами с:
    2 ноя 2017
    Сообщения:
    66
    Симпатии:
    2
    @Sail спасибо. Теперь я использую __soapCall() и получаю следующее:
    Код (Text):
    1.  
    2.         object(stdClass)#3 (6) {
    3.   ["code"]=&gt;
    4.   int(0)
    5.   ["responseTime"]=&gt;
    6.   int(3315)
    7.   ["responseDbTime"]=&gt;
    8.   int(2780)
    9.   ["requestId"]=&gt;
    10.   string(36) "8196b8e6-40d9-426b-ac0f-4b8e325b3113"
    11.   ["route"]=&gt;
    12.   string(18) "rbi@localhost:8181"
    13.   ["result"]=&gt;
    14.   object(stdClass)#4 (1) {
    15.     ["file"]=&gt;
    16.     string(45428) "JVBERi0xLjQKJeLjz9MKNSAwIG9iago8PC9GaWx0ZXI…"}}
    Код php
    PHP:
    1.  $client = new
    2.             SoapClient(
    3.                 "http://localhost:8181/cxf/reports/v1?wsdl",array('trace' => 1)
    4.             );
    5.      
    6. $fileEncoding="utf-8";
    7. $format = "pdf";
    8. $reportCode = "RPT_DEMAND_REQ";
    9.  
    10.     $reportParams=$_GET['pid'];
    11.  
    12. $base64Encode=true;
    13.             $params = array(
    14.                 "fileEncoding" => $fileEncoding,
    15.                 "format" => $format,
    16.                 "reportCode" => $reportCode,
    17.                 "reportParams"=>$reportParams,
    18.                 "base64Encode"=>$base64Encode
    19.               );
    20.              
    21.  
    22.               $response = $client->__soapCall("loadReportFile", array($params));
    23.              
    24.  
    25.               var_dump($response);
    26.    
    И как мне теперь получить то что я хотел в первом посте?
     
  4. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @mazahaler, вероятно, $responce->result->file
     
    mazahaler нравится это.
  5. mazahaler

    mazahaler Новичок

    С нами с:
    2 ноя 2017
    Сообщения:
    66
    Симпатии:
    2
    @Sail теперь мой код выглядит так
    PHP:
    1.   $client = new
    2.             SoapClient(
    3.                 "http://localhost:8181/cxf/reports/v1?wsdl",array('trace' => 1)
    4.             );
    5.  
    6. $fileEncoding="utf-8";
    7. $format = "pdf";
    8. $reportCode = "RPT_DEMAND_REQ";
    9.  
    10.     $reportParams=$_GET['pid'];
    11.  
    12. $base64Encode=true;
    13.             $params = array(
    14.                 "fileEncoding" => $fileEncoding,
    15.                 "format" => $format,
    16.                 "reportCode" => $reportCode,
    17.                 "reportParams"=>$reportParams,
    18.                 "base64Encode"=>$base64Encode
    19.               );
    20.              
    21.  
    22.               $response = $client->__soapCall("loadReportFile", array($params));
    23.              
    24.              print_r($responce->result->file);
    однако теперь на странице ничего не отображается
     
  6. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    Если var_dump, а не print_r?
    И последовательно... сначала $responce->result, затем: $responce->result->file?
     
    mazahaler нравится это.
  7. mazahaler

    mazahaler Новичок

    С нами с:
    2 ноя 2017
    Сообщения:
    66
    Симпатии:
    2
    @Sail все работает, дело в том что правильно пишется responSe, а не responCe. Спасибо вам)