sUserData nach erfolgreicher Bestellung auslesen

Hallo zusammen.

Ich habe mir ein eigenes Tracking-Plugin erstellt welches ein Trackingpixel auf der Success-Seite des Checkout anzeigt. Hierfür benötige ich die userId, customernumber und die beim Kunden gespeicherte affiliate_id aus dem Objekt “sUserData”.
Leider kommt es vor, dass diese Informarmationen nicht bei jeder Bestellung verfügbar sind. Mein Code sieht wie folgt aus:

/**
 * @return array
 */
public static function getSubscribedEvents()
{
    return [
        'Enlight_Controller_Action_PostDispatchSecure_Frontend_Checkout' => 'onPostDispatch'
    ];
}

/**
 * @param \Enlight_Event_EventArgs $args
 */
public function onPostDispatch(\Enlight_Event_EventArgs $args)
{
	$session = Shopware()->Session();

    $subject = $args->getSubject();
    $view = $subject->View();
    
    $request = $subject->Request();
    $action = $request->getActionName();
    
    if ( $action == 'finish' ) {
        $sUserData = $view->sUserData;

        $sOrderVariables = $session['sOrderVariables']->getArrayCopy();
        $sUserDataSession = $sOrderVariables['sUserData'];

        // Check user
        $userId = $sUserData['additional']['user']['userID'];
        $userCustomerNumber = $sUserData['additional']['user']['customernumber'];
        $userAffiliateId = $sUserData['additional']['user']['affiliate_id'];

        if ( $userId == NULL ) {
            $userId = $sUserDataSession['additional']['user']['userID'];
            $userCustomerNumber = $sUserDataSession['additional']['user']['customernumber'];
            $userAffiliateId = $sUserDataSession['additional']['user']['affiliate_id'];
        }
    }
}

Ich habe hier bereits eine Prüfung drin ob $userId Null ist. Falls dem so ist, probiere ich mir die userId aus der Session zu lesen aber selbst dort ist sie nicht immer verfügbar…
Was mache ich falsch? Wie kann ich erreichen, dass ich auf jeden Fall immer die Objekte von sUserData->Additional auslesen kann?
Danke für nen Denkanstoß!

Viele Grüße
Marco

Mhh, weiß jetzt nicht mehr genau warum aber in einem Plugin von mir verwende ich das Event Enlight_Controller_Action_Frontend_Checkout_Finish statt dem PostDispatchSecure um Sachen von der Checkout in die Order zu “schmuggeln”. Schau mal ob es mit diesem Event besser klappt?