SOAP-Fehler: Analyse der WSDL: Das Laden von "" konnte nicht geladen werden. Die externe Entität konnte nicht geladen werden

9

Geben Sie hier die Bildbeschreibung ein

Wir entwickeln eine Android-App für eine Magento-Site. Wir müssen die SOAP-API von Magento an Android übergeben, um die Sitzungs-ID zu erhalten.

Wir haben SOAP-Webbenutzer und -Rollen im Magento-Administrationsbereich über diesen Link erstellt:

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

Wenn wir versuchen, eine Verbindung von Android zu Magento herzustellen, wird eine Fehlermeldung angezeigt. Dies ist der Link, den wir verwenden:

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

Baby in Magento
quelle
1
Hallo - Ich kann den Fehler unter dem von Ihnen angegebenen Link nicht sehen. es heißt unten für die Wartung.
Garet Claborn
Hallo, tut mir leid, dass die Website gewartet wird. Bitte überprüfen Sie die aktualisierte Frage.
Baby in Magento
1
Haben Sie die Schritte aus meiner vorherigen Frage ausprobiert? Dies sieht aus wie der gleiche Fehler, den ich durch die Firewall- und NAT-Einstellungen für meinen Server verursacht habe.
Garet Claborn
1
Wenn magento versucht, einige Ressourcen abzurufen, stellt es mehr SOAP-Anforderungen an sich selbst, aber anstatt localhost wie vorgesehen zu verwenden, wird versucht, bis zur externen IP und zum Hostnamen zu gelangen. In meinem Fall musste ich die Firewall für Loopbacks öffnen und meine Domain und externe IP zur Hosts-Datei hinzufügen
Garet Claborn
okay @GaretClaborn Ich werde mit dem Server-Team überprüfen.
Baby in Magento

Antworten:

5

Der SOAP-Server muss mit WSDL initialisiert werden, um zu verstehen, wie eingehende Anforderungen verarbeitet werden (bei Magento wird WSDL grundsätzlich von der angegebenen URL geladen). Dies geschieht in \Mage_Api_Model_Server_Adapter_Soap::_instantiateServer():

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

Beachten Sie, dass getWsdlUrl()die WSDL-URL basierend auf Ihrer Magento-Instanz-Basis-URL erstellt wird. Dies bedeutet, dass der SOAP-Server WSDL während der Initialisierung nicht laden kann, wenn auf Ihren Magento-Speicher nicht von dem Host aus zugegriffen werden kann, auf dem er bereitgestellt wird. Infolgedessen tritt ein solcher Fehler auf, wenn Sie versuchen, Anforderungen an die Magento SOAP-API auszuführen.

Alex Paliarush
quelle
Und wie können wir das beheben?
Alexandros
Fügen Sie den Magento-Instanzhost /etc/hostsauf dem Server hinzu.
Alex Paliarush
Ich habe meine IP XXX.XXX.XXX.XXX www.example.com hinzugefügt, aber ich bekomme immer noch das gleiche. Ich habe auch versucht, die gesamte Domain zu löschen und zu pingen, und sie funktionieren :(
Alexandros
Können Sie WSDL auf diesem Server laden?
Alex Paliarush
1
Nicht sicher als, versuchen Sie, irgendwo in der \Mage_Api_Model_Server_Adapter_Soap::_instantiateServer()
Nähe
2

Ich hatte das gleiche Problem. Ich habe die orocrm-Brücke installiert, die auf die Seifen-API zugreifen muss, habe die angegebenen Schritte ausgeführt, um eine Seifenrolle und einen Benutzer zu konfigurieren, und dann habe ich versucht, eine Verbindung herzustellen: 💥 Parameter sind ungültig!

Nachdem ich die Protokolle durchsucht hatte, bemerkte ich diesen Fehler:

[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   [] []

Ich habe herausgefunden, warum ich dieses Problem erlebt habe. Eigentlich hatte das nichts mit Orocrm zu tun, sondern mit Magento. Das war ein Firewall-Problem. Eigentlich habe ich die Regeln korrekt hinzugefügt, damit der crm-Server die magento-API angreifen kann, aber diese muss sich selbst erreichen! Nach einigen Kopfschmerzen füge ich einfach eine Regel zur Firewall des Magento-Servers hinzu, damit sich selbst (der Magento-Server) seine eigene API (Art der externen Suche) erreichen kann ...

Wie auch immer, ich hoffe, das spart jemandem einige Stunden

Lenybernard
quelle
1
danke für die Antwort, sehr schwer zu lösen für diese seifenbezogenen Fragen, ich kenne den Schmerz ......
Baby in Magento