Ansatz für Plugin unklar (betrifft Cart + Order?)

Moin. Ich möchte per Plugin 2 Dinge abwickeln:

  1. Produkte (per ext. Webservice) validieren, die in den Warenkorb gelegt werden
  2. Falls invalide: Produkt ablehnen/entfernen und Meldung ausgeben
  3. Daten des fertig abgewickelten Checkouts (inkl. Zahlung) wieder per Webservice weiterleiten

Bin mir nicht sicher, wo ich jew. ansetzen soll. Bei 1. dachte ich mir, dass ich den Event CartEvents::LINE\_ITEM\_ADDED__ abonniere, aber der scheint nicht in den __[CartEvents](https://github.com/shopware/platform/blob/master/src/Core/Checkout/Cart/CartEvents.php) verdrahtet zu sein. Alternative wäre CheckoutEvents::CHECKOUT\_CART\_PAGE\_LOADED\_EVENT, aber bin mir nicht sicher, ob die Seite auch garantiert aufgerufen wird.
Außerdem ist mir nicht klar, wie ich eine Meldung an den Kunden ausgeben kann, dass der Artikel entfernt/abgelehnt wurde.

Zu 2. fehlt mir gerade komplett der Ansatz, denn bei der Order sehe ich keinen brauchbaren Event. Jemand eine Idee?

@gaxdev schrieb:

Moin. Ich möchte per Plugin 2 Dinge abwickeln:

  1. Produkte (per ext. Webservice) validieren, die in den Warenkorb gelegt werden
  2. Falls invalide: Produkt ablehnen/entfernen und Meldung ausgeben
  3. Daten des fertig abgewickelten Checkouts (inkl. Zahlung) wieder per Webservice weiterleiten

Bin mir nicht sicher, wo ich jew. ansetzen soll. Bei 1. dachte ich mir, dass ich den Event CartEvents::LINE\_ITEM\_ADDED__ abonniere, aber der scheint nicht in den __[CartEvents](https://github.com/shopware/platform/blob/master/src/Core/Checkout/Cart/CartEvents.php) verdrahtet zu sein. Alternative wäre CheckoutEvents::CHECKOUT\_CART\_PAGE\_LOADED\_EVENT, aber bin mir nicht sicher, ob die Seite auch garantiert aufgerufen wird.
Außerdem ist mir nicht klar, wie ich eine Meldung an den Kunden ausgeben kann, dass der Artikel entfernt/abgelehnt wurde.

Zu 2. fehlt mir gerade komplett der Ansatz, denn bei der Order sehe ich keinen brauchbaren Event. Jemand eine Idee?

  1. Eventuell hier: 

    Shopware\Core\Checkout\Order\OrderEvents - ORDER_WRITTEN_EVENT = ‚order.written‘;

Meines (halb-)Wissens nach wurde die Bestellung zu dem Zeitpunkt erfolgreich durchgeführt und der Payload kann mittels des EntityWrittenEvents abgerufen werden. $event->getPayloads(); Hier stehen dir dann OrderNumbers, Id’s etc,. zur Verfügung mit denen du weiter Sql-Abfragen fahren könntest.