Es Problem, welches von Beginn an bei Magento bestand, war der nervig leere Warenkorb nach Abbruch einer Zahlung bei einem externen Zahlungsabwickler wie z.B. PayPal.
Es läuft so ab:
Kunde füllt seinen Warenkorb und geht zur Kasse. Dort wählt er PayPal als Zahlungsmethode und schließt dann die Bestellung ab. Er wird nun zu PayPal weitergeleitet, um dort die Zahlung abzuschließen.
Nun gibt es aber leider bei PayPal ein Problem. Häufigstes Problem sind falsche Logindaten oder vergessene Daten. Wie auch immer, der Kunde bricht die Zahlung bei PayPal ab und klickt auf “Abbrechen und zurück zu [Shop]”.
Nun kommt er leider in einen leeren Warenkorb und muss die Bestellung nochmal machen.
Hier gibt es zwei Probleme:
1. Der Kunde hat den Aufwand die komplette Bestellung neu zu machen (und darauf haben leider wenig Kunden Lust)
2. Es wird eine stornierte Bestellung im Backend angelegt.
Problem 1 kann jedoch beim normalen OnePageCheckout rel. leicht gelöst werden. Es gibt mehrere Ansätze, ich habe mich für diesen hier entschieden:
Kopieren der Datei OnepageController.php aus dem Verzeichnis app/code/core/Mage/Checkout/controllers/ in das Verzeichnis app/code/local/Mage/Checkout/controllers/
Anschließend nach den Zeilen suchen
$this->getOnepage()->getQuote()->save(); /** * when there is redirect to third party, we don't want to save order yet. * we will save the order in return action. */ if (isset($redirectUrl)) { $result['redirect'] = $redirectUrl; } $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result)); }
und durch diese ersetzen
// $this->getOnepage()->getQuote()->save(); /** * when there is redirect to third party, we don't want to save order yet. * we will save the order in return action. */ if (isset($redirectUrl)) { $result['redirect'] = $redirectUrl; $this->getOnepage()->getQuote()->setIsActive(1) ; } $this->getOnepage()->getQuote()->save(); $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result)); }
Nun wird man bei Abbruch der Zahlung bei PayPal zwar nicht in den Checkout zur Auswahl einer anderen Zahlart geschickt aber immerhin in den weiterhin gefüllten Warenkorb.
Leider habe ich bislang keine Lösung für Problem 2 gefunden, somit wird bei jedem abgebrochenen Zahlungsvorgang eine stornierte Bestellung im Backend hinterlegt.
Genutzt in Magento Version 1.7. Fragen, Kommentare, Vorschläge? Gerne direkt oder als Kommentar.
Did you ever find a solution? This is still a problem for me.
Did you ever find a solution? This is still a problem for me.
“Copy the OnepageController.php file from the directory app / code / core / Mage / Checkout / controllers / in the directory app / code / local / Mage / Checkout / controllers /”
After that always, ALWAYS, when ever there is a new Magento patch released, read the patch code, check if it changes OnepageController.php and if so manually implement changes to your local version of the file.
Better solution is to use observer.