Zum Hauptinhalt springen

Architektur

Der AgiqonConnector ist ein Shopware 6 Plugin, das den Shop als Katalog-Quelle für Procurement-Systeme zugänglich macht.


Unterstützte Protokolle

ProtokollVersion
OCI4.0
OCI5.0
cXML1.2 (PunchOut)

Systemvoraussetzungen

PHP^8.2
Shopware~6.7.0 (Plugin 3.7.x)
Shopware~6.6.0 (Plugin 3.6.x)

Ablauf

1. Login

Procurement-System

│ OCI: HTTP POST mit Login-Parametern
│ cXML: HTTP POST mit PunchOut Setup Request (XML)

OciLoginController / CxmlAuthController
│ – Authentifizierung prüfen
│ – ConnectorSession aufbauen (system, hookUrl, additionalFields, …)
│ – ConnectorSession im Symfony Session-Store ablegen
│ – OciSessionLoginEvent / CxmlSessionLoginEvent feuern

TransmissionSubscriber.onLogin()
│ – Neue ConnectorTransmissionEntity anlegen
│ (oder bestehende wiedereröffnen, wenn transmissionId vorhanden)

Shopware-Storefront (Browser des Käufers)

2. Aktiver Einkauf

Käufer navigiert durch den Shop

│ Bestimmte Routen (Checkout, Account) sind blockiert
│ → Redirect zur Warenkorbseite


Warenkorbseite
│ OCI: OciConnectorResponseGenerator::buildForm()
│ cXML: CxmlConnectorResponseGenerator::buildPunchOutOrderMessage()

│ DataFieldRegistry löst für jede Warenkorbposition alle
│ konfigurierten Felder auf (Preis, Beschreibung, MATNR, …)

Transfer-Formular (OCI) / PunchOutOrderMessage-Preview (cXML)

3. Transfer

Käufer klickt "Transfer"

│ POST /agiqon/connector/session/logout?transferred=1

ConnectorTransferEvent feuern
│ TransmissionSubscriber.onTransfer()
│ → Warenkorb-Payload in Transmission.cartPayload speichern

ConnectorSessionLogoutEvent feuern
│ TransmissionSubscriber.onLogout()
│ → Status: Transferred
│ → TransmissionMode::Auto: Shopware-Bestellung erstellen
│ Session + Warenkorb löschen

OCI: HTML-Formular wird an hookUrl des Procurement-Systems gesendet
cXML: PunchOutOrderMessage wird im Twig-Template zurückgegeben

Erweiterungspunkte

PunktMechanismus
Eigene Felder anlegenCustom AbstractDataField + Service-Tag agiqon_connector.data_field
Eigene Feldtypen anlegenCustom Enum mit DataFieldTypeInterface + Custom LineItemContextResolver
OCI Response vor Rückgabe ändernListener auf OciResponseGenerationEvent
cXML Response vor Rückgabe ändernListener auf CxmlResponseGenerationEvent
Transfer-Logik erweiternListener auf ConnectorTransferEvent
Login/Logout-Logik erweiternListener auf ConnectorSessionLoginEvent / ConnectorSessionLogoutEvent
Custom LineItem-Typen für BestellungenListener auf ConnectorCartLineItemResolveEvent