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
.
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.
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.
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.
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"?
Êtes-vous sur un compte d'hébergement partagé? Il est possible que votre fournisseur bloque l'accès au port.
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:
Mettez à niveau le paquet 'openssl' vers la version 1.0 ou supérieure.
Activer nginx:
/usr/local/psa/admin/bin/nginxmng --enable
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
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.
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
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.
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 ');