2017-06-27 1 views
0

J'ai un problème avec SoapClient (PHP 7.0) pour analyser wsdl.Erreur SOAP - Analyse WSDL dans SSLv3

Im obtenir cette erreur:

SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://ws.ocasa.com/testecommerce/service.asmx?wsdl' : failed to load external entity "https://ws.ocasa.com/testecommerce/service.asmx?wsdl" 

Si vous mettez cette URL dans un navigateur, vous pouvez voir le SOAP, et aussi dans SoapUI il fonctionne OK.

J'utilise Laravel 5.4, et mon code est:

$client = new \SoapClient('https://ws.ocasa.com/testecommerce/service.asmx?wsdl', 
     ['soap_version'=>SOAP_1_2]); 

J'ai remarqué que ce site est sous SSLv3. Afin de comprendre quel est le problème, j'ai aussi remarqué que je ne peux pas obtenir le contenu du WSDL:

 $content = file_get_contents('https://ws.ocasa.com/testecommerce/service.asmx?wsdl'); 

Et je reçois cette erreur

file_get_contents(): Failed to enable crypto 

Je ne sais pas si son quelque chose mon PHP.ini. Mais si je change d'autre WSDL:

https://id3check.gb.co.uk/gbportalinternational/aspx/id3check_1b.asmx?WSDL 

Tout fonctionne bien, l'analyse et l'obtention du contenu.

Merci

+0

double possible de [Comment obtenir le fichier \ _get \ _contents() pour travailler avec HTTPS?] (Https: //stackoverflow.com/questions/1975461/how-to-get-file-get-contents-to-work-with-https) – Capsule

+0

Merci d'avoir essayé de nous aider! Je modifie mon post, de sorte que vous pouvez voir que mon problème n'est pas que je ne peux pas obtenir le contenu du wsdl, c'est que mon SoapClient ne fonctionne pas avec ce WSDL. Dans le post que vous m'avez envoyé, explique comment obtenir le contenu d'une manière différente, mon idée était de donner plus d'informations sur ma situation, afin que quelqu'un puisse peut-être comprendre ce qui se passe. Merci Capsule! :) –

+0

Non, votre problème est que PHP ne peut pas obtenir le contenu de ce serveur à cause de SSLv3 (éventuellement). Cela n'a rien à voir avec SoapClient. 'file_get_contents(): Impossible d'activer crypto' est clair. Essayer quelque chose comme https://stackoverflow.com/questions/14078182/openssl-file-get-contents-failed-to-enable-crypto et voir si cela aide – Capsule

Répondre

0

Je résolu le problème en ajoutant des paramètres en option SSL:

$wurl = 'https://ws.ocasa.com/testecommerce/service.asmx?wsdl'; 
$opts = array(
      'ssl' => array('ciphers' => 'RC4-SHA') 
     ); 
$this->soapClient = new SoapClient($wurl, array('trace' => 1, 
      'exception' => 1, 'soap_version' => SOAP_1_2, 'connection_timeout' => 60, 'stream_context' => stream_context_create($opts)));