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.