Zum Inhalt springen
 WooCommerce · 10 Min · einfach

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.

  1. 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.

  2. Plugin konfigurieren

    WP-Admin → Einstellungen → Perfect Day Konnektor. Trag ein:

    • Plattform-Host: https://plattform.deinperfectday.de
    • Username + Anwendungspasswort aus der Vorbereitung

    Speichern.

  3. Coupon-ID pro Produkt eintragen

    WP-Admin → Produkte → Produkt öffnen. Im Seitenleisten-Block „Perfect Day" die Coupon-ID eintragen (15114 etc.) und das Produkt speichern.

  4. 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.

  1. 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.

  2. Snippet in die functions.php des Child-Themes

    Füge folgenden Code in die functions.php deines aktiven Child-Themes ein. Trag deinen Username und das Anwendungspasswort an den markierten Stellen ein.

    Vollständigen Code anzeigen — PHP · functions.php
    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());
        }
    }
  3. Credentials sicher ablegen

    Das Anwendungspasswort direkt im PHP-Code zu haben, ist suboptimal. Besser: per wp-config.php-Konstante definieren und im Snippet referenzieren.

    PHP · wp-config.php
    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;
  4. 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.

Wenn etwas klemmt

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.

Setup-Service

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.

Häufige Fragen

Noch Fragen?

Weg 1 oder Weg 2 — was soll ich nehmen?
Für rund 95 % der Anbieter: Weg 1 (Connector-Plugin). Es aktualisiert sich automatisch über das WP-Plugin-Update. Weg 2 (Snippet) ist für Anbieter mit eigener Dev-Hand, die ein leichtgewichtiges Setup ohne zusätzliches Plugin bevorzugen. Funktional sind beide identisch.
Funktioniert das auch mit einer alten WooCommerce-Version?
Ja. Falls das Connector-Plugin eine zu neue WooCommerce-Version verlangt, nimm Weg 2 mit dem Snippet — der funktioniert auch mit älteren Installationen.

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