За последние 24 часа нас посетили 99898 программистов и 6355 роботов. Сейчас ищут 1735 программистов ...

Вопросы по SOAP

Тема в разделе "PHP для новичков", создана пользователем Asagi, 16 окт 2018.

  1. Asagi

    Asagi Новичок

    С нами с:
    16 окт 2018
    Сообщения:
    2
    Симпатии:
    0
    Добрый день!
    Пытаюсь отправить данные на SOAP сервер. Нюансы коннекта опущу, представляю непосредственно пример данных.
    Есть вот такой массив:


    Код (Text):
    1.  
    2.  
    3.         $order = array();
    4.         $order['Order'] = array();
    5.      
    6.  
    7.         $order['Order']['Partner']['Name']          = new SoapVar('Тестовый партнёр', XSD_STRING);
    8.         $order['Order']['Partner']['ID']                = new SoapVar('1', XSD_INTEGER);
    9.         $order['Order']['Partner']['ManagerID']  = new SoapVar('10', XSD_INTEGER);
    10.      
    11.         $order['Order']['Counterpart']['ID']        = new SoapVar('1', XSD_STRING);
    12.         $order['Order']['Counterpart']['Name']      = new SoapVar('new conr', XSD_STRING);
    13.         $order['Order']['Counterpart']['INN']       = new SoapVar('111', XSD_STRING);
    14.         $order['Order']['Counterpart']['KPP']       = new SoapVar('222', XSD_STRING);
    15.         $order['Order']['Counterpart']['Address']   = new SoapVar('adr', XSD_STRING);
    16.         $order['Order']['Counterpart']['Email']     = new SoapVar('test@test.ru', XSD_STRING);
    17.         $order['Order']['Counterpart']['Phone']     = new SoapVar('89999999999', XSD_STRING);
    18.         $order['Order']['Counterpart']['Person']    = new SoapVar('test', XSD_STRING);

    При попытке отправить данные на SOAP сервер, логирую отправляемый запрос. А там такое:

    Код (Text):
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://xxxxxxxxx/">
    3.     <env:Body>
    4.         <ns1:OrderCreate>
    5.             <ns1:Order>
    6.                 <ns1:Partner>
    7.                     <ns1:Name>Тестовый партнёр</ns1:Name>
    8.                     <ns1:ID>1</ns1:ID>
    9.                     <ns1:ManagerID>10</ns1:ManagerID>
    10.                 </ns1:Partner>
    11.             </ns1:Order>
    12.         </ns1:OrderCreate>
    13.     </env:Body>
    14. </env:Envelope>
    По непонятной для меня причине - контейнер Counterpart не записывается в запрос. Если удалить контейнер Partner, то записывается только контейнер Counterpart. Иначе говоря всегда записывается только первый контейнер. Остальные игнорируются. Что я делаю не так?
     
  2. Artur_hopf

    Artur_hopf Старожил

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    Может если убрать $order['Order'] = array(); и просто написать $order['Partner']['Name'] и $order['Counterpart']['Name'] то проканает.
     
  3. Asagi

    Asagi Новичок

    С нами с:
    16 окт 2018
    Сообщения:
    2
    Симпатии:
    0
    Увы не помогло(
     
  4. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @Asagi, сверьтесь со спецификацией на предмет ожидаемых сервером данных. Быть может, в методе/функции, которой пользуетесь, этот контейнер и не предусмотрен, либо должен передаваться иным образом.