SOAP-ERROR Клиент: Анализ на WSDL с грешка при удостоверяване

Опитвам се да кодирам моя PHP Client Soap, който консумира ASP.Net уеб услуга, защитена с удостоверяване. Моят php код е:

<?php
ini_set("soap.wsdl_cache_enabled", "0");  
try {
    $client = new SoapClient("https://www.webservicexxx.com:60443/service.asmx?WSDL", array('location' => 'https://webservicexxxcom:60443/service.asmx',
          'login' => "myLogin", 'password' => "myPAssword")); 
} catch (SoapFault $e) {
    echo $e;
}?>

Получавам това съобщение за грешка:

 SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://www.webservicexxx.com:60443/service.asmx?WSDL' : failed to load external entity "https://www.webservicexx.com:60443/service.asmx?WSDL" in /var/www/webservice2/soap-client.php:5 Stack trace: #0 /var/www/webservice2/soap-client.php(5): SoapClient->SoapClient('https://www.web...', Array) #1 {main}

знаейки, че съм задал разрешаване на тези разширения на моя php.ini на сървъра на ubuntu:

extension = php_openssl.dll
extension = php_soap.dll
extension = php_curl.dll

и когато се опитвам да анализирам друга php уеб услуга на същия сървър с удостоверяване, тя работи:

try { 
    $client = new SoapClient("https://xx.xx.xx.xx:443/webservice1/notificationManager.wsdl", array('location' => 'http://xx.xx.xx.xx./webservice1/soap-server.php',
          'login' => "myLogin", 'password' => "myPass")); 
} catch (SoapFault $exception) { 
    echo $exception;       
} 

Защо не мога да получа отговор от първата уеб услуга?


person Saad Lamarti    schedule 02.11.2012    source източник
comment
просто копирайте и поставете url към wsdl във вашия браузър, за да видите дали виждате wsdl. Правейки това, ние сме сигурни, че няма проблем с връзката.   -  person slash28cu    schedule 02.11.2012
comment
Файлът wsdl https://www.webservicexx.com:60443/service.asmx?WSDL е достъпен чрез интернет браузър и изисква удостоверяване.   -  person Saad Lamarti    schedule 02.11.2012


Отговори (2)


Реших това с помощта на nusoap.

$params = array(
  "param" => "value"
);

$soap_client = new nusoap_client($wsdl_url, true);
$soap_client->setCredentials(USER_SERVICE, PASS_SERVICE, 'basic');
$soap_client->soap_defencoding = 'UTF-8'; //Fix encode erro, if you need
$soap_return = $soap_client->call("method_name", $params);
person Liko    schedule 02.02.2015

Защо не мога да получа отговор от първата уеб услуга?

Тъй като не успя да зареди външен обект

https://www.webservicexx.com:60443/service.asmx?WSDL

Уверете се, че WSDL е достъпен и достъпен от SoapClient на PHP и вече не би трябвало да имате проблема.

Редактиране: Според вашите коментари WSDL URL изисква HTTP удостоверяване. SoapClient на PHP поддържа този вид удостоверяване само с крайната точка на сапун, но не с WSDL http заявката. Ето защо виждате грешката, че е неуспешно. Това е свързано с:

Решението е да поискате собствен WSDL файл и да посочите SoapClient към негово копие. Вижте свързания въпрос за повече информация.

person hakre    schedule 02.11.2012
comment
Уеб услугата https://www.webservicexx.com:60443/service.asmx?WSDL е достъпна през всеки навигатор и изисква влизане и парола за достъп до wsdl файла. Не знам дали трябва да конфигурирам сървъра си или да се свържа с доставчика на уеб услугата?? - person Saad Lamarti; 02.11.2012
comment
С навигатор предполагам, че имате предвид вашия интернет браузър, нали? Ако изисква потребителско име и парола, това означава, че използва HTTP удостоверяване (Основно удостоверяване). Моля, вижте WSDL към PHP с основно удостоверяване, което вероятно е следващият въпрос, който имате сега. - person hakre; 02.11.2012
comment
Все още получавам грешка при неуспешно зареждане на външен обект при използване на основни методи за удостоверяване, пробвах го преди. Мислите ли, че трябва да конфигурирам нещо на сървъра на ubuntu? или трябва да се свържа с доставчика на уеб услугата? - person Saad Lamarti; 02.11.2012
comment
Опитах се да разреша проблема си, използвайки следните методи: http://fr2.php.net/manual/en/soapclient.soapclient.php#101503 и https://bugs.php.net/bug.php?id=27777 ! Все още имам същия проблем - person Saad Lamarti; 02.11.2012
comment
Проблемът не е в доставчика на уеб услугата. Проблемът е, че SoapClient на PHP не може да зареди WSDL с основно удостоверяване. Проблемът може да бъде разрешен само ако първо запишете WSDL на вашия диск и след това го предоставите чрез WSDL URI, който SoapClient може да зареди. Потребителски коментар 101503 показва начин как да направите това. Мога да си представя, че има други начини как да направите това, но те са подобни на това, което вече беше очертано, така че не знам коя информация пропускате. - person hakre; 02.11.2012