wie kann ich pruefen, ob checkout/finish durch neuladen der Seite aufgerufen wurde?

Mein Plugin registriert sich auf ein Event

$this->subscribeEvent(
            'Enlight_Controller_Action_PostDispatchSecure_Frontend_Checkout',
            'onFrontendPostDispatch'
        );

da pruefe ich ob es sich um die Seite mit der Bestellbestaetigung handelt

public function onFrontendPostDispatch( \Enlight_Event_EventArgs $args )
{
    $subject = $args->get('subject');
    $response = $subject->Response();
    $request = $subject->Request();
    $action = $request->getActionName();

    /* ... */

    $sOrderNumber = $view->getAssign()["sOrderNumber"];

    if(!$request->isDispatched()
        || $response->isException()
        || $request->getModuleName() != 'frontend'
        || $request->getControllerName() != 'checkout'
        || !$args->getSubject()->View()->hasTemplate()
        || $action !== "finish"
    ) {
        error_log("invalid checkout finish");
        return;
    }

    $data = array( /* ... */ );
    $this->some_export_function($data); //should only be called once per order
}

Wenn ich jetzt eine Bestellung durchfuehre wird auch

$this->some_export_function($data)

aufgerufen, wenn ich im Browser dann aber die Seite neu lade und das neu senden der Formulardaten dabei bestaetige, wird die Funktion erneut aufgerufen.

Wie kann ich an dieser Stelle pruefen, ob es sich hierbei um den ersten Aufruf ausgeloest durch den erfolgreichen Bestellvorgang handelt oder nicht?

Ich würde nen Wert in der Session setzen ob das Absenden schon einmal erfolgt ist und darauf prüfen. 

 

1 „Gefällt mir“