Perfect Day mit anderen Shops anbinden.
Du nutzt Wix, Squarespace, Jimdo, Webflow Ecommerce oder einen selbstgebauten Shop? Solange dein Shop bei jeder bezahlten Bestellung einen Webhook senden kann — direkt oder über einen Dienst wie Make.com — lässt sich Perfect Day anbinden.
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.
Die Mindest-Anforderungen
-
Drei Dinge muss dein Shop können
- Order-Webhook auslösen bei „Bestellung bezahlt"
- HTTP-POST mit Basic-Auth-Header schicken
- JSON-Payload in unserem Format konstruieren
Kann dein Shop nur Bestell-Mails verschicken und sonst nichts? Dann nutze einen Bridge-Dienst wie Zapier oder Make.com, der die Bestell-Mail parst und den HTTP-Call macht.
Der erforderliche JSON-Body
Egal woher die Daten kommen — am Ende muss dieser JSON-Body an den Webhook gehen.
-
Payload-Format
Pflichtfelder:
shop_order_id,shop_type,shop_domain,customer.email,items[].coupon_idunditems[].count. Optional sindcustomer.name,customer.locale,order_total_cents,currencyundplaced_at.{ "shop_order_id": "1042", "shop_type": "custom", "shop_domain": "shop.example.com", "customer": { "email": "kunde@example.com", "name": "Max Mustermann", "locale": "de" }, "items": [ { "coupon_id": 15114, "count": 1 } ], "order_total_cents": 5000, "currency": "EUR", "placed_at": "2026-05-14T10:42:00Z" } -
Auth-Header
Standard HTTP Basic Auth. Den Wert berechnest du aus Username und Anwendungspasswort.
Authorization: Basic <base64(USERNAME:APP_PASSWORD)> Content-Type: application/json -
Base64-Wert erzeugen
Auf Mac/Linux im Terminal — das Ergebnis kommt hinter
Basic:echo -n "dein-name:xxxx xxxx xxxx xxxx xxxx xxxx" | base64
Bridge-Optionen für Shops ohne native Webhook-Funktion
-
Option 1 — Zapier oder Make.com
Beide bieten Trigger für viele Shop-Systeme plus eine HTTP-Action für den POST. Beispiel-Workflow (Make.com): Trigger „Watch new orders", optionale Action „Get product details" für den Coupon-ID-Lookup, dann „HTTP → Make a request" an die Webhook-URL. Der kostenlose Make.com-Tarif reicht für rund 1.000 Bestellungen pro Monat.
-
Option 2 — IFTTT, n8n, Pipedream
Gleicher Workflow, andere Oberfläche. n8n ist selbst hostbar und damit DSGVO-freundlicher. IFTTT ist eingeschränkter (kein komplexes JSON-Mapping).
-
Option 3 — Eigener Bridge-Server
Für eine eigene Webhook-URL: Cloudflare Workers (kostenlos bis 100k Requests/Tag), Vercel Serverless Functions, AWS Lambda oder ein eigener Node/PHP-Server. Beispiel-Code für Cloudflare Workers:
Vollständigen Code anzeigen — TypeScript · Cloudflare Worker
export default { async fetch(req: Request): Promise<Response> { if (req.method !== 'POST') return new Response('Method not allowed', { status: 405 }); const shopPayload = await req.json(); const pfdPayload = mapToPerfectDay(shopPayload); const auth = btoa('DEIN-USER:DEIN APP PWD'); const res = await fetch( 'https://plattform.deinperfectday.de/wp-json/perfectday/shop/webhook/order', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': 'Basic ' + auth, }, body: JSON.stringify(pfdPayload), } ); return new Response(await res.text(), { status: res.status }); }, }; function mapToPerfectDay(shopPayload: any) { return { shop_order_id: shopPayload.orderNumber, shop_type: 'custom', shop_domain: shopPayload.shop?.domain, customer: { email: shopPayload.customer?.email, name: shopPayload.customer?.name, locale: 'de', }, items: shopPayload.lineItems.map((li: any) => ({ coupon_id: parseInt(li.metadata?.pfd_coupon_id, 10), count: li.quantity, })).filter((it: any) => it.coupon_id > 0), order_total_cents: Math.round(shopPayload.totalAmount * 100), currency: shopPayload.currency, placed_at: shopPayload.paidAt, }; }
Coupon-ID-Mapping bei Shops ohne Custom-Fields
-
Mapping in der Bridge pflegen
Unterstützt dein Shop keine Custom-Felder pro Produkt (manche sehr einfachen Shop-Builder), pflegst du das Mapping direkt in der Bridge. Voraussetzung: dein Shop-Produkt-Slug ist eindeutig und stabil.
const COUPON_MAPPING: Record<string, number> = { 'gutschein-25-eur': 15114, 'gutschein-50-eur': 15115, 'gutschein-100-eur': 15116, }; // In mapToPerfectDay(): const couponId = COUPON_MAPPING[li.productSlug];
Test-Bestellung
-
Bestellung auslösen und prüfen
Egal welche Bridge-Variante: Test-Bestellung tätigen und im Plattform-Backoffice unter Perfect Day → Shop-Bestellungen auf den Eintrag mit
shop_type=customwarten. Kunden-Mailbox auf die Brand-Mail prüfen.
Troubleshooting.
Webhook erreicht den Plattform-Server nicht
Die Plattform akzeptiert nur HTTPS-POSTs. Hat dein Bridge-Server ein gültiges SSL-Zertifikat und ist er öffentlich erreichbar? Test von extern: curl -v https://plattform.deinperfectday.de/wp-json/perfectday/shop/webhook/order muss eine 401 zurückgeben — nicht „Connection Refused".
Auth funktioniert nicht
Der Username ist der WordPress-Benutzername (user_login), nicht die E-Mail. Beim Base64-Encoding echo -n verwenden (ohne Newline-Zeichen).
Andere Fehler-Codes (400, 403, 429)
400 = ungültiger JSON-Body (oft fehlende Kunden-E-Mail), 403 = die Coupon-ID gehört nicht zu deinem Account, 429 = Rate-Limit, kurz warten und erneut senden.
Lieber von uns einrichten lassen?
Ist dein Shop hier nicht aufgeführt oder hängst du beim Bridge-Setup? Schick uns einen Support-Request mit deinem Shop-System, den nativen Fähigkeiten (Webhooks, Custom-Fields, API) und Beispiel-Daten einer Test-Bestellung. Wir liefern dir ein vorgefertigtes Mapping-Template oder helfen bei eigenem Code.
Noch Fragen?
Welche Shops sind „andere Shops"?
Was kostet eine Bridge über Make.com?
Was, wenn mein Shop gar keine Webhooks kann?
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