PHP и SOAP HELP!

Здравствуйте хабрчане.

Сегодня впервые пришлось работать с SOAP.
В принципе почитал немного на эту тему, боле или менее понятно.

Но реализовать так и не смог. А именно не понятно какие параметры передаются в методы.

Имеется файл WSDL и описание его типов

Приблизительно как поднять SoapServer я понял, но так как мне нужно знать какие данные передаются ему мне необходимо было поднять и клиент, но тут пришел в тупик, так как я никогда в жизни не использовал SOAP не понял какие параметры нужно передавать в


$client = new SoapClient("soap.wsdl", array("trace"=>true));
print($client->PerformTransaction());



Что бы я в него не передавал вызывается ошибка:


Fatal error: Uncaught SoapFault exception: [Client] looks like we got no XML document in F:\AppServ\www\soap\client.php:9
Stack trace:
#0 [internal function]: SoapClient->__call('PerformTransact...', Array)
#1 F:\AppServ\www\soap\client.php(9): SoapClient->PerformTransaction()
#2 C:\Program Files\Zend\ZendStudio-5.5.1\bin\php5\dummy.php(1): include('F:\AppServ\www\...')
#3 {main}
thrown in F:\AppServ\www\soap\client.php on line 9
Помогите пожалуйста люди добрые. Гугление на эту тему практически ни к чему не привело, на вас последняя надежда.

Мне бы оттолкнуться а дальше я сам.

Заранее весьма благодарен.

P.S. Документация от поставщика услуг (платежный терминал) тоже ничего путевого не дала. У них блин даже примера реализации нет!
  • Вопрос задан
  • 11664 просмотра
Пригласить эксперта
Ответы на вопрос 5
taliban
@taliban
php программист
ua2.php.net/manual/ru/soapclient.construct.php
public SoapClient::SoapClient ( mixed $wsdl [, array $options ] ) // обратите внимание на первый параметр — это валидный xml для соап. По сути он должен быть идентичным с тем который обрабатывает сервер.
Судя по ошибке именно его Вы и не отдаете, либо он испорчен, либо путь неправильный.
Ответ написан
@CapAsder
Предлагаю вариант решения, что помог мне:
ob_clean();
$server = new SoapServer('./wsdl/wsdl.wsdl');
$server->setClass('ApiService');
$server->handle();

Поясню. Перед инициализацией вашего SoapServer очищаем содержимое командой ob_clean();
Ответ написан
blo
@blo
инженер-программист
@galaxy
Disclaimer: тоже не особо работал с мылом

Куда у вас клиент посылает запрос? У них в WSDL написано: <soap:address location="http://127.0.0.1/soap/server.php"/>

А куда реально слать, они Вам выдают при подключении, как я понял.

Т.о. надо либо исправить wsdl (подставить адрес своего тестового SOAP сервера или получить у них), или передать опцию location.
Ответ написан
mekegi
@mekegi
Была такая же проблема на одном из серверов — пол дня ломали голову пытаясь найти причину в конечном итоге бага была в том при сборке пыха указали какой то флаг который отвечает за работу file_get_contents. Дело в том что конструктор класса SoapClient внутри себя делает вызов аналогичный file_get_contents, ну а там где последний не работает не будет работать и соап.
Как вариант чтобы протестировать положите на какой нибудь удаленный хостинг и пропишите в new SoapClient('http://bla-bla.tld/some.wsdl') если через удаленный файл все работает значит проблема с file_get_content
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы