Freitextfelder bei Zahlung mit Paypal

Hallo Shopware Community,

ich habe ein Plugin erstellt welches den Benutzer vor dem Checkout fragt in welcher Filiale er seine Bestellung abholen möchte. Dies passiert über ein Select Feld. Die gewählte Option wird dann in das Freitextfeld „attribut2“ gespeichert.

Wird als Zahlungsmethode Vorkasse gewählt so funktioniert das Plugin auch einwandfrei.

Wenn ich nun allerdings über PayPal bezahle kriege ich nach Abschluss der Zahlung und Rückkehr in den Shop nicht mehr die entsprechende POST Variable.
Dadurch bleibt das Freitextfeld leer.

Meine Frage ist nun wie ich an diese Parameter dran komme nach der Rückkehr von Paypal. Werden die Bestelldaten irgendwo zwischengespeichert?

Ich benutze Shopware 5.2.16

Meine Bootstrap.php:

 true,
            'update' => true,
            'enable' => true
        );
    }

    public function getLabel()
    {
        return 'Auswahl der Abholfiliale';
    }

    public function getVersion()
    {
        return '1.0.0';
    }

    public function getInfo()
    {
        return array(
            'version' => $this->getVersion(),
            'label' => $this->getLabel(),
            'author' => 'XXX',
            'supplier' => 'XXX',
            'description' => 'Auswahl der Abholfiliale auf der Bestätigungsseite des Bestellabschlusses',
            'support' => 'XXX',
            'link' => 'XXX'
        );
    }

    public function install()
    {
        $this->registerEvents();
        return array('success' => true, 'invalidateCache' => array('frontend'));
    }

    public function uninstall()
    {
        return array('success' => true, 'invalidateCache' => array('frontend'));
    }

    private function registerEvents()
    {
        $this->subscribeEvent('Enlight_Controller_Action_PreDispatch_Frontend_Checkout','onPreDispatchCheckout');
        $this->subscribeEvent('Enlight_Controller_Action_PostDispatch_Frontend_Checkout','onPostDispatchCheckout');
        $this->subscribeEvent('Theme_Compiler_Collect_Plugin_Less','onCollectLessFiles');
        $this->subscribeEvent('Theme_Compiler_Collect_Plugin_Javascript','onCollectJsFiles');
        $this->subscribeEvent('sOrder::sSaveOrder::before','onSaveOrder',0);
    }

    public function onCollectLessFiles()
    {
        return new \Shopware\Components\Theme\LessDefinition(
            [],
            [__DIR__. '/Views/frontend/_public/src/less/all.less']
        );
    }

    public function onCollectJsFiles(Enlight_Event_EventArgs $args)
    {
        $jsFiles = array( __DIR__. '/Views/frontend/_public/src/js/script.js');
        return new Doctrine\Common\Collections\ArrayCollection($jsFiles);
    }

    public function onPreDispatchCheckout(Enlight_Event_EventArgs $arguments)
    {
        $subject = $arguments->getSubject();
        $request = $subject->Request();
        $response = $subject->Response();
        $action = $request->getActionName();
        $view = $subject->View();

        $view->addTemplateDir( __DIR__. '/Views');

        if (!$request->isDispatched() || $response->isException() || !$view->hasTemplate()) {
            return;
        }

        $customerId = Shopware()->Session()->sUserId;
        if ($action !== "finish" || $customerId === null) {
            return;
        }

        $customer = Shopware()->Models()->find('Shopware\Models\Customer\Customer', $customerId);
        if (!$customer) {
            return;
        }

        if($request->getParam('pick-up-department') == ''){
            $subject->forward('confirm', 'checkout', 'frontend', array('pickUpDepartmentSelected' => false));
        }

        if($action == "finish"){
            $view->assign('pickUpDepartment', $request->getParam('pick-up-department'));
        }
    }

    public function onPostDispatchCheckout(Enlight_Event_EventArgs $arguments)
    {
        $subject = $arguments->getSubject();
        $request = $subject->Request();
        $response = $subject->Response();
        $action = $request->getActionName();
        $view = $subject->View();

        if ( $action !== 'confirm' || !$request->isDispatched() ||
        $response->isException() || !$view->hasTemplate()) {
            return;
        }

        if ($request->has('pick-up-department')) {
            $view->assign('pickUpDepartment', $request->getParam('pick-up-department'));
        }
    }

    public function onSaveOrder(Enlight_Hook_HookArgs $args)
    {
        $order = $args->getSubject();
        $order->o_attr_2 = Shopware()->System()->_POST['pick-up-department'];
    }

}

Vielen Dank im vorraus für jede Hilfe!

Liebe Grüße,

Konsti

Shopware hatte voriges Jahr das gleiche Problem mit seinem Kommentarfeld, wenn über Paypal bezhalt wurde.
Ich habe bisher nicht herusgefunden, wie es programiert wurde, dass es funktioniert.

Hast du denn bereits eine Lösung gefunden?
Ich hänge nämlich an dem gleichen Problem.
 

Ich nutze aber das Event Shopware_Modules_Order_SendMail_FilterVariables

und schreibe meinen Wert über 

$attr_feld = Shopware()->Session()->attribute_field;
$orderModel->setAttribute6( $attr_feld );
....

in die  s_order_attributes

Allerdings wird dann immer der letzte Wert, der noch in der Session drin ist, gespeichert, statt dem neuen Wert aus dem Eingabefeld zu speichern.

Shopware_Controllers_Frontend_Checkout::saveOrder::after
Enlight_Controller_Action_Frontend_Checkout_Finish
Enlight_Controller_Action_Frontend_Checkout_Confirm

Das sind die möglichen Hooks/Events.
Da dann einfach mal die $args->getSubject(), $args->getReturn() checken.
So haben wir es im Endeffekt umgesetzt

Das speichern am Ende mit checkout_finish etc. in die Datenbank ist kein Problem.

Das Problem ist noch, dass der Wert im Eingabefeld erneut mit $request->getParam(’) oder $request->getPost() nicht übernommen wird,sondern nur, wenn direkt post mit Vorkasse gespeichert wird.

Ich stehe derzeit vor dem gleichen Problem. Wurde jemals eine Loesung dafuer gefunden? Bei mir betrifft es PayPal und Klarna.