Shop-Diagnose 28.08. (SSH): Warteliste leer ([]), alles abgearbeitet, Ampel grün. - Plan V7.0: eigener AP-38-Abschnitt (Diagnose/Ursache/Behebung); Statustabelle auf „alle APs erledigt" aktualisiert (nur noch Connector-Rollout v1.6.0 offen). - Neu: dev/partnercenter-api/README.md — Status-Ampel, Cron einrichten/prüfen (wp cron event list/schedule/run), Fehlersuche (Auth/curl), v1.6.0-Änderungen, Rollout-Checkliste. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
5.9 KiB
PARTNERCENTER API Connector
Verbindet den WooCommerce-Shop (gruene-seele.bio) mit dem PARTNERCENTER-/ERP-System
(https://api.gruene-seele.bio/): leitet Bestellungen weiter, überträgt DHL-Labels und
gleicht den Versandstatus („Ampel" in der Bestellliste) ab.
- Aktuelle Version: 1.6.0
- API-Basis-URL:
https://api.gruene-seele.bio/(fest im Code,public/partnercenter-api/partnercenter-api.php) - Zugangsdaten: als Konstanten in der
wp-config.phpdes Shops:define('PARTNERCENTER_API_EMAIL', '…'); define('PARTNERCENTER_API_PASSWORD', '…'); define('PARTNERCENTER_API_DEV', false); // true = Testmodus
Die Status-Ampel (WICHTIG)
In der WooCommerce-Bestellliste (Spalte „PARTNERCENTER Status") zeigt ein farbiger Punkt den Fulfilment-Status aus dem ERP:
| ERP-Status | Bedeutung | Anzeige im Shop |
|---|---|---|
open |
offen | 🟠 orange |
process |
in Bearbeitung / Wartestellung | 🟠 orange |
sent |
versendet | 🟢 grün |
close |
abgeschlossen | 🟢 grün |
pick_up |
Abholung (erfüllt) | 🟢 grün |
cancel |
storniert | 🔴 rot |
| (leer/unbekannt) | — | ⚠️ |
So funktioniert der Abgleich
- Beim Weiterleiten einer Bestellung setzt der Connector das Meta
_partnercenter_api_order_status = openund merkt sich die Bestell-ID in der Option_partnercenter_api_unclear_order_ids. - Der stündliche WP-Cron-Event
partnercenter_api_fetch_orders_statusfragt für alle „unklaren" BestellungenPOST /api/wp/statusab und schreibt den neuen Status ins Meta. - Erreicht eine Bestellung einen Endzustand (
sent,close,pick_up,cancel), fällt sie aus der Warteliste.
Merksatz: Läuft dieser Cron nicht (oder scheitert die API-Anmeldung), bleibt jede Bestellung auf ihrem Initialwert
open= orange — egal wie korrekt das ERP antwortet. Genau das war die Ursache des „Ampel bleibt orange"-Fehlers (Testphase 08/2026, AP-38).
Cron einrichten & prüfen
Der Shop läuft mit DISABLE_WP_CRON = true; WP-Cron wird über einen System-Crontab
angestoßen (empfohlen, verlässlicher als der Request-basierte WP-Cron):
*/5 * * * * wget --delete-after --timeout=50 --tries=1 https://www.gruene-seele.bio/wp-cron.php > /dev/null 2>&1
Ist der Status-Event eingeplant?
wp cron event list | grep -i partnercenter
- Zeile mit
partnercenter_api_fetch_orders_status(recurrence1 hour) → alles gut. - Keine Ausgabe → der Event fehlt (Hauptursache des Ampel-Bugs). Nachplanen:
wp cron event schedule partnercenter_api_fetch_orders_status now hourly
Seit v1.6.0 selbstheilend:
partnercenter_api_ensure_cron()(Hookinit) plant den Event bei jedem Request automatisch nach, falls er fehlt. Ein manuelles Nachplanen ist danach im Normalfall nicht mehr nötig — der obige Check bleibt aber das Diagnosemittel Nr. 1.
Abgleich manuell auslösen und prüfen
# Wie viele Bestellungen warten aktuell auf einen Status?
wp option get _partnercenter_api_unclear_order_ids --format=json
# ( [] = nichts offen / alles abgearbeitet )
# Abgleich sofort ausführen …
wp cron event run partnercenter_api_fetch_orders_status
# … und an einer bekannten, versendeten Bestellung prüfen:
wp post meta get <ORDER_ID> _partnercenter_api_order_status
# erwartet: sent (→ grün)
Fehlersuche: Ampel bleibt orange
- Event eingeplant? →
wp cron event list | grep partnercenter(siehe oben). Fehlt er, nachplanen bzw. Plugin einmal deaktivieren/reaktivieren. - Nach
wp cron event runbleibt der Statusopen? → Dann scheitert die API-Anmeldung. Konstanten prüfen und Login direkt testen:wp config get PARTNERCENTER_API_EMAIL wp config get PARTNERCENTER_API_PASSWORD # Login (Werte einsetzen) — es muss ein access_token zurückkommen: curl -s -X POST https://api.gruene-seele.bio/auth/login \ -H "Content-Type: application/json" \ -d '{"email":"<EMAIL>","password":"<PASS>","remember_me":true}' # Status mit dem Token abfragen — erwartet "status":"sent": curl -s -X POST https://api.gruene-seele.bio/wp/status \ -H "Content-Type: application/json" \ -H "Authorization: Bearer <TOKEN>" \ -d '{"wp_order_numbers":[<ORDER_ID>]}' - Login schlägt fehl (kein Token / 401) → Zugangsdaten in
wp-config.phpfalsch/abgelaufen. api.gruene-seele.bioaus dem Shop nicht erreichbar → Firewall/DNS:curl -sI https://api.gruene-seele.bio/ | head -1- Status ist
freeoder ⚠️ → veraltete Connector-/ERP-Version. Ab v1.6.0 ist das Status-Mapping vollständig (Wartestellungprocess,pick_up,cancel).
Änderungen in v1.6.0
- AP-34 — Varianten-Artikelnummer:
compose_cart_content()sendet jetzt die eigene SKU der Variation ($order_item->get_product()->get_sku(), Fallback Eltern-SKU) statt der Eltern-SKU. Vorbedingung: jede Variation braucht im Shop eine eigene, gepflegte Artikel-Nr. (SKU) = diewp_numberdes jeweiligen ERP-Produkts. - AP-38 — Status-Ampel:
partnercenter_api_ensure_cron()(Hookinit) plant den Status-Cron selbstheilend nach.- Ampel-Mapping ergänzt:
pick_up→ grün,cancel→ rot (vorher beide ⚠️). - Endzustände
pick_up/cancelfallen aus der stündlichen Warteliste.
Rollout
- Plugin-Ordner
partnercenter-api/inwp-content/plugins/austauschen. - Einmal deaktivieren + reaktivieren (oder mind. eine Seite aufrufen, damit
partnercenter_api_ensure_cron()greift). wp cron event list | grep partnercenter→ Event muss vorhanden sein.wp cron event run partnercenter_api_fetch_orders_statusund an einer versendeten Bestellungsent/grün prüfen.