Facebook Pixel: Erweiterbarkeit
Facebook Pixel Plugin für Sylius: eigene CAPI-Consent-Evidence-Provider, das Event PixelEventDispatched und die Verschlüsselung des Zugriffstokens.
Facebook Pixel: Erweiterbarkeit
Live Demo: Teste dieses und weitere Plugins live — ohne Installation, ohne Risiko: demo.markus-michalski.net
Eigene CAPI-Consent-Evidence-Provider
Die serverseitige Einwilligungsprüfung übernimmt CapiConsentPolicyInterface. Sie befragt alle Services, die Mmd\SyliusFacebookPixelPlugin\Consent\CapiConsentEvidenceProviderInterface implementieren, nacheinander und lässt den Versand zu, wenn der Channel keinen Nachweis verlangt oder mindestens ein Provider true zurückgibt:
interface CapiConsentEvidenceProviderInterface
{
public function isConsentVerified(ChannelInterface $channel): bool;
}
Der eingebaute Provider (KlaroConsentChecker) liest direkt die Tabelle mmd_sylius_klaro_channel_configuration von mmd/sylius-klaro-consent-plugin (keine Composer-Abhängigkeit, zur Laufzeit erkannt). Er bestätigt die Einwilligung nur, wenn alle Bedingungen erfüllt sind:
- Das Klaro-Plugin ist als Bundle registriert.
- Klaro hat für den Channel eine aktive Konfigurationszeile.
- Klaro speichert den Einwilligungsstatus in einem Cookie (nicht in
localStorage, das der Server nicht lesen kann). - Das Cookie enthält ein JSON-Objekt mit
facebook_pixel: true.
In jedem anderen Fall gibt er false zurück.
Um ein anderes Consent-Tool zu unterstützen, implementierst du das Interface und liest das Cookie oder den Session-Zustand des aktuellen Requests:
final class MyCmpEvidenceProvider implements CapiConsentEvidenceProviderInterface
{
public function __construct(private readonly RequestStack $requestStack) {}
public function isConsentVerified(ChannelInterface $channel): bool
{
$cookie = $this->requestStack->getCurrentRequest()?->cookies->get('my_cmp');
return null !== $cookie && str_contains($cookie, 'marketing:1');
}
}
Autoconfiguration taggt jeden Service, der das Interface implementiert, automatisch. Nur bei deaktivierter Autoconfiguration musst du den Service selbst mit mmd_sylius_facebook_pixel_plugin.capi_consent_evidence_provider taggen.
Gib nur mit echtem Nachweis
truezurück, sonstfalse. Ein werfender Provider zählt als "kein Nachweis": Die Policy fängt jede Exception und loggt eine Warnung. Provider laufen synchron innerhalb des Storefront-Requests oder der Warenkorb-Aktion, also halte sie schnell.
Event PixelEventDispatched
Bei jedem getrackten Event wird synchron Mmd\SyliusFacebookPixelPlugin\Event\PixelEventDispatched über den Symfony-EventDispatcher ausgelöst, noch während Request und Kunde verfügbar sind. Das Plugin selbst lauscht mit CapiEventListener darauf. Das Event trägt:
| Eigenschaft | Inhalt |
|---|---|
channel |
Der Sylius-Channel. |
event |
Das Enum FacebookPixelEvent (PageView, ViewContent, ViewCategory, AddToCart, InitiateCheckout, Purchase). |
eventId |
Die event_id, die auch der Browser-Aufruf trägt. |
serverContext |
IP-Adresse, User-Agent, Quell-URL, _fbc- und _fbp-Cookie des Requests. |
customData |
Die Event-Daten (content_ids, value, currency usw.). |
customerEmail, customerPhone |
Klartext-Werte, soweit bekannt (siehe Datenschutz). |
Ein eigener Listener auf dieses Event sieht also Klartext-E-Mail und -Telefonnummer; das Hashing passiert erst im CapiEventListener. Das Event wird nur ausgelöst, wenn das Event für den Channel getrackt wird. Ob ein Versand an Meta stattfindet, entscheidet erst der CapiEventListener.
Verschlüsselung des Zugriffstokens
Das Conversions-API-Zugriffstoken wird verschlüsselt gespeichert (libsodium secretbox, Zufalls-Nonce pro Verschlüsselung). Der Schlüssel wird aus dem %kernel.secret% (APP_SECRET) der Host-Anwendung plus einem plugin-spezifischen Kontext abgeleitet; es gibt kein separates Secret zu verwalten. Eine Änderung von APP_SECRET macht jedes gespeicherte Token unlesbar: Das Plugin sendet dann nichts mehr, statt abzustürzen. Gib das Token danach erneut ein.