Рецепт разбора SOAP ответа

Проблема: бывает так, что при вызове soap, ответ на стороне клиента не собирается в объект, это может быть и из-за wsdl или из-за неверного ответа от сервер.

Решение: распарсить ответ от сервере как XML

// выполняем функцию SOAP
$response = $this->client->__soapCall("getParam", $param);

// костыль, так как первый response ничего не вернул, будем тупо парсить  XML ответ
$response = $this->client->__getLastResponse();

// xml парсеру не нравится тег с неймспейсами, вырезаем их
$response = str_ireplace(array('soapenv:', 'tem:', 'SOAP-ENV:', 'rpc:'), '', $response);
$xml = simplexml_load_string($response, "SimpleXMLElement", LIBXML_NOCDATA);

$json = json_encode($xml);
$arrayResponse = json_decode($json,TRUE);

Если есть ошибка при разборе, можно поиграть с параметрами

$xml = simplexml_load_string($response, «SimpleXMLElement», LIBXML_COMPACT | LIBXML_PARSEHUGE);

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>