xml — PHP: SoapClient больше не работает должным образом

Я не очень разбираюсь в PHP, но около месяца назад я написал скрипт для извлечения данных о событиях из веб-службы SOAP для отображения на цифровых вывесках. Несколько недель он работал нормально, но недавно сломался.

Вот соответствующий код PHP …

$WSDL_URL = 'http://anprodca.active.com/uofg/servlet/ActiveNetWS?wsdl';

$params = array(
"ws_system_user" => $credentials,
"resource_ids" => array(intval($facilityID)),
"dates" => $date,
"include_linked_resources" => 0,
"returning_render_customer_id" => 0
);

$soap = new SoapClient($WSDL_URL);
$response = $soap->wsGetResourceBookings($params);

… с $credentials содержащий userName, password, а также keepAlive значения в массиве.

Когда я получаю его, я получаю следующее сообщение об исключении: looks like we got no XML document, Я видел похожие посты в stackoverflow о проблемах с искаженными ответами из-за проблемных невидимых символов, но это не тот случай. Ответ от __getLastResponse() кажется HTML от перенаправления какого-то рода?


Я все еще могу получить желаемый результат, используя SoapUI. Ниже приведен пример XML, который он передает в запросе, сгенерированном из URL WSDL:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://ANWebServices/">
<SOAP-ENV:Body>
<ns1:wsGetResourceBookings>
<ws_system_user>
<keepAlive>false</keepAlive>
<password>password</password>
<userName>username</userName>
</ws_system_user>
<resource_ids>
<entries>27</entries>
</resource_ids>
<dates>09/25/2016</dates>
<include_linked_resources>0</include_linked_resources>
<returning_render_customer_id>0</returning_render_customer_id>
</ns1:wsGetResourceBookings>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Используя опцию трассировки и __getLastRequest() с SoapClient я получил следующий XML, который также работал нормально при передаче с SOAPUI …

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:anw="http://ANWebServices/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://ANWebServices/">
<soapenv:Header/>
<soapenv:Body>
<anw:wsGetResourceBookings>
<ws_system_user>
<keepAlive>false</keepAlive>
<password>password</password>
<userName>username</userName>
</ws_system_user>
<resource_ids>
<entries>27</entries>
</resource_ids>
<dates>09/25/2016</dates>
<include_linked_resources>0</include_linked_resources>
<returning_render_customer_id>0</returning_render_customer_id>
</anw:wsGetResourceBookings>
</soapenv:Body>
</soapenv:Envelope>

Я предположил, что WSDL файл изменился, но это не так.
Ничего на стороне сервера не изменилось, он все еще использовал ту же версию PHP с той же конфигурацией и т. Д. Я пытался отключить кэширование WSDL, а также библиотеку NuSoap, но безрезультатно. Я не могу понять, почему я не могу PHP получить правильный ответ с помощью SoapClient. Любое понимание будет оценено, спасибо!

1

Решение

Я смог решить эту проблему самостоятельно — просто опубликовал это на тот случай, если кто-нибудь столкнется с подобной проблемой.

В их файле WSDL указан неправильный URL-адрес конечной точки. Я просто должен был явно указать это с помощью __setLocation(), Теперь мой PHP выглядит примерно так:

...
$soap = new SoapClient($WSDL_URL);
$soap->__setLocation($WSDL_URL);
$response = $soap->wsGetResourceBookings($params);
...

1 линия исправлена ​​��

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]