Что-то одно 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, меньше сотни строк. Так и живём.
Комментарии 11
Правда, в большинство его реализаций на php внутрь тоже лучше не заглядывать (для сохранения душевного равновесия)
http://sonettic.com.ua/max/perl-php-soap.htm
Выложил специально,
Сейчас мы договорились вообще убрать SOAP, используем REST + WDDX.
Он не весь, сильно упрощён, нам же под конкретные задачи.
а, ну под
Для того чтобы SOAP::Lite заработал надо добавить перед вызовом методов с сервера, выставить префиксы которые понимает PHP SOAP:
$service->envprefix('SOAP-ENV');
После чего эта зараза таки начинает работать.
$service->envprefix('SOAP-ENV');
Вот за это огромнейшее спасибо! (почти со слезами на глазах)
Три дня головой об стену бился гадая почему не работает ничего :)