Architecture
The AgiqonConnector is a Shopware 6 plugin that makes the shop available as a catalog source for procurement systems.
Supported protocols
| Protocol | Version |
|---|---|
| OCI | 4.0 |
| OCI | 5.0 |
| cXML | 1.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
| Point | Mechanism |
|---|---|
| Add custom fields | Custom AbstractDataField + service tag agiqon_connector.data_field |
| Add custom field types | Custom enum with DataFieldTypeInterface + custom LineItemContextResolver |
| Modify OCI response before return | Listener on OciResponseGenerationEvent |
| Modify cXML response before return | Listener on CxmlResponseGenerationEvent |
| Extend transfer logic | Listener on ConnectorTransferEvent |
| Extend login/logout logic | Listener on ConnectorSessionLoginEvent / ConnectorSessionLogoutEvent |
| Support custom line item types for orders | Listener on ConnectorCartLineItemResolveEvent |