web-dev-qa-db-fra.com

Impossible de se connecter à Magento SOAP API v2 en raison de "impossible de charger l'entité externe"

Je ne parviens pas à me connecter à l'API v2 de Magento SOAP à l'aide de PHP. L'erreur qui se produit est:

PHP Erreur irrécupérable: Exception SoapFault non capturée: [WSDL] SOAP-ERROR: Analyse de WSDL: Impossible de charger à partir de ' http://www.example.com/index.php/api./v2_soap/index/wsdl/1/ ': impossible de charger l'entité externe " http://www.example.com/index.php/api/v2_soap/index/wsdl/1/ "

Comme il semble, le fichier WSDL est en cours de chargement, mais le fichier externe SOAP qu’il ne contient pas.


Code de connexion PHP:

$client = new SoapClient('http://www.example.com/api/v2_soap?wsdl=1');
$session = $client->login('username', 'password');

Extrait de v2_soap? Wsdl = 1 fichier:

<service name="MagentoService">
    <port name="Mage_Api_Model_Server_V2_HandlerPort" binding="typens:Mage_Api_Model_Server_V2_HandlerBinding">
        <soap:address location="http://www.example.com/index.php/api/v2_soap/index/"/>
    </port>
</service>

La version de Magento est 1.5.1.0.

18
user228395

Ce problème est dû au fait que le serveur ne peut pas accéder au fichier à partir de la machine locale. La cause possible pourrait donc être le serveur DNS ou/etc/hosts, mais il s’agissait en fait d’un fichier .htaccess bloquant tous les hôtes, à l’exception de nos ordinateurs de développement. Cela a entraîné une erreur 403 Forbidden, qui a entraîné l'erreur SOAP et ainsi de suite.

7
user228395

J'ai récemment rencontré un problème similaire sur un serveur de développement public. Le problème était que j'utilisais un fichier .htaccess pour empêcher toute utilisation non autorisée du site et j'ai oublié d'ajouter les adresses IP du serveur à la liste. Une fois que je l'ai ajouté, cela a résolu le problème.

Assurez-vous de ne pas avoir de règles interdisant l'accès à votre contenu.

3
Francois Deschenes

Assurez-vous que php.ini active SSL. ajoutez ceci à votre fichier: extension = php_openssl.dll

J'ai eu ce problème et c'est ce qui l'a résolu.

1
Kelly L.

tl; dr: Vérifiez le nom d'utilisateur et la clé de l'API.

Malheureusement, SOAP vous envoie un message d'erreur générique qui pourrait avoir plusieurs conséquences.

Un des candidats possibles est un problème de routage, c’est-à-dire que le serveur essaie de s’envoyer une requête mais il échoue, peut-être parce qu’il utilise sa propre adresse IP publique et que cela ne fonctionne pas, pour des raisons.

Pour voir si tel est le cas sur votre serveur, connectez-vous dessus (par exemple avec SSH) et essayez d’envoyer une requête ping au nom d’hôte. Si le ping fonctionne, le routage n'est certainement pas le problème. Si la requête ping échoue, essayez d'ajouter le nom d'hôte dans votre fichier hôtes (généralement,/etc/hosts) avec l'adresse IP 127.0.0.1 (ou :: 1 si vous êtes amateur d'IPv6).

Mais une autre raison possible, que j'ai moi-même expérimentée récemment, est simplement que vous n'avez pas fourni le nom d'utilisateur et la clé d'API corrects. SOAP - du moins, la façon dont Magento l'implémente - ne semble pas avoir de réponse "accès refusé" ou "connexion échouée". Pour cette raison, il est impossible de tester les fonctions de l'API dans un navigateur. http://www.example.com/api/v2_soap?wsdl=1 fonctionne dans un navigateur, car le fichier WSDL n'est pas protégé par un mot de passe. Mais le noeud final lui-même est, donc http://www.example.com/index.php/api/v2_soap/index/ * échouera.

Une autre possibilité: avez-vous changé le nom de domaine de votre magasin récemment et ne pas vider les caches des "fichiers de configuration Webservices"?

1
Doug McLean

Êtes-vous sur un compte d'hébergement partagé? Il est possible que votre fournisseur bloque l'accès au port.

0
Jeff Thomas

Cette erreur peut également être liée aux chiffrements SSL que votre serveur est configuré pour utiliser. La suite de chiffrements recommandée actuellement (notez que ceux-ci devront être mis à jour à temps) est ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS.

Évidemment, vous devez suivre la procédure recommandée pour mettre à jour votre système d'exploitation et ses chiffrements SSL appropriés.


Si votre serveur exécute Plesk Control Panel à partir de la version 11, il existe un correctif particulier:

  1. Mettez à niveau le paquet 'openssl' vers la version 1.0 ou supérieure.

  2. Activer nginx:

    /usr/local/psa/admin/bin/nginxmng --enable

  3. Créez un modèle de domaine personnalisé pour nginx:

    mkdir -p /usr/local/psa/admin/conf/templates/custom/domain/

    cp /usr/local/psa/admin/conf/templates/default/domain/nginxDomainVirtualHost.php /usr/local/psa/admin/conf/templates/custom/domain

  4. Editez le fichier que vous venez de copier:

    vi /usr/local/psa/admin/conf/templates/custom/domain/nginxDomainVirtualHost.php

    Recherchez la ligne <?php if ($OPT['ssl']): ?> et insérez ce qui suit immédiatement après:

    ssl_protocols TLSv1.1 TLSv1.2; ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;

    Enregistrez le fichier.

  5. Reconfigurer les hôtes virtuels.

    /usr/local/psa/admin/bin/httpdmng --reconfigure-all


Crédit: Ce correctif est documenté par Odin directement: http://kb.odin.com/fr/120083

0
Jongosi

Allez dans Tableau de bord d'administration> système> configuration> Web> Optimisation des moteurs de recherche> Utiliser la réécriture du serveur Web "Définissez-la sur Non".

Pour moi, c'était le correctif.

0
Devendra Gupta

Je voulais contribuer ce qui suit, en fonction du serveur et de la configuration de Magento, cette solution simple peut fonctionner. est d'ajouter l'index.php à l'URL

$ client = new SoapClient (' https://www.TU-domain.com/index.php/api/v2_soap/?wsdl ');

0
Gregory Rios