Видеокодер, который мне нужно запросить у PHP для проверки состояния и настроек, обеспечивает интерфейс SOAP.
Поставщик предоставляет файл WSDL, который включает в себя 15 схем с schemaLocation
именование внешних URL. XSD-файлы также предоставляются поставщиком.
Поскольку система должна работать без общедоступного подключения к Интернету, я изменил весь импорт, чтобы он указывал на локальный URL, например
http://localhost/path_to_schemas/xml.xsd
http://localhost/path_to_schemas/settings.xsd
http://localhost/path_to_schemas/inputs.xsd
и так далее
Как мне использовать PHP SoapClient
запросить кодировщик (и), используя локальный WSDL и схемы? Не могу найти никаких подсказок в документации PHP или в другом месте онлайн. В большинстве примеров предполагается, что файл WSDL будет находиться на запрашиваемом устройстве, а в этом случае его нет.
Поэтому я попытался указать WSDL в качестве локального хоста и указать в параметрах целевой компьютер и пространство имен:
$options = array("location" => "192.168.2.161", "uri" => "http://www.appeartv.com/automation/v1");
$sp = new SoapClient("http://localhost/visor/options/optAppearControl/webgui/be/atvSoapSchema/ATV.wsdl", $options);
$result = $sp->getModuleList();
Тем не менее, это не с исключением «Невозможно разобрать URL» на getModuleList()
линия.
Apache error_log:
[Sat Nov 10 06:55:05 2018] [error] [client 192.168.2.10]
PHP Fatal error: Uncaught SoapFault exception: [HTTP] Unable to parse URL
in /usr/local/webgui/be/testSoap.php:16
Stack trace:
#0 [internal function]: SoapClient->__doRequest('<?xml version="...', '192.168.2.161', 'getModuleList', 1, 0)
#1 /usr/local/webgui/be/testSoap.php(16): SoapClient->__call('getModuleList', Array)
#2 /usr/local/webgui/be/testSoap.php(16): SoapClient->getModuleList()
#3 {main}
thrown in /usr/local/webgui/be/testSoap.php on line 16
Какой URL не может быть проанализирован?
PHP документы скажи это:
место нахождения URL-адрес сервера SOAP, на который отправляется запрос, и URI
является целевым пространством имен службы SOAP
Я немного запутался в том, что uri
должен быть установлен в. «Целевое пространство имен» в файлах xsd и wsdl показывает:
<?xml version="1.0" encoding="UTF-8"?>
<definitions
xmlns="http://schemas.xmlsoap.org/wsdl/"xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"xmlns:tns="http://www.appeartv.com/automation/v1/wsdl"xmlns:atv="http://www.appeartv.com/automation/v1"name="AppearTV_Automation"targetNamespace="http://www.appeartv.com/automation/v1/wsdl">
<types>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace="http://www.appeartv.com/automation/v1"schemaLocation="http://localhost/visor/options/optAppearControl/webgui/be/atvSoapSchema/automationInterface.xsd" />
</schema>
</types>
<!-- system.xsd -->
<message name="getModuleList">
<part name="foo" element="atv:getModuleList"/>
</message>
and so on...
Так и целевое пространство имен atv
(используется в файлах xsd) или http://www.appeartv.com/automation/v1/wsdl
(как показано в файле wsdl) или http://www.appeartv.com/automation/v1
(как показано в файлах xsd)
Я перепробовал все, но все показывают одно и то же сообщение об ошибке.
Задача ещё не решена.
Других решений пока нет …