Fehlerbeschreibung
Ein PHP-Skript versucht eine API-Verbindung mit einem Magento-Shop herzustellen:
$client = new SoapClient('http://beispiel.de/index.php/api/v2_soap/?wsdl');
Der Versuch endet mit der folgenden Fehlermeldung:
Fatal error: Uncaught SoapFault exception: [HTTP] Unable to parse URL in ...script.php
Es kommt zu dem Fehler, obwohl die URL http://beispiel.de/index.php/api/v2_soap/?wsdl erreichbar ist und einen gültigen XML-Code zurückgibt.
Ursache
Suchen Sie in der XML-Ausgabe unter http://beispiel.de/index.php/api/v2_soap/?wsdl nach soap:address:
<service name="MagentoService"> <port name="Mage_Api_Model_Server_V2_HandlerPort" binding="typens:Mage_Api_Model_Server_V2_HandlerBinding"> <soap:address location="https://beispiel.de/index.php/api/v2_soap/index/"/> </port> </service>
Der Wert des Attributs location von soap:address muss eine gültige URL enthalten:
- Gültige URL:
https://beispiel.de/index.php/api/v2_soap/index/ - Ungültige URL, Fall 1: Abweichende Basis-URL:
https://andere-domain.de/index.php/api/v2_soap/index/ - Ungültige URL, Fall 2: Basis-URL fehlt:
/api/v2_soap/index/
Lösung
Der Wert des Attributs location von soap:address muss eine absolute und gültige URL enthalten!
- Der 1. Fall ist der häufigste, bei dem die URL unter der die API aufgerufen wurde, nicht mit der in der Systemkonfiguration eingestellten URL übereinstimmt (dies kommt typischerweise nach einem Domain-Umzug oder in einer Testumgebung vor, die unter einer anderen Domain erreichbar ist).
Überprüfen und ändern Sie ggf. die Einstellung unter System > Konfiguration > Allgemein: Web > Ungesichert/Gesichert > Basis-URL.
- Der 2. Fall ist sehr speziell, da bei diesem Projekt die Basis-URL bei der Ausgabe im gesamten Shop-Frontend (aufgrund bestimmter Anforderungen) entfernt wird.
Durch Anpassung des Ausgabefilters, sodass die Basis-URL bei API-Ausgaben nicht entfernt wird, konnte der Fehler in diesem Fall behoben werden.
Weiterführende Links:
Ein Gedanke zu „Fehler bei API-Verbindung mit Magento: Uncaught SoapFault exception: [HTTP] Unable to parse URL in …“