Fehlerbeschreibung
Beim Versuch sich über Magento-API einzuloggen, wird folgender Fehler gemeldet:
SoapClient: looks like we got no XML document
Fehleranalyse
Die Fehlermeldung ist viel zu allgemein. Deshalb sollte die Serverantwort genauer analysiert werden, die angeblich kein (gültiges) XML-Dokument ist. Um die empfangenen Daten analyseren zu können, wird die Abfragemethode von SoapClient überschrieben:
class SoapClientDebug extends \SoapClient{ public function __doRequest($request, $location, $action, $version = SOAP_1_1, $one_way = 0){ $xml = explode("\r\n", parent::__doRequest($request, $location, $action, $version, $one_way = 0)); print_r($xml); print '<br/><br/>'.str_repeat('#', 100).'<br/><br/>'; if(isset($xml[5])) return $xml[5]; return ''; } }
Die API-Kommunikation läuft nun über die überschriebene Klasse:
// $client = new SoapClient('http://beispiel.de/index.php/api/v2_soap/?wsdl'); $client = new SoapClientDebug('http://beispiel.de/index.php/api/v2_soap/?wsdl');
Mögliche Ursachen und Lösungen
In unserem Fall hat der Server in mehreren Fällen tatsächlich kein XML-Dokument empfangen. Die Antwort war entweder eine Fehermeldung vom Varnish-Cache-Server, oder eine Weiterleitung aufgrund einer Regel in der .htaccess. Im ersten Fall konnte der Fehler durch Abschaltung des Varnish weiter analysiert werden. Im zweiten Fall wurde die Regel in der .htaccess verbessert.