Skip to main content

Architecture

The AgiqonConnector is a Shopware 6 plugin that makes the shop available as a catalog source for procurement systems.


Supported protocols​

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

System requirements​

PHP^8.2
Shopware~6.7 (plugin 3.7.x, currently 3.7.500)
Shopware~6.6 (plugin 3.6.x, currently 3.6.300)

Flow​

1. Login​

Procurement system
│
│ OCI: HTTP POST with login parameters
│ cXML: HTTP POST with PunchOut Setup Request (XML)
▼
OciLoginController / CxmlAuthController
│ – Verify authentication
│ – Build ConnectorSession (system, hookUrl, additionalFields, …)
│ – Store ConnectorSession in Symfony session store
│ – Fire OciSessionLoginEvent / CxmlSessionLoginEvent
▼
TransmissionSubscriber.onLogin()
│ – Create new ConnectorTransmissionEntity
│ (or reopen existing one if transmissionId is already present)
▼
Shopware storefront (buyer's browser)

2. Active shopping​

Buyer navigates the shop
│
│ Certain routes (checkout, account area) are blocked
│ → redirect to cart page
│
▼
Cart page
│ OCI: OciConnectorResponseGenerator::buildForm()
│ cXML: CxmlConnectorResponseGenerator::buildPunchOutOrderMessage()
│
│ DataFieldRegistry resolves all configured fields for
│ every cart line item (price, description, MATNR, …)
▼
Transfer form (OCI) / PunchOutOrderMessage preview (cXML)

3. Transfer​

Buyer clicks "Transfer"
│
│ POST /agiqon/connector/session/logout?transferred=1
▼
Fire ConnectorTransferEvent
│ TransmissionSubscriber.onTransfer()
│ → Save cart payload in Transmission.cartPayload
▼
Fire ConnectorSessionLogoutEvent
│ TransmissionSubscriber.onLogout()
│ → Status: Transferred
│ → TransmissionMode::Auto: create Shopware order
│ Delete session + cart
▼
OCI: HTML form is submitted to the procurement system's hookUrl
cXML: PunchOutOrderMessage is returned in the Twig template

Extension points​

PointMechanism
Add custom fieldsCustom AbstractDataField + service tag agiqon_connector.data_field
Add custom field typesCustom enum with DataFieldTypeInterface + custom LineItemContextResolver
Modify OCI response before returnListener on OciResponseGenerationEvent
Modify cXML response before returnListener on CxmlResponseGenerationEvent
Extend transfer logicListener on ConnectorTransferEvent
Extend login/logout logicListener on ConnectorSessionLoginEvent / ConnectorSessionLogoutEvent
Support custom line item types for ordersListener on ConnectorCartLineItemResolveEvent