Perfect Day in Shopify anbinden.
Verkauf deine Perfect-Day-Coupons über deinen Shopify-Shop. Der einzige etwas knifflige Punkt: Shopifys nativer Webhook liefert Metafields nicht mit — dafür brauchst du eine kleine Bridge. Wir zeigen dir drei Wege, vom einfachsten zum flexibelsten.
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 — Produkt im Shopify-Admin anlegen
-
Pro Coupon ein Shopify-Produkt
Shopify-Admin → Products → Add product. Titel, Beschreibung, Preis und Bilder eintragen — wie bei jedem anderen Produkt. „Save" klicken.
Schritt 2 — Coupon-ID als Metafield ans Produkt hängen
Damit Shopify weiß, welcher Plattform-Coupon zu diesem Produkt gehört, hinterlegst du die Coupon-ID als Metafield.
-
Metafield-Definition einmalig anlegen
Shopify-Admin → Settings → Custom data → Products → „Add definition". Felder:
- Name:
Perfect Day Coupon-ID - Namespace and key:
perfectday.coupon_id - Type: Integer (one value)
Speichern — diese Definition gilt jetzt für alle Produkte.
- Name:
-
Coupon-ID pro Produkt eintragen
Im Produkt-Editor runterscrollen zum Block „Metafields" → „Perfect Day Coupon-ID" → Wert eintragen (z. B.
15114) → „Save". Das Produkt ist jetzt mit dem Plattform-Coupon verknüpft.
Schritt 3 — Bridge einrichten (eine von drei Optionen)
Hier kommt der Punkt, an dem Shopify allein nicht reicht. Wähle die Option, die zu deinem Shopify-Plan passt.
-
Option A — Shopify Flow (Plus / Advanced Plan)
Wenn du Shopify Plus oder Advanced hast, ist Shopify Flow bereits dabei. Shopify-Admin → Apps → Shopify Flow → „Create workflow" → Template „Order paid". Füge eine „Run code"-Action mit folgendem Skript hinzu:
Vollständigen Code anzeigen — JavaScript · Flow „Run code"
export default function transform(input) { const order = input.order; const items = order.lineItems.nodes .filter(li => li.product?.metafield?.value) .map(li => ({ coupon_id: parseInt(li.product.metafield.value, 10), count: li.quantity })); if (items.length === 0) return { skip: true }; return { payload: { shop_order_id: String(order.name), shop_type: "shopify", shop_domain: order.shop?.myshopifyDomain || "shop", customer: { email: order.customer?.email || order.email, name: `${order.customer?.firstName || ''} ${order.customer?.lastName || ''}`.trim(), locale: order.customerLocale || "de" }, items, order_total_cents: Math.round(parseFloat(order.totalPriceSet.shopMoney.amount) * 100), currency: order.totalPriceSet.shopMoney.currencyCode, placed_at: order.processedAt } }; } -
Option A — HTTP-Request-Action anhängen
Danach eine „Send HTTP request"-Action: Method
POST, URLhttps://plattform.deinperfectday.de/wp-json/perfectday/shop/webhook/order, Body{{ steps.code.payload | json }}. Header:Content-Type: application/json Authorization: Basic <DEINE_BASE64_AUTH> -
Base64-Auth erzeugen
Den Authorization-Wert generierst du auf Mac/Linux im Terminal — das Ergebnis kommt hinter
Basicin den Header. Danach den Workflow aktivieren.echo -n "DEIN_USERNAME:DEIN APP PASSWORD" | base64 -
Option B — Bridge via Make.com / Zapier (jeder Plan)
Nutzt du Shopify Basic/Starter ohne Flow: Erstelle bei make.com oder Zapier einen Workflow — Trigger „Watch Orders (Paid)", Action 1 „Get a Product" (holt das Metafield), Action 2 „HTTP → Make a request" mit Basic-Auth an die Webhook-URL. Ein ausführliches Screen-Recording bekommst du auf Support-Anfrage.
-
Option C — Custom Cloud Function
Für technik-affine Anbieter: eine eigene Cloud Function (Vercel / Cloudflare Workers / AWS Lambda), die den Shopify-Webhook empfängt, das Metafield abruft und ans Perfect-Day-Webhook weitergibt. Ein vollständiges Code-Template senden wir auf Support-Anfrage.
Schritt 4 — Test-Bestellung
-
Bestellung auslösen und prüfen
Mach eine Test-Bestellung im Shopify-Shop (Bogus-Gateway nutzen, falls du keine echte Zahlung auslösen willst) und markiere sie als „bezahlt". Dann prüfen:
- Plattform-Backoffice → Perfect Day → Shop-Bestellungen: neue Bestellung mit
shop_type=shopify? - Test-Kunden-Mailbox: Brand-Mail mit Coupon-Codes + Druck-Button angekommen?
- Plattform-Backoffice → Perfect Day → Shop-Bestellungen: neue Bestellung mit
Troubleshooting.
Webhook gibt 401 — authentication required
Username falsch — es ist der WordPress-Benutzername (user_login), nicht die E-Mail. Oder das Anwendungspasswort wurde widerrufen bzw. mit Kopier-Fehler übernommen. Im Zweifel ein neues generieren.
Webhook gibt 403 — forbidden_coupon
Die coupon_id im Metafield existiert nicht in deinem Plattform-Backoffice oder gehört zu einem anderen Anbieter. Prüfe unter Gutscheine, ob die ID dort vorkommt.
Webhook gibt 400 — validation
Fehlende oder ungültige Felder im JSON-Body. Häufig: customer.email fehlt, weil der Kunde als Gast bestellt hat. Das im Flow / Workflow abfangen.
Bestellung kommt durch, aber keine Mail beim Kunden
Im Plattform-Backoffice die Detail-Ansicht der Bestellung öffnen und den Mail-Status prüfen. Rot = SMTP-Problem auf unserer Seite, dann bitte den Support kontaktieren. Sonst: Spam-Ordner des Kunden prüfen.
Bestellung kommt doppelt durch
Kein Problem — der Webhook hat einen Idempotenz-Schutz. Beim zweiten Versuch siehst du duplicate: true in der Response, es werden keine doppelten Codes erzeugt und keine doppelte Mail versendet.
Lieber von uns einrichten lassen?
Die Bridge-Konfiguration ist der knifflige Teil bei Shopify. Wir richten dir den Shopify-Flow oder den Make.com-Workflow komplett ein — du gibst uns nur temporären Zugriff, wir übernehmen den Rest.
Noch Fragen?
Warum brauche ich überhaupt eine Bridge?
Welche Option ist die einfachste?
Ist das App-Password sicher in der Bridge?
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