Zahlungspflichtig bestellen -> Bestelldaten weiterverwenden

Hallo, 

im Rahmen eines kleinen Projektes möchte ich gerne die Bestelldaten - mindestens die Bestellungs-ID, optimal alle Artikel(-IDs) - direkt nach Druck des “zahlungspflichtig bestellen”-Buttons herausfinden, um mit diesen Daten weiterzuarbeiten. Bspw. möchte ich sie an ein kleines PHP-Skript oder per URL an eine Java EE Anwendung übergeben. Es fehlt nur noch diese Anbindung an Shopware.

 

Ich hab jetzt folgendes probiert: 

subscribeEvent(
            'Enlight_Controller_Action_PostDispatchSecure_Frontend_Checkout',
            'onFrontendPostDispatch'
        );

        //$this->createConfig();

        return true;
    }

    public function onFrontendPostDispatch( \Enlight_Event_EventArgs $arguments )
    {
        if($arguments->getSubject()->Request()->getActionName() != "confirm" )
        {
            return;
        }

        $model = $arguments->get('entity'); // Bestellung selbst (das Model)
        $orderId = $model->getId(); //Bestellungs ID
        $newStatusId = $model->getOrderStatus()->getId(); // neuer Status

        $to = "x@web.de";
        $subject = 'Bla';
        $message = 'HTML-E-MailLink to blaat';
        $headers = 'From: webmaster@example.com' . "\r\n" .
            "MIME-Version: 1.0\r\n" .
            'Content-Type: text/html; charset=iso-8859-1' . "\r\n" .
            'Reply-To: webmaster@example.com' . "\r\n" .
            'X-Mailer: PHP/' . phpversion();

        mail($to, $subject, $message, $headers);
// $arguments->get('sOrderNumber');
    }
}

?>

Hier habe ich zunächst probehalber versucht, einfach eine E-Mail zu schicken. Ich habe auch vorher schon ein anderes Event versucht: 

 'Shopware\Models\Order\Order::postUpdate'

Aktuell mit diesem Code bekomme ich einen 503 Internal Server Error. Bei allen meinen versuchen vorher, mit anderen Events ist einfach gar nichts passiert. 

In den DevTools sehe ich, dass der checkout-Controller anscheinend genutzt wird, aber ich habe keine Ahnung, wie ich damit Events rauskriege, an die ich mich ranhängen kann. 
Leider sind die Beiträge, die ich zu dem Thema im forum gefunden habe, alle auf ältere Shopware-Versionen ausgelegt.

 

Würde mich freuen, wenn mir jemand weiterhelfen könnte!

MfG
wavee

@wavee schrieb:

im Rahmen eines kleinen Projektes möchte ich gerne die Bestelldaten - mindestens die Bestellungs-ID, optimal alle Artikel(-IDs) - direkt nach Druck des „zahlungspflichtig bestellen“-Buttons herausfinden, um mit diesen Daten weiterzuarbeiten.

Hi wavee,

also direkt nach dem Klick? Also bevor der Kunde bezahlt hat? Oder:

„Klick auf Zahlungspflichtig bestellen“ -> Umleitung zum Payment Anbieter -> Zurück zu Shopware -> (*) -> Bestellung wird auf bezahlt gesetzt -> Finish 

Wäre der (*) für dich auch ok?

Viele Grüße

Hallo @simkli‍, 

das ist zunächst eigentlich egal. Theoretisch sinvoll wäre natürlich nach vollständiger Bezahlung und die damit verbundene Umleitung zum Bezahldienstleister.
Praktisch wird das leider eh nie so weit kommen, dass das (von mir) wirklich umgesetzt wird. Das Projekt wird höchstens dann vielleicht von irgendeiner Agentur umgesetzt. Daher bleibt es wohl zunächst bei einer Demonstration, bei der die Verbindung ungefähr so sein sollte, wie sie beschrieben wurde.

Was da sonst abläuft bzw. ob in diesem Fall erst umgeleitet und bezahlt wird, ist daher irrelevant.
Also würde ich mich mit dem einfachsten Lösungsweg oder Tipps zufriedengeben  Smile, egal zu welcher Variante.

MfG
wavee

EDIT:

Ich habe nun in engine/Shopware/Controllers/Frontend/Checkout.php ->finishAction() meinen Code platziert und ich bekomme so jetzt meine Test-Email mit den Daten, die ich benötige. Das ist natürlich nicht der tollste Weg, da einfach mittendrin rumzufummeln, aber es funktioniert. Komisch nur, dass es vorher nicht geklappt hatte, habe das eigentlich schonmal probiert. 

Wenn du aber trotzdem Lust hast, mir den “sauberen” Weg mit einem Plugin zu zeigen, nur her damit  Wink

Ja der Vollständigkeit wegen:

Das Event, das du suchst ist das “Shopware_Modules_Order_SendMail_BeforeSend”-Event. Es wird kurz vor dem Versenden der Bestätigungsemail ausgelöst. Die Bestellung ist zu diesem Zeitpunkt sicher und vollständig durchgelaufen.

//Shopware_Modules_Order_SendMail_BeforeSend Event Listener
public function onSendMailBefore(\Enlight_Event_EventArgs $arguments) {
    $sOrder = $arguments->getSubject(); // sOrder Core-Klasse
    $sOrderNumber = $sOrder->sOrderNumber; // Bestellnummer
    foreach ($sOrder->sBasketData['content'] as $basketArticle) {
        // $basketArticle ist ein Artikel der Bestellung
    }
}

Viele Grüße

1 Like