Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

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, меньше сотни строк. Так и живём.

11 комментариев
gaius-julius.livejournal.com 2008

если в итоге получилось на голом курле+хмл, то зачем изначально было брать навороченный соап? Есть же, например, XML-RPC.

Правда, в большинство его реализаций на php внутрь тоже лучше не заглядывать (для сохранения душевного равновесия)

Евгений Степанищев (bolknote.ru) 2008

Комментарий для gaius-julius.livejournal.com:

Из «голого Curl+XML» я как раз SOAP и сделал. SOAP — XML-протокол поверх HTTP (в нашем случае — HTTPS с сертификатом).

Артём Курапов (kurapov.name) 2008

’trace’ => 1 с отслеживанием xml ответов не помогает?

Евгений Степанищев (bolknote.ru) 2008

Комментарий для kurapov.name:

Включено, без этого вообще труба была бы. Не помогает.

melash.livejournal.com 2008

Вот тут пример работы SOAP между perl и php:
http://sonettic.com.ua/max/perl-php-soap.htm

Выложил специально, как-то не получилось сюда написать.

Евгений Степанищев (bolknote.ru) 2008

Комментарий для melash.livejournal.com:

Perl-скрипт делают другие люди.

Сейчас мы договорились вообще убрать SOAP, используем REST + WDDX.

gaius-julius.livejournal.com 2008

весь soap в 100 строк пхп? круто.

Евгений Степанищев (bolknote.ru) 2008

Комментарий для gaius-julius.livejournal.com:

Он не весь, сильно упрощён, нам же под конкретные задачи.

gaius-julius.livejournal.com 2008

Комментарий для Евгения Степанищева:

а, ну под конкретные-то ладно.

norguhtar.livejournal.com 2009

Как выяснилось PHP SOAP делала ключница :)

Для того чтобы SOAP::Lite заработал надо добавить перед вызовом методов с сервера, выставить префиксы которые понимает PHP SOAP:
$service->envprefix(’SOAP-ENV’);

После чего эта зараза таки начинает работать.

melloist.ya.ru 2009

Для того чтобы SOAP::Lite заработал надо добавить перед вызовом методов с сервера, выставить префиксы которые понимает PHP SOAP:
$service->envprefix(’SOAP-ENV’);

Вот за это огромнейшее спасибо! (почти со слезами на глазах)
Три дня головой об стену бился гадая почему не работает ничего :)