Erreur SOAP: analyse WSDL: impossible de charger à partir de «» n'a pas pu charger l'entité externe

9

entrez la description de l'image ici

Nous développons une application Android pour un site magento. Nous devons passer l'API SOAP de magento à android pour obtenir l'identifiant de session.

Nous avons créé l'utilisateur Web SOAP et les rôles dans le panneau d'administration de magento en suivant ce lien:

https://www.yireo.com/tutorials/magebridge/administration/596-step-by-step-create-a-magento-api-user

Lorsque nous essayons de nous connecter d'Android à Magento, nous obtenons une erreur. Voici le lien que nous utilisons:

http://videomergerapp.com/index.php/api/v2_soap/

Bébé à Magento
la source
1
Bonjour - Je ne vois pas l'erreur sur le lien que vous avez fourni; il indique vers le bas pour l'entretien.
Garet Claborn
salut, désolé que le site soit en maintenance, veuillez vérifier la question mise à jour.
Bébé à Magento le
1
Avez-vous essayé les étapes de ma question précédente? Cela ressemble à la même erreur que celle que j'ai eue, causée par les paramètres de pare-feu et NAT pour mon serveur.
Garet Claborn
1
Lorsque magento essaie d'obtenir des ressources, il se fait plus de requêtes SOAP mais au lieu d'utiliser localhost comme il le devrait, il tentera d'aller jusqu'à l'IP externe et le nom d'hôte. Dans mon cas, j'ai dû ouvrir le pare-feu pour les bouclages et ajouter mon domaine et mon IP externe au fichier hosts
Garet Claborn
ok @GaretClaborn je vais vérifier avec l'équipe du serveur.
Bébé à Magento le

Réponses:

5

Le serveur SOAP doit être initialisé avec WSDL pour comprendre comment traiter les demandes entrantes (il charge essentiellement WSDL à partir de l'URL spécifiée dans le cas de Magento). Cela se produit dans \Mage_Api_Model_Server_Adapter_Soap::_instantiateServer():

$this->_soap = new Zend_Soap_Server(
    $this->getWsdlUrl(array("wsdl" => 1)),
    array('encoding' => $apiConfigCharset)
);

Notez que getWsdlUrl()construit l'URL WSDL en fonction de l'URL de base de votre instance Magento. Cela signifie que si votre magasin Magento n'est pas accessible depuis l'hôte sur lequel il est déployé, le serveur SOAP ne pourra pas charger WSDL lors de l'initialisation. Par conséquent, vous rencontriez une telle erreur lorsque vous tentiez d'effectuer des demandes à l'API SOAP de Magento.

Alex Paliarush
la source
Et comment pouvons-nous résoudre ce problème?
Alexandros
Ajoutez l'hôte d'instance Magento /etc/hostssur le serveur.
Alex Paliarush
J'ai ajouté mon IP XXX.XXX.XXX.XXX www.example.com mais j'obtiens toujours la même chose. J'ai également essayé de couper et de cingler le domaine complet et ils fonctionnent :(
Alexandros
Pouvez-vous charger WSDL sur ce serveur?
Alex Paliarush du
1
Pas sûr que, essayez de déboguer quelque part\Mage_Api_Model_Server_Adapter_Soap::_instantiateServer()
Alex Paliarush
2

Je rencontrais le même problème. J'ai installé le pont orocrm qui doit accéder à l'api soap, j'ai suivi les étapes données pour configurer un rôle soap et un utilisateur, puis j'ai essayé de me connecter: 💥 Les paramètres ne sont pas valides!

Après avoir creusé dans les journaux, j'ai remarqué cette erreur:

[2017-07-03 16:57:46] app.CRITICAL: MageCheck 
error: 0:  [message]           
SOAP-ERROR: Parsing WSDL: Couldn't load from 
'https://my.magento.store/index.php/api/v2_soap/index/?wsdl=1' : 
failed to load external entity 
"https://my.magento.store/index.php/api/v2_soap/index/?wsdl=1"

[request]
<?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:Magento" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
        <SOAP-ENV:Body>
            <ns1:login>
                <username xsi:type="xsd:string">orocrm</username>
                <apiKey xsi:type="xsd:string">***</apiKey>
            </ns1:login>
        </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

[response]
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
        <SOAP-ENV:Fault>
            <faultcode>WSDL</faultcode>
            <faultstring>
SOAP-ERROR: Parsing WSDL: Couldn't load from  'https://my.magento.store/index.php/api/v2_soap/index/?wsdl=1' : 
failed to load external entity "https://my.magento.store/index.php/api/v2_soap/index/?wsdl=1"
            </faultstring>
        </SOAP-ENV:Fault>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

[code]              500   [] []

J'ai compris pourquoi j'ai rencontré ce problème. En fait, ce n'était pas lié à orocrm mais à magento. C'était un problème de pare-feu. En fait, j'ai ajouté correctement les règles pour permettre au serveur crm d'attaquer l'api magento mais celui-ci doit se tendre! Donc après quelques maux de tête, j'ajoute juste une règle sur le pare-feu du serveur magento pour se permettre (le serveur magento) d'atteindre son propre api (sorte de recherche externe) ...

Quoi qu'il en soit, j'espère que cela fera gagner quelques heures à quelqu'un

lenybernard
la source
1
merci pour la réponse, très difficile d'obtenir une solution à ces questions liées au savon, je connais la douleur ......
Baby in Magento