URL-адрес веб-службы в SoapClient и SOAP-ERROR: ошибка синтаксического анализа WSDL

0

Существует URL-адрес веб-службы, который возвращает данные о городах страны. Я могу получить доступ к этому URL-адресу веб-службы в браузере с помощью прямого запроса Http с использованием метода GET и прекрасно работает:

[Снип: я изменил свое фактическое имя домена с example ]

http://alpha.example.com/WSV2/StaticData.php?xml=<StaticDataRequest><Header><Code>TT4533</Code><Username>skyman211</Username><Password>ammkj43</Password></Header><Body><GetStaticData>cities</GetStaticData><ExtraParams><CountryCode>67</CountryCode></ExtraParams></Body></StaticDataRequest>

Но когда я пытаюсь получить доступ к вышеуказанному URL через SoapClient:

/* Line 36 */
$cities = new SoapClient("http://alpha.example.com/WSV2/StaticData.php?xml=<StaticDataRequest><Header><Code>TT4533</Code><Username>skyman211</Username><Password>ammkj43</Password></Header><Body><GetStaticData>cities</GetStaticData><ExtraParams><CountryCode>67</CountryCode></ExtraParams></Body></StaticDataRequest>");

Получает следующую ошибку:

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL:
Couldn't find <definitions> in 'http://alpha.example.com/WSV2/StaticData.php?xml=
<StaticDataRequest><Header><Code>TT4533</Code><Username>skyman211</Username>
<Password>ammkj43</Password></Header><Body><GetStaticData>cities</GetStaticData>
<ExtraParams><CountryCode>67</CountryCode></ExtraParams></Body></StaticDataRequest>'
in /srv/www/htdocs/test/inc/client.php:36 Stack trace: #0 /srv/www/htdocs/test/
inc/client.php(36): SoapClient->SoapClient('http://alpha.ex...') #1 /srv/www/
htdocs/ortmas/index.php(6): InitData->getCities(67) #2 {main} thrown in /srv/
www/htdocs/test/inc/client.php on line 36
  • 0
    Возвращает ли вызов GET действительный документ WSDL? Ошибка совершенно ясна: Couldn't find <definitions> in...
  • 0
    Да. Get call возвращает действительный документ WSDL.
Показать ещё 3 комментария
Теги:
soap
web-services

1 ответ

2
Лучший ответ

Вы должны передать URL-адрес WSDL вместо фактического вызова.

Что-то вроде этого, например:

$ cities = новый SoapClient (" http://alpha.example.com/WSV2/StaticData.wsdl ");

Если этот URL-адрес работал в вашем браузере, вы можете попробовать сделать следующее в PHP:

$url = "http://alpha.example.com/WSV2/StaticData.php?xml=<StaticDataRequest><Header><Code>TT4533</Code><Username>skyman211</Username><Password>ammkj43</Password></Header><Body><GetStaticData>cities</GetStaticData><ExtraParams><CountryCode>67</CountryCode></ExtraParams></Body></StaticDataRequest>";  

$data = file_get_contents($url);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню