Zugriff & Erweiterung
ConnectorSessionService
Der ConnectorSessionService ist der zentrale Zugriffspunkt auf die ConnectorSession im PHP-Code. Er kann per Dependency Injection bezogen werden.
| Methode | Rückgabe | Beschreibung |
|---|---|---|
has() | bool | Prüft ob aktuell eine aktive Session existiert |
get() | ConnectorSession|null | Gibt die aktuelle Session zurück, oder null wenn keine vorhanden |
set(ConnectorSession) | void | Speichert eine Session (überschreibt eine ggf. vorhandene) |
clear() | void | Löscht die aktuelle Session |
putAdditionalField(string $key, mixed $value) | void | Fügt ein additionalField zur aktuellen Session hinzu (erstellt ggf. eine leere Session) |
Beispiel:
public function __construct(
private readonly ConnectorSessionService $connectorSessionService
) {}
public function doSomething(): void
{
if (!$this->connectorSessionService->has()) {
return;
}
$session = $this->connectorSessionService->get();
$hookUrl = $session->getHookUrl();
$systemType = $session->getSystemType(); // ConnectorSystemType::OCI oder ::cXML
}
additionalFields erweitern
additionalFields sind frei definierbare Key-Value-Paare, die aus der Transmission übernommen werden. Sie können jederzeit über den ConnectorSessionService ergänzt werden – am sinnvollsten im ConnectorSessionLoginEvent-Listener:
use AgiqonConnector\Connector\Event\ConnectorSessionLoginEvent;
use AgiqonConnector\Connector\Service\ConnectorSessionService;
use Symfony\Component\EventDispatcher\Attribute\AsEventListener;
#[AsEventListener(event: ConnectorSessionLoginEvent::EVENT_NAME)]
final class MySessionLoginListener
{
public function __construct(
private readonly ConnectorSessionService $connectorSessionService
) {}
public function __invoke(ConnectorSessionLoginEvent $event): void
{
// Eigenes Feld zur Session hinzufügen
$this->connectorSessionService->putAdditionalField(
'myCustomKey',
'myCustomValue'
);
}
}
Das Feld ist anschließend über $session->getAdditionalField('myCustomKey') abrufbar.
Zugriff in Twig-Templates
Sobald eine Connector-Session aktiv ist, stellt der StorefrontSessionSubscriber die Session als Template-Variable zur Verfügung:
| Variable | Verfügbar auf |
|---|---|
agiqonConnectorSession | Header, Warenkorb, Offcanvas-Warenkorb, Listing, Produktseite |
agiqonConnectorIsCxmlInspect | Header |
agiqonConnectorShowAccount | Header (nur OCI) |
agiqonConnectorPunchoutLevel2 | Listing, Produktseite |
Beispiel in Twig:
{% if agiqonConnectorSession %}
<p>Aktives System: {{ agiqonConnectorSession.system }}</p>
<p>Systemtyp: {{ agiqonConnectorSession.systemType.value }}</p>
{% endif %}
Events
Die Session feuert Events an definierten Punkten im Lebenszyklus. Diese können genutzt werden um eigene Logik einzuhängen.
| Event-Klasse | Event-Name | Wann |
|---|---|---|
ConnectorSessionLoginEvent | agiqon_connector.connector_session.login | Nach erfolgreichem Login |
ConnectorSessionLogoutEvent | agiqon_connector.connector_session.logout | Beim Logout (generisch) |
OciSessionLogoutEvent | agiqon_connector.connector_session.logout | Beim Logout einer OCI-Session |
CxmlSessionLogoutEvent | agiqon_connector.connector_session.logout | Beim Logout einer cXML-Session |
OciSessionLogoutEvent und CxmlSessionLogoutEvent erben von ConnectorSessionLogoutEvent und werden unter demselben Event-Namen gefeuert. Ein Listener auf ConnectorSessionLogoutEvent erhält alle Logout-Events; ein Listener auf OciSessionLogoutEvent nur die OCI-spezifischen.
Alle Events stellen bereit: getConnectorSession(), getSalesChannelContext(), getRequest(). Das Logout-Event liefert zusätzlich isTransferred(): bool.
Vorbefüllte additionalFields
Beim Login befüllt der Connector additionalFields automatisch mit protokollspezifischen Daten. Diese stehen anschließend in der gesamten Session zur Verfügung.
OCI
Alle GET- oder POST-Parameter des Login-Requests werden – nach Kleinschreibung der Keys – in additionalFields übertragen. Ausgenommen sind die konfigurierten Login-Parameter sowie function, da diese für den Login-Prozess selbst verbraucht werden:
| Ausgeschlossene Parameter | Beschreibung |
|---|---|
varUserName (konfiguriert) | Benutzername |
varPassword (konfiguriert) | Passwort |
varToken (konfiguriert) | Token |
varUrl (konfiguriert) | Hook-URL |
function | OCI-Funktionsparameter |
Alle anderen Parameter des Procurement-Systems (z.B. Sprache, Kostenstelle, Bestellnummer) landen direkt in additionalFields und können über $session->getAdditionalField('paramName') abgerufen werden.
cXML
Beim cXML-Login werden folgende Felder automatisch befüllt:
Feste Felder:
| Key | Typ | Quelle |
|---|---|---|
buyerCookie | string | PunchOutSetupRequest > BuyerCookie |
operation | string | Attribut @operation am PunchOutSetupRequest (create, edit, inspect) |
cxmlString | string | Vollständiger Login-XML-String |
isPunchoutLevel2 | bool | System-Konfiguration |
systemAutoIncrement | int | System-Nummer aus der Login-URL |
Extrinsic User-Identity-Felder (nur wenn im PunchOutSetupRequest vorhanden):
| Key |
|---|
UserEmail |
FirstName |
LastName |
UserPrintableName |
UserFullName |
UniqueName |
UniqueUsername |
User |
UserId |
UserPhoneNumber |
PhoneNumber |