2012-06-18 8 views
16

W PHP: Otrzymuję błąd:SOAP BŁĄD: Przetwarzanie WSDL: Nie można załadować z <URL>

SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://xxx.xxxx.asmx?WSDL' : 
failed to load external entity "http://xxx.xxxx.asmx?WSDL" 

mojego kodu jest:

<?php 
header('Content-Type: text/plain'); 
    if (!class_exists('SoapClient')) 
{ 

     die ("You haven't installed the PHP-Soap module."); 

} 

ini_set('max_execution_time',1); 
     try { 
      $options = array(
       'soap_version'=>SOAP_1_2, 
       'exceptions'=>true, 
       'trace'=>1, 
       'cache_wsdl'=>WSDL_CACHE_NONE 
      ); 
      $client = new SoapClient('http://xxx.xxxx.asmx?WSDL', $options); 
// Note where 'CreateIncident' and 'request' tags are in the XML 
      $results = $client->CreateIncident(
        array(
         'FirstName'=>'gyaan', 
         'LastName'=>'p', 
         'Email'=>'[email protected]', 
         'QueryProductClass'=>'QueryProductClass', 
         'ChannelCode'=>12, 
         'CampaignCode'=>234, 
         'Lob'=>'Lob', 
         'PackageName'=>'SEONI', 
         'PackageCode'=>'SMP', 
         'TravelYear'=>2012, 
         'TravelMonth'=>06, 
         'TravelDay'=>29, 
         'CityOfResidence'=>'Jabalpur', 
         'ncidentNotes'=>'testing ignor this', 
         'MobilePhone'=>'1234567890', 
         'DepartureCity'=>'bangalore', 
         'NoOfDaysTravel'=>'3 Days', 
         'VendorName'=>'TEST HIQ' 
         ) 
        ); 
     } catch (Exception $e) { 
      echo "<h2>Exception Error!</h2>"; 
      echo $e->getMessage(); 
     } 


?> 

Proszę mi powiedzieć, gdzie robię błąd Jestem nowy w WSDL i soap

Odpowiedz

4

Miałem dokładnie ten sam komunikat o błędzie. W moim przypadku wpis w pliku /etc/hosts (na serwerze obsługującym usługę) dla serwera docelowego wymienionego w pliku WSDL rozwiązał ten problem.

Trochę dziwnie sformułowany komunikat o błędzie ..

+0

Dzięki, człowiek za tę odpowiedź. Nie mam pojęcia, dlaczego nikt inny nie opublikował podobnego rozwiązania problemu jak Ty, ale spędziłem wiele godzin na znalezieniu tego dokładnego rozwiązania i prawdopodobnie zaoszczędziłeś dla mnie kilka bardziej bezużytecznych godzin badań. –

1

dodać wpis DNS dla hostów systemu plików
na przykład: http: //aaa.com/service.asmx WSDL
można uzyskać aaa.com adres IP z ping
a następnie dodać do pliku hosts

28

Rozwiązałem to w mojej konfiguracji WAMP umożliwiając rozszerzenie php_openssl, ponieważ URL byłem ładowania od stosowanego https://.

+13

Dla mnie jest włączony i nadal nie ma wyniku !!! – Abadis

4

Jeśli chcesz użyć tego na localhost, użyj WAMP.

Następnie kliknij na ikonę w zasobniku> PHP Usługi> i tam włączyć poniższych:

  • SOAP
  • php_openssl
  • openssl
  • curl

p.s. niektóre darmowe hostingi internetowe mogą nie mieć tych opcji:

+2

co jest innego? openssl vs php_openssl –

6

Miałem ten problem i zajęło mi godziny, aby dowiedzieć się. Główną przyczyną tego błędu jest to, że SoapClient nie może przesyłać strumieniowo pliku usługi WWW z hosta. Odkomentowałem ten wiersz "extension = php_openssl.dll" w moim pliku php.ini i to działa.

0

Podobny błąd również. Zrozumiałem, że miałem konfigurację .htpasswd dla konkretnego hosta. Odkomentowałem go z pliku .htaccess i działałem dobrze.

1

Włącz wszystko od php.ini pliku konfiguracyjnego

extension=php_openssl.dll 
extension=php_curl.dll 
extension=php_xmlrpc.dll 
2

Spróbuj dodać ten kawałek kodu. To zadziałało dla mnie.

$opts = array(
 
    'ssl' => array('ciphers'=>'RC4-SHA', 'verify_peer'=>false, 'verify_peer_name'=>false) 
 
); 
 
// SOAP 1.2 client 
 
$params = array ('encoding' => 'UTF-8', 'verifypeer' => false, 'verifyhost' => false, 'soap_version' => SOAP_1_2, 'trace' => 1, 'exceptions' => 1, "connection_timeout" => 180, 'stream_context' => stream_context_create($opts)); 
 
$url = "http://www.webservicex.net/globalweather.asmx?WSDL"; 
 

 
try{ 
 
\t $client = new SoapClient($url,$params); 
 
} 
 
catch(SoapFault $fault) { 
 
\t echo '<br>'.$fault; 
 
}

+0

Te opcje wyłączają funkcje zabezpieczeń HTTPS ... generalnie nie jest to dobry pomysł. –

+0

dodanie opcji szyfrowania w kontekście ssl rozwiązało dla mnie ten sam problem. Dziękuję Ci! – Kambaa

0

mam ten sam błąd

Could not connect to the Magento WebService API: SOAP-ERROR: Parsing WSDL: Couldn't load from 'example.com/api/soap/?wsdl' : failed to load external entity "example.com/api/soap/?wsdl"

i mój problem został rozwiązany raz zaktualizować Magento Korzeń URL do

example.com/index.php/api/soap/?wsdl

Tak mi brakuje indeksu .php, który powoduje błąd.

2

mam ten sam błąd i rozwiązał go szuka ustawieniach mydła w pliku php.ini i zmieniając soap.wsdl_cache_enabled = 1 do soap.wsdl_cache_enabled = 0

+0

Mam ten sam błąd i to działało dla mnie ... Miałem problemy z moim połączeniem i php zostało prawdopodobnie zapisane w pamięci podręcznej. –

5

Spróbuj tego:

$Wsdl = 'http://xxxx.xxx.xx/webservice3.asmx?WSDL'; 
libxml_disable_entity_loader(false); //adding this worked for me 
$Client = new SoapClient($Wsdl); 
//Code... 
0

Jak wspomniano we wcześniejszych odpowiedziach, ten błąd może wystąpić podczas interakcji z usługą SOAP przez połączenie HTTPS, a problem jest identyfikowany z połączeniem. Problem może być na zdalnym końcu (nieprawidłowy certyfikat) lub na kliencie (w przypadku brakujących plików CA lub PEM). Zobacz wszystkie dostępne ustawienia kontekstu SSL: http://php.net/manual/en/context.ssl.php. W moim przypadku ustawienie ścieżki do mojego lokalnego certyfikatu rozwiązało problem:

$context = ['ssl' => [ 
    'local_cert' => '/path/to/pem/file', 
]]; 

$params = [ 
    'soap_version' => SOAP_1_2, 
    'trace' => 1, 
    'exceptions' => 1, 
    'connection_timeout' => 180, 
    'stream_context' => stream_context_create($context), 
    'cache_wsdl' => WSDL_CACHE_NONE, // eliminate possible issue from cached wsdl 
]; 

$client = new SoapClient('https://remoteservice/wsdl', $params); 
Powiązane problemy