Zusätzlichen Input im Checkout-Prozess abfragen und in die Datenbank eintragen / Paypal-Problem

Hallo,

ich schreibe eines meiner ersten Plugins.

Dieses soll auf der Confirm-Seite des Checkouts Daten aus einem Inputfeld entgegennehmen und diese in den Attributen der Bestellungen (s_order_attributes) abspeichern. Dies funktioniert bei Bestellungen, die nicht mit Paypal interagieren, auch sehr gut. Es funktioniert aber überhaupt nicht, wenn jemand mit PayPal bezahlen möchte. 

Ich arbeite u. a. mit „Enlight_Controller_Action_PreDispatch_Frontend_Checkout“ und fange dann die Controller-Action „finish“ ab. Bei der Nutzung von Paypal möchte ich die Action „payment“ abfangen.

Der Code:

Im Action-Feld des Formulars im Frontend:

action="url(die tatsächliche url ...)/checkout/payment"

Deswegen gehe ich davon aus, dass ich in an der paymentAction mit onPreDispatchFrontendCheckout (s. u.)

$controller = $args->getSubject();
$controller->Request()->getParam('PARAMETERNAME', '');

meine Daten holen kann.

Beim Subscriben benutze ich:

'Enlight_Controller_Action_PreDispatch_Frontend_Checkout' => array('onPreDispatchFrontendCheckout', 1000),

und in der Methode onPreDispatchFrontendCheckout:

$action = $args->getSubject()->Request()->getActionName(); if ($action === "payment") {die('payment');}

Die Codestelle wird während des Checkout-Prozesses nie erreicht. Bei der finish-Methode bin ich ganz analog vorgegangen und da hat alles geklappt inkl. Datenbankeintrag.

Kann es sein, dass die paymentAction()-Funktion des Checkout-Controllers nie ausgeführt wird, weil sie irgendwie abgefangen wird, etwa in einem PayPal-Plugin? Gibt es irgendein anderes Event mit dem ich die Daten aus der Checkout-Confirm-Seite bekommen kann? Ich habe schon versucht, das PayPal-Plugin zu debuggen und die entsprechenden Events auszuprobieren und unterschiedlich zu priorisieren. Bislang ohne Erfolg. Wenn jemand einen Tipp hat, wo ich nach Lösungen suchen kann oder vll. selbst etwas parat hat, wäre ich dankbar.

Ich habe noch einmal nachgeforscht und es gibt verschiedene Anätze im Internet:

u.a.: https://forum.shopware.com/discussion/53760/hooking-in-predispatch-funktioniert-fuer-nachmahme-zahlungsart-aber-nicht-fuer-paypal-sofort

Aber selbst damit bin ich nicht weitergekommen. Selbst mit Enlight_Controller_Action_PreDispatch und als Priorität PHP_INT_MAX kriege ich zwar beim Debuggen jede Menge actions heraus, aber nicht die payment-Action. Ich habe auch schon versucht mich auf 

Enlight_Controller_Action_PreDispatch_Frontend_PaypalUnified zu binden, aber dann komme ich hinter dem Payment an, wo ich auf die Postvariablen keinen Zugriff mehr habe.

Moin codingfish! Hast du mittlerweile eine Lösung gefunden?

Grüße Gregor 

1 „Gefällt mir“