Bestellung wird erzeugt ohne daß Paypal-Zahlung abgeschlossen ist!

Wir nutzen bei Shopware 6.1.5 das Paypal Plugin. Beim Bestellvorgang wid zwar der Paypal-Login angezeigt, die Bestellung wird aber ausgelöst bevor der Kunde die Zahlung abgeschlossen hat bzw. unabhängig davon, ob der Kunde eine Zahlung tätigt oder nicht. Paypal gab die Auskunft, daß es sich um einen Fehler im Paypal-Modul handelt, der längst korrigiert sein müßte, ode raber um eine falsche Konfiguration. Haben andere Nutzer das Problem auch und wie kann ich es beheben?

In Shopware 6 ist die Zahlung und die Bestellung komplett losgelöst voneinander. Eine Bestellung wird ausgelöst, wenn der Kunde auf “Zahlungspflichtig bestellen” klickt. Der Zahlungsstatus bleibt hier zunächst offen. Sobald der Kunde die Zahlung abgewickelt hat, ändert er sich auf komplett bezahlt. Das führt natürlich dazu, dass immer jeder Bestellversuch im System ist. Mit 6.2 haben wir hier noch einige weitere Dinge eingebaut:

  • Der Kunde kann nach fehlgeschlagener Zahlung (Zahlungsstatus offen und fehlgeschlagen) die Zahlungsart wechseln und den Zahlungsvorgang erneut starten
  • Der Kunde kann nach fehlgeschlagener Zahlung optional (Aktivierbar in den Einstellungen) die Bestellung wieder stornieren
  • Der Kunde kann nachträglich die Zahlungsart wechseln in seinem Account (Schnellbesteller per Direktlink) und bspw. von Vorkasse zu Paypal wechseln
  • Der Shopbetreiber kann Zahlungserinnerungen verschicken die direkt auf die Zahlungsseite gehen, damit der Kunde eine Zahlung anstoßen kann

Dabei fällt auch noch ein weiterer Punkt ab:

  • Schnellbesteller können ihren Bestellstatus per Direktlink einsehen

Das ist alles Teil der 6.2 die ja im Verlauf des Aprils präsentiert wird und dir wahrscheinlich schon den großtei der Probleme behebt.

In der Vergangenheit war das hier immer eine Grundsatzentscheidung: Soll eine Bestellung vor Zahlung angelegt werden (= Es kann passieren, dass eine Zahlung vorliegt, aber keine Bestellung im System ist) oder soll eine Bestellung vor der Zahlung angelegt werden (= Es kann passieren, dass eine Bestellung vorliegt, aber keine Zahlung). Erster Punkt war immer deutlich komplexer, denn wenn die Bestellung nicht im System ist, bekommt man die relativ schwer nachträglich rein. 

Viele Grüße
Moritz Naczenski

 

1 Like

@Moritz Naczenski schrieb:

In Shopware 6 ist die Zahlung und die Bestellung komplett losgelöst voneinander. Eine Bestellung wird ausgelöst, wenn der Kunde auf „Zahlungspflichtig bestellen“ klickt… Erster Punkt war immer deutlich komplexer, denn wenn die Bestellung nicht im System ist, bekommt man die relativ schwer nachträglich rein. 

Das stimmt, danke euch dafür! Wir dachten auch erst, es sei nicht so sinnig. Aber im Nachhinein muss ich sagen, haben wir doch jeden Kunden wo Paypal warum auch immer abgebrochen ist, noch dazu bekommen dann per Überweisung zu zahlen oder direkt per Paypal an uns das Geld zu sammeln. Ist die Bestellung nicht durch und bekommt der Kunde keine Bestellbestätigung, auch wenn Paypal nicht geklappt hat, wird es wirklich sehr schwierig.

Wird es denn auch die Möglichkeit geben, alle oder optional 2 Zahlungsarten direkt abzubilden? Wir mussten auf Vorkasse umstellen, weil viele einfach zu schnell waren und Paypal in der Voreinstellung übersehen haben. Einige von den Kunden hatten kein Paypal und haben Paypal deswegen abgebrochen. In Shopware 5 waren ja beide Zahlungsmöglichkeiten aufgezeigt.

@Moritz Naczenski schrieb:

In Shopware 6 ist die Zahlung und die Bestellung komplett losgelöst voneinander. Eine Bestellung wird ausgelöst, wenn der Kunde auf „Zahlungspflichtig bestellen“ klickt. Der Zahlungsstatus bleibt hier zunächst offen. Sobald der Kunde die Zahlung abgewickelt hat, ändert er sich auf komplett bezahlt.

Ich dachte, dass steuert die Plugin Konfig „Zahlungsabschluss“.
Mh - dann die Frage: Komme ich irgendwie einfach an den Impuls, wann die Zahlung erfolgreich gesetzt wurde?
Unsere Kunden möchten eig. immer erst die PayPal Bestellung importieren, wenn diese abgeschlossen ist.
Bisher sehe ich nur den Weg über OrderEvents::ORDER_WRITTEN_EVENT ein Aufschluss, wann die Bestellung gespeichert wird - das ist ja anscheinend nun unzureichend für meinen Fall.

EDIT 1: Habe noch in die Events geguckt.
Frage ist, wie generell Zahlungsarten (Plugins) das lösen - ich würde ungern in die Schnittstelle für jede Zahlungsart da extra Logik einbauen.
Idee wäre, Bestellungen von bestimmt markierten Zahlungsarten erst einmal parken und per Plugin sich aufschließen, wenn was an den passiert.
Frage ist dann wirklich, was z.B. PayPal macht: Status Änderung, eine Transaktion schreiben, … und ja, wie der best practice hier auch bei anderen Payment Anbietern ist.

EDIT 2: PayPal löst es hier wohl aus: https://github.com/shopwareLabs/SwagPayPal/blob/master/src/Payment/PayPalPaymentHandler.php#L178
Das löst folgendes aus: https://github.com/shopware/platform/blob/master/src/Core/Checkout/Order/Aggregate/OrderTransaction/OrderTransactionStateHandler.php#L116
Damit landen wir hier: https://github.com/shopware/platform/blob/master/src/Core/System/StateMachine/StateMachineRegistry.php#L156

Meine Idee wäre da auf ein Event zu hören und zu checken, ob es sich um eine „ACTION_PAY“ Transition von PayPal handelt.
Wäre das deiner Meinung nach der richtige Weg? Wie gesagt - ich bin an einer Lösung interessiert, die eig. alle Payment Dienstleister erschlägt, die diese Art von async. Abschluss haben.

Schöne Grüße,
Niklas

Das Problem ist nicht auf PayPal beschränkt, das gleiche Problem gibt es zum Beispiel mit der Mollie-Zahlungsschnittstelle.

Ausgelöst wird die Bestellbestätigungs-E-Mail durch den Eintrag in der Tabelle “event_action”: bei “checkout.order.placed” wird der event “action.mail.send” ausgelöst. Dieser schickt dann die E-Mail.

Der sauberste Weg wäre es meiner Meinung nach demnach, diesen Eintrag zu entfernen. Dann mt einem eigenen Listener auf den checkout.order.placed Event zu hören und nur dann die Bestellbestätigung zu schicken, wenn es sich nicht  um eine Gateway-Zahlungsart wie PayPal oder jeder Kreditkartenanbieter handelt. Also zB. Vorauskassa oder Nachnahme.

Zusätzlich natürlich dann noch auf den richtigen “Die Bestellung ist jetzt bezahlt” Event hören und dort die Bestellbestätigung senden, falls es sich um keine Gateway-Zahlungsart handelt.

@Moritz Naczenski schrieb:

  • Der Kunde kann nachträglich die Zahlungsart wechseln in seinem Account und bspw. von Vorkasse zu
    Paypal wechseln

kann man diese Funktion abschalten ?

Das müsstest du bei der jeweiligen Zahlart unter Einstellungen → Zahlarten ändern können.

1 Like

vielen Dank ! das hat geholfen

Ich habe bei beiden Zahlungsarten (PayPal, Vorkasse) hinterlegt, dass diese nicht nachträglich änderbar sind.

Trotzdem (unter 6.4.1.0) folgendes Szenario: Bestellung erstellt (PayPal) > Zahlung abgebrochen > Rückkehr in den Shop > Möglichkeit, die Zahlungsart zu ändern und abzuschließen.

Wenn da so ist, bräuchte ich ein Event, auf das ich lauschen kann.
Aber an sich verstehe ich es so, dass das eig. so nicht sein sollte? …

Schöne Grüße,
Niklas