Perfect Day in WooCommerce anbinden.
Du nutzt WooCommerce? Es gibt zwei Wege: das native Connector-Plugin (empfohlen, einfacher) oder die Webhook-Variante per Code-Snippet. Beide schreiben in dieselbe Plattform — das Ergebnis ist identisch.
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.
Weg 1 — Native Connector (empfohlen, ~10 Min)
Der einfachste Weg: Wir pflegen ein eigenes WordPress-Plugin für WooCommerce.
-
Connector-Plugin installieren
WP-Admin deines WooCommerce-Shops → Plugins → Hinzufügen. Lade das Plugin-ZIP „Perfect Day Shop-Konnektor" hoch (bekommst du von uns — Download-Link auf Anfrage über den Support) und aktiviere es.
-
Plugin konfigurieren
WP-Admin → Einstellungen → Perfect Day Konnektor. Trag ein:
- Plattform-Host:
https://plattform.deinperfectday.de - Username + Anwendungspasswort aus der Vorbereitung
Speichern.
- Plattform-Host:
-
Coupon-ID pro Produkt eintragen
WP-Admin → Produkte → Produkt öffnen. Im Seitenleisten-Block „Perfect Day" die Coupon-ID eintragen (
15114etc.) und das Produkt speichern. -
Test-Bestellung
Bestellung im Shop tätigen, Status auf „abgeschlossen" setzen. WP-Admin → Bestellungen → Note prüfen: „Perfect Day Codes generiert: 1". Die Bestellung erscheint im Plattform-Backoffice unter Perfect Day → Shop-Bestellungen, der Kunde bekommt die Brand-Mail.
Weg 2 — Über den generischen Webhook (~15 Min)
Wenn du das Connector-Plugin nicht installieren willst — z. B. bei einer sehr alten WooCommerce-Version oder für ein leichtgewichtigeres Setup — sprichst du den Webhook über ein kleines Code-Snippet an.
-
Coupon-ID als Custom-Field am Produkt
WP-Admin → Produkte → Produkt öffnen → Block „Eigene Felder" (falls nicht sichtbar: oben rechts „Bildschirm-Optionen" → „Eigene Felder" aktivieren). Neues Feld:
- Name:
pfd_coupon_id - Wert:
15114(deine Plattform-Coupon-ID)
„Aktualisieren" klicken.
- Name:
-
Snippet in die functions.php des Child-Themes
Füge folgenden Code in die
functions.phpdeines aktiven Child-Themes ein. Trag deinen Username und das Anwendungspasswort an den markierten Stellen ein.Vollständigen Code anzeigen — PHP · functions.php
add_action('woocommerce_order_status_completed', 'pfd_send_to_perfectday', 10, 1); function pfd_send_to_perfectday($order_id) { $order = wc_get_order($order_id); if (!$order) return; // Idempotenz-Schutz: nur einmal pro Bestellung if ($order->get_meta('_pfd_webhook_sent', true)) return; $items = array(); foreach ($order->get_items() as $item) { $product = $item->get_product(); if (!$product) continue; $coupon_id = get_post_meta($product->get_id(), 'pfd_coupon_id', true); if (empty($coupon_id)) continue; $items[] = array( 'coupon_id' => (int) $coupon_id, 'count' => (int) $item->get_quantity(), ); } if (empty($items)) return; $payload = array( 'shop_order_id' => (string) $order->get_order_number(), 'shop_type' => 'woocommerce', 'shop_domain' => parse_url(home_url(), PHP_URL_HOST), 'customer' => array( 'email' => $order->get_billing_email(), 'name' => trim($order->get_billing_first_name() . ' ' . $order->get_billing_last_name()), 'locale' => substr(get_locale(), 0, 2), ), 'items' => $items, 'order_total_cents' => (int) round($order->get_total() * 100), 'currency' => $order->get_currency(), 'placed_at' => $order->get_date_paid() ? $order->get_date_paid()->format('c') : current_time('c'), ); // ⬇ DEINE Werte hier eintragen ⬇ $username = 'DEIN-USERNAME'; $app_pwd = 'xxxx xxxx xxxx xxxx xxxx xxxx'; // ⬆ DEINE Werte hier eintragen ⬆ $response = wp_remote_post( 'https://plattform.deinperfectday.de/wp-json/perfectday/shop/webhook/order', array( 'headers' => array( 'Content-Type' => 'application/json', 'Authorization' => 'Basic ' . base64_encode($username . ':' . $app_pwd), ), 'body' => wp_json_encode($payload), 'timeout' => 15, ) ); if (!is_wp_error($response)) { $order->update_meta_data('_pfd_webhook_sent', '1'); $order->add_order_note(sprintf( 'Perfect Day: Webhook gesendet (HTTP %d)', wp_remote_retrieve_response_code($response) )); $order->save(); } else { $order->add_order_note('Perfect Day: Webhook fehlgeschlagen — ' . $response->get_error_message()); } } -
Credentials sicher ablegen
Das Anwendungspasswort direkt im PHP-Code zu haben, ist suboptimal. Besser: per
wp-config.php-Konstante definieren und im Snippet referenzieren.define('PFD_API_USER', 'dein-name'); define('PFD_API_PASSWORD', 'xxxx xxxx xxxx xxxx xxxx xxxx'); // Im Snippet dann: // $username = PFD_API_USER; // $app_pwd = PFD_API_PASSWORD; -
Test-Bestellung
Bestellung tätigen, Status auf „abgeschlossen" setzen, dann die Bestellung in WP-Admin öffnen und unten in den Notizen prüfen:
Perfect Day: Webhook gesendet (HTTP 200)→ alles gut.
Troubleshooting.
Der Code wird nicht ausgeführt
Liegt das Snippet im richtigen Theme (Child-Theme!)? Bei einem Theme-Update ist es sonst weg. Außerdem: Der Hook woocommerce_order_status_completed feuert nur beim Status-Wechsel auf „abgeschlossen". Wenn deine Zahlungsmethode Bestellungen direkt auf „in Bearbeitung" lässt, ändere den Hook auf woocommerce_order_status_processing.
HTTP 403 — forbidden_coupon
Die pfd_coupon_id im Custom-Field zeigt auf einen Coupon, der nicht zu deinem Anbieter-Account gehört. Prüfe im Plattform-Backoffice unter Gutscheine, ob die ID dort existiert.
HTTP 401 — authentication required
Username falsch (es ist der WordPress-Benutzername, nicht die E-Mail) oder das Anwendungspasswort falsch, widerrufen oder mit Kopier-Fehler übernommen.
Lieber von uns einrichten lassen?
WooCommerce ist der einfachste Fall — meist schaffst du das selbst. Falls du trotzdem Hilfe willst: Wir installieren und konfigurieren den Connector für dich, inklusive Coupon-ID-Mapping deiner Produkte.
Noch Fragen?
Weg 1 oder Weg 2 — was soll ich nehmen?
Funktioniert das auch mit einer alten WooCommerce-Version?
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