Pavel_Osipov
@Pavel_Osipov
Программист, в основном web

PHP проблема с запросом к SOAP сервису

Привет народ!
Такая проблема. Есть некий удалённый WSDL сервис, требуется выполнить одну его функцию.

ini_set('soap.wsdl_cache_enabled', 0);
ini_set('soap.wsdl_cache_ttl',0);

$client = new SoapClient() коннектится;

print_r( $client->__getFunctions() ); выводит все доступные функции, в частности ту, которую нужно вызвать:
Array ( [0] =>… [3] => string create(string $label, string $sender, ArrayOfString $data) )

Формирую массив data
$data_param = array( 'str 1', 'str 2' );

При попытке вызова
$results = $client->create( «Label here», «Sender», $data_param );
получаю
Fatal error: Uncaught SoapFault exception: [HTTP] Could not connect to host
Получается для получения списка функций он подрубится может, а для выполнения запроса нет.

Пробовал иначе вызывать функцию, всё без толку:
$results = $client->__SoapCall('create', «Label here», «Sender», array('parameters' => $data_param));
$results = $client->__SoapCall('create', «Label here», «Sender», $data_param);
$results = $client->__SoapCall('create', array( 'parameters' => array(«Label here», «Sender», $data_param ) ) );

Также пробовал увеличить `default_socket_timeout`
ini_set('default_socket_timeout',820);
без толку.

Общение с другим сервисом происходит нормально, т.е. на сервере с SOAP функциями всё вроде как нормально.

Подскажите, куда копать.

Заранее спасибо!
  • Вопрос задан
  • 17202 просмотра
Пригласить эксперта
Ответы на вопрос 2
Pavel_Osipov
@Pavel_Osipov Автор вопроса
Программист, в основном web
ОК. Оказалось, что URL описания сервиса, к которому коннектимся в $client = new SoapClient( URL?WSDL ) отличается от того, с которым надо работать. Для такого случая у конструктора SoapClient есть второй параметр, в котором можно передать ассоциативный массив, и в частности «location»

$client = new SoapClient(
'URL?WSDL',
array(
«location» => «URL»
)
);

Такие делы :)
Ответ написан
@SuperKozel
у меня была похожая проблема, но было наоборот. В кривом wsdl для действий был указан локальный ip
<wsdl:port name=«VersionHttpSoap12Endpoint» binding=«ns:VersionSoap12Binding»>
<soap12:address location=«192.168.0.1:8080/axis2/services/Version.VersionHttpSoap12Endpoint»/>
</wsdl:port>
типа такого
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы