За последние 24 часа нас посетили 18607 программистов и 1657 роботов. Сейчас ищут 904 программиста ...

SOAP и префиксы

Тема в разделе "Прочие вопросы по PHP", создана пользователем Sniker, 18 июн 2013.

  1. Sniker

    Sniker Новичок

    С нами с:
    18 июн 2013
    Сообщения:
    2
    Симпатии:
    0
    Приветствую!
    Может кто сталкивался с SOAP веб сервисами.

    Есть работающий сервис на PHP. Использует SOAP протокол.
    Используется стандартное SOAP-расширение для PHP - http://php.ru/manual/book.soap.html
    Есть клиент. Есть сервер.

    Вот пример сообщения, отправляемого клиентом серверу:
    Код (Text):
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://smev.gosuslugi.ru/rev120315" xmlns:ns2="http://samara.webservice.namespace">
    3.     <SOAP-ENV:Body>
    4.         <ns2:createRequestResponse>
    5.             <ns1:Message>
    6.                 <ns1:Sender>
    7.                     <ns1:Code>MNPR00063</ns1:Code>
    8.                 </ns1:Sender>
    9.             </ns1:Message>
    10.             <ns1:MessageData>
    11.                 <ns1:AppData>
    12.                     <ns2:response>
    13.                         <ns2:Status>1</ns2:Status>
    14.                     </ns2:response>
    15.                 </ns1:AppData>
    16.             </ns1:MessageData>
    17.         </ns2:createRequestResponse>
    18.     </SOAP-ENV:Body>
    19. </SOAP-ENV:Envelope>
    Особенность работы расширения - при отправке soap сообщения префиксы (ns1 и ns2 в примере) для пространства имён генерируются автоматически. Никак немогу найти способ их назвать так как мне надо.

    В таком виде хоть и работает, но не проходит ФЛК(форматно-логический контроль). А надо.

    На клиентской стороне этот вопрос решаем, т.к. есть у объекта SoapClient метод __doRequest - http://php.ru/manual/soapclient.dorequest.html
    В нем можно перехватить запрос к серверу и модифицировать xml'ку.

    А вот у объекта SoapServer на серверной стороне аналогичный метод отсутствует - http://php.ru/manual/class.soapserver.html. И ответы сервера уже не отредактировать аналогичным образом.

    Пока что приохожу к выводу что у данного расширения такой функционал отсутствует.
    Может что посоветуете.
    Вот здесь http://phpclub.ru/detail/article/soap еще список реализаций SOAP для PHP:
    PEAR::SOAP
    NuSOAP
    eZ SOAP

    Может пользовался кто?
    Есть ли там решение для вопроса?
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    не понял, что именно у тебя генерируется само? тебе должно быть пофигу какие именно байты шлются между клиентом и сервером. слава аллаху, процесс строго формализован и достаточно указать верный wsdl и подсунуть данные правильного типа.
     
  3. Sniker

    Sniker Новичок

    С нами с:
    18 июн 2013
    Сообщения:
    2
    Симпатии:
    0
    Сорри за задержку с ответом.

    Само у меня генерируется вот что: префиксы
    ns1 и ns2
    а надо чтобы они назывались, например
    prefix1 и prefix2

    Можно возразить: "Да какая разница.Главное чтобы данные доходили и всё работало"
    Но вот надо и всё тут, потому что
    На самом деле этот вопрос хоть и не решён, но уже не актуален. Заработало и так.
    (хотя все равно интересно, уже чисто торетически, возможно ли эти префиксы по-своему назвать)

    Теперь другой вопрос(ниже)

    Добавлено спустя 9 минут 10 секунд:
    Теперь вопрос про модификацию тэга body в soap-сообщении.
    (Нужно для добавления ЭЦП)

    Сейчас body выглядит так
    Код (Text):
    1. <SOAP-ENV:Body>
    а нужно чтобы вот так
    Код (Text):
    1. <SOAP-ENV:Body wsu:Id="body">
    Много инфы о том ЧТО надо сделать для добавления подписи в SOAP сообщение, но вот КАК это сделать...
    Такое ощущение что на PHP этим мало кто занимается.