Perfect Day in Shopware 6 anbinden.
Verkauf deine Perfect-Day-Coupons über deinen Shopware-6-Shop. Shopware liefert keinen Webhook mit Custom-Field-Inhalt out of the box — du brauchst eine kleine Bridge. Hinweis: Diese Anleitung gilt für Shopware 6. Für Shopware 5 kontaktiere bitte den Support.
Vorab nötig: Geh einmal die allgemeine Vorbereitung durch — Coupon anlegen, Anwendungspasswort holen, Webhook-URL bereitlegen. Dauert rund fünf Minuten und gilt für alle Shop-Systeme.
Schritt 1 — Custom-Field für die Coupon-ID anlegen
-
Zusatzfeld-Set erstellen
Shopware-Admin → Einstellungen → System → Zusatzfelder → „Sets erstellen". Set-Name:
Perfect Day. Unter Zuweisungen die Option „Produkt" auswählen. -
Feld hinzufügen
Neues Feld mit diesen Werten:
- Technischer Name:
pfd_coupon_id - Typ: Zahl (Integer)
- Anzeigename:
Perfect Day Coupon-ID
Speichern.
- Technischer Name:
Schritt 2 — Coupon-ID pro Produkt eintragen
-
Im Produkt-Editor eintragen
Shopware-Admin → Kataloge → Produkte → Produkt öffnen → Reiter „Spezifikationen" → Block „Zusatzfelder". Setze „Perfect Day Coupon-ID" auf den Wert aus dem Plattform-Backoffice (z. B.
15114) und speichere.
Schritt 3 — Bridge-App installieren
Shopware liefert keinen Webhook mit Custom-Field-Inhalt mit. Du brauchst eine kleine Shopware-App, die das übernimmt. Wir haben ein App-Skelett vorbereitet — auf Support-Anfrage bekommst du es fertig. Oder du baust es nach dieser Vorlage.
-
App-Manifest (manifest.xml)
Das Manifest registriert die App und den Order-Paid-Webhook. Trag deine Bridge-Domain in das
url-Attribut ein.Vollständigen Code anzeigen — XML · manifest.xml
<?xml version="1.0" encoding="UTF-8"?> <manifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://raw.githubusercontent.com/shopware/platform/trunk/src/Core/Framework/App/Manifest/Schema/manifest-1.0.xsd"> <meta> <name>PerfectDayConnector</name> <label>Perfect Day Connector</label> <description>Schickt Bestelldaten mit Perfect-Day-Coupon-IDs an die Plattform.</description> <author>DigElite</author> <copyright>(c) DigElite</copyright> <version>1.0.0</version> <license>MIT</license> </meta> <webhooks> <webhook name="order-paid" url="https://DEINE-BRIDGE-DOMAIN.example/bridge" event="state_enter.order_transaction.state.paid"/> </webhooks> </manifest> -
Bridge-Endpoint (eigener Server)
Die Bridge nimmt den Shopware-Webhook entgegen, holt pro Position das Custom-Field, transformiert ins Perfect-Day-Format und schickt es weiter. Beispiel in PHP:
Vollständigen Code anzeigen — PHP · bridge.php
<?php // bridge.php — empfängt Shopware-Webhook, ruft Shopware-API für // Produktdetails, leitet ans Perfect Day weiter. $rawPayload = file_get_contents('php://input'); $payload = json_decode($rawPayload, true); $order = $payload['data']['payload']['order'] ?? null; if (!$order) { http_response_code(400); exit; } // Shopware-API-Token holen (Server-zu-Server, eigene Credentials) $swToken = sw_admin_token(); $items = []; foreach ($order['lineItems'] as $li) { $product = sw_api_get('/api/product/' . $li['productId'], $swToken); $couponId = $product['customFields']['pfd_coupon_id'] ?? null; if (!$couponId) continue; $items[] = ['coupon_id' => (int)$couponId, 'count' => (int)$li['quantity']]; } if (empty($items)) { http_response_code(200); exit; } $pfdPayload = [ 'shop_order_id' => $order['orderNumber'], 'shop_type' => 'shopware', 'shop_domain' => parse_url($order['salesChannel']['domains'][0]['url'], PHP_URL_HOST), 'customer' => [ 'email' => $order['orderCustomer']['email'], 'name' => trim($order['orderCustomer']['firstName'] . ' ' . $order['orderCustomer']['lastName']), 'locale' => substr($order['language']['locale']['code'], 0, 2), ], 'items' => $items, 'order_total_cents' => (int) round(($order['amountTotal'] ?? 0) * 100), 'currency' => $order['currency']['isoCode'] ?? 'EUR', 'placed_at' => $order['orderDateTime'] ?? gmdate('c'), ]; $ch = curl_init('https://plattform.deinperfectday.de/wp-json/perfectday/shop/webhook/order'); curl_setopt_array($ch, [ CURLOPT_POST => 1, CURLOPT_RETURNTRANSFER => 1, CURLOPT_HTTPHEADER => [ 'Content-Type: application/json', 'Authorization: Basic ' . base64_encode('DEIN-USER:DEIN APP PWD'), ], CURLOPT_POSTFIELDS => json_encode($pfdPayload), CURLOPT_TIMEOUT => 15, ]); curl_exec($ch); curl_close($ch); http_response_code(200); -
App-ZIP packen und installieren
Manifest und Bridge-URL in eine
app.zippacken (siehe Shopware-Docs). Dann Shopware-Admin → Erweiterungen → Eigene Erweiterungen hochladen → ZIP rein → aktivieren.
Einfacher: Cloud-Bridge nutzen
Wenn dir eine eigene Bridge zu komplex ist, geht es auch ohne eigenen Server.
-
Make.com, Zapier oder n8n
Make.com: Modul „Webhooks → Custom webhook" als Trigger, „Shopware → Get a Product" zur Anreicherung, „HTTP → Make a request" als Output — rund 15 Min Setup. n8n ist selbst hostbar und damit DSGVO-freundlicher. Schick uns einen Support-Request mit deinem bevorzugten Tool, dann liefern wir einen vorkonfigurierten Workflow.
Schritt 4 — Test-Bestellung
-
Bestellung auslösen und prüfen
Test-Bestellung durchführen, Zahlung auf „Bezahlt" setzen. Die Bridge sollte automatisch von Shopware aufgerufen werden. Prüfen: Plattform-Backoffice → Perfect Day → Shop-Bestellungen (Eintrag mit
shop_type=shopware?) und die Kunden-Mailbox auf die Brand-Mail mit Druck-Button.
Troubleshooting.
Webhook wurde nicht ausgeführt
Shopware-Admin → Einstellungen → System → Logs → App-Webhooks. Stehen dort Fehler, ist meist die App-Manifest-URL falsch oder die Bridge nicht erreichbar.
HTTP 401 am Perfect-Day-Endpoint
Username oder Anwendungspasswort im Bridge-Code falsch. wp-config.php-Konstanten sind sicherer als hardcodierte Werte.
HTTP 403 — forbidden_coupon
Die pfd_coupon_id aus dem Custom-Field gehört nicht zu deinem Anbieter-Account auf der Plattform.
Bridge-Server nicht erreichbar
Läuft die Bridge auf deinem eigenen Server: SSL-Zertifikat gültig? Server öffentlich erreichbar? Shopware muss POST-Requests von seinem Cloud-Backend an deinen Server schicken können.
Lieber von uns einrichten lassen?
Shopware ist deutlich komplexer als Shopify oder WooCommerce — wegen der Bridge-Pflicht. Wir bieten dir eine fertig integrierte Shopware-App mit eingebauter Bridge, oder wir hosten die Bridge komplett auf unseren Servern. Du gibst uns nur deine Shopware-API-Zugangsdaten.
Noch Fragen?
Geht das auch ohne eigenen Server?
Funktioniert die Anleitung auch für Shopware 5?
Plant ihr ein natives Shopware-Plugin?
Shop verbunden — und jetzt?
Sobald der Webhook läuft, erscheinen alle Bestellungen automatisch in deinem Backoffice. Brauchst du eine weitere Anbindung, geht jeder weitere Shop in wenigen Minuten.
Zur Shop-Übersicht