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.0 (plugin 3.7.x)
Shopware~6.6.0 (plugin 3.6.x)

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