Guten Tag Ich möchte gerne mit SOAP eine Abfrage machen. Im Shopware ist SOAP aktiviert und alles auf grün bei den Systemeigenschaften. Ich benutze ein lokales wsdl-file. Die SOAP-Version habe ich auf 1.1 gesetzt. Wenn ich die Abfrage auf dem Server, aber “ausserhalb” von Shopware ausführe, funktioniert die Abfrage. Wenn ich aber dieselbe Abfrage in einem beliebigen Ordner im Shopware (momentan Views/frontend/_public/) ausführe, kommt die Meldung: [faultstring] =\> Could not connect to host [faultcode] =\> HTTP
An was kann das liegen? Warum kann die Abrage vom Server funktionieren, aber von Shopware nicht? Hier mein Client: $client = new SoapClient("MeinLokales.wsdl", array( 'login' =\> $user, 'password' =\> $pw, 'encoding' =\> "utf-8", 'soap\_version' =\> \SOAP\_1\_1 ));
Hier meine Response-Anfrage: $response = $client-\>Fetch($params);
Hallo kmudo, es gibt Hoster, die den HTTP-Zugriff auf sich selbst aus Stabilitätsgründen verbieten. Um herauszufinden, ob das bei dir der Fall ist, könntest du einen curl- oder file_get_contents()-Call z.B. auf deine Startseite versuchen. Viele Grüße Marcus
Hallo Marcus Danke für Deine schnelle Antwort. Der Hoster lässt es zu, denn ich kann mein SOAP ausführen, wenn es nicht im Shopware-Verzeichnis ist. => Wenn der SOAP-Call ausserhalb von Shopware auf demselben Server ausgeführt wird, funktioniert es. Gibt es sonstige Blocker, die das korrekte Ausführen nicht zulassen?
hi, hast du ggf. ne htaccess einstellung für https vorgenommen, oder shop-konfig immer SSL? ist nur so ein gedanke.
Hi Pino Dein Ansatz hat mir geholfen, danke. Mit der SSl läuft alles auf Standart. Somit ist dies nicht das Problem. Das Problem liegt an der PHP-Version… Ich habe von der Version 5.6 auf 5.5 zurückgestuft und voilà, es funktioniert! Ich versuche dem Problem auf den Grund zu kommen und poste meine Erfahrungen für die nächsten Entwickler, die eventuell auf das Problem stossen.
Wenn man weiss woran es liegt, kommt man schnell zum Ergebnis… Jetzt läuft der SOAP in der PHP-Version 5.5 UND 5.6 :thumbup: Mein Code vorher: $client = new SoapClient("MeinLokales.wsdl", array( 'login' =\> $user, 'password' =\> $pw, 'encoding' =\> 'UTF-8', 'soap\_version' =\> SOAP\_1\_1, ));
Mein Code Jetzt: (Minimale Anforderung) $opts = array( 'ssl' =\> array('ciphers'=\>'RC4-SHA', 'verify\_peer'=\>false, 'verify\_peer\_name'=\>false) ); $client = new SoapClient("MeinLokales.wsdl", array( 'login' =\> $user, 'password' =\> $pw, 'encoding' =\> 'UTF-8', 'soap\_version' =\> SOAP\_1\_1, 'stream\_context' =\> stream\_context\_create($opts) ));
Um sicher zu gehen könnte man: $opts = array( 'ssl' =\> array('ciphers'=\>'RC4-SHA', 'verify\_peer'=\>false, 'verify\_peer\_name'=\>false) ); $client = new SoapClient("MeinLokales.wsdl", array( 'login' =\> $user, 'password' =\> $pw, 'encoding' =\> 'UTF-8', 'verifypeer' =\> false, 'verifyhost' =\> false, 'soap\_version' =\> SOAP\_1\_1, 'trace' =\> 1, 'exceptions' =\> 1, 'connection\_timeout' =\> 180, 'stream\_context' =\> stream\_context\_create($opts) ));
Ich kann SOAP_1_2 nicht testen, da mein wsdl SOAP_1_1 braucht. Hoffe das hilft