PHP SOAP
Что-то одно PHP SOAP или Perl SOAP::Lite — делала ключница. Простая задача: общаются две программы, клиент на PHP, используется модуль SOAP и сервер на Perl, используется SOAP::Lite.
В режиме XML-RPC Perl отвечает «Неверная версия» (SOAP::Lite поддерживает только 1.1), попытки установить версию со стороны PHP (есть специальные константы SOAP_1_1 и SOAP_1_2) ни к чему не приводят, в режиме document ещё хуже — PHP начинает плеваться совершенно невразумительными сообщениями об ошибках из разряда «моя нога кефир валяться», т. е. все слова знакомые, но что бы это значило… Мануал ничего не проясняет, интернет молчит, примеры из руководства не работают. Шаманскими плясками (например, я нашёл в исходниках параметр soap_action) удалось заставить PHP замолчать, но тут уже возмущается Perl — говорит, что доступ к методу запрещён.
Есть ещё nuSOAP (написанный на чистом PHP), но этот монстр занимает более полуметра. В общем, выкинул всё, взял cURL и SimpleXML. Сам запрос — 40 строк, ещё примерно столько же — разбор ответа через SimpleXML, меньше сотни строк. Так и живём.
если в итоге получилось на голом курле+хмл, то зачем изначально было брать навороченный соап? Есть же, например, XML-RPC.
Правда, в большинство его реализаций на php внутрь тоже лучше не заглядывать (для сохранения душевного равновесия)
Комментарий для gaius-julius.livejournal.com:
Из «голого Curl+XML» я как раз SOAP и сделал. SOAP — XML-протокол поверх HTTP (в нашем случае — HTTPS с сертификатом).
’trace’ => 1 с отслеживанием xml ответов не помогает?
Комментарий для kurapov.name:
Включено, без этого вообще труба была бы. Не помогает.
Вот тут пример работы SOAP между perl и php:
http://sonettic.com.ua/max/perl-php-soap.htm
Выложил специально, как-то не получилось сюда написать.
Комментарий для melash.livejournal.com:
Perl-скрипт делают другие люди.
Сейчас мы договорились вообще убрать SOAP, используем REST + WDDX.
весь soap в 100 строк пхп? круто.
Комментарий для gaius-julius.livejournal.com:
Он не весь, сильно упрощён, нам же под конкретные задачи.
Комментарий для Евгения Степанищева:
а, ну под конкретные-то ладно.
Как выяснилось PHP SOAP делала ключница :)
Для того чтобы SOAP::Lite заработал надо добавить перед вызовом методов с сервера, выставить префиксы которые понимает PHP SOAP:
$service->envprefix(’SOAP-ENV’);
После чего эта зараза таки начинает работать.
Для того чтобы SOAP::Lite заработал надо добавить перед вызовом методов с сервера, выставить префиксы которые понимает PHP SOAP:
$service->envprefix(’SOAP-ENV’);
Вот за это огромнейшее спасибо! (почти со слезами на глазах)
Три дня головой об стену бился гадая почему не работает ничего :)