Ein individueller Shop oder ERP ist einer, für den es kein fertiges Plug-in gibt, sodass Ihr Entwickler den Konfigurator mit dem Warenkorb verbindet. Die Regel hinter allem hier ist ein Satz: Ein Preis, den der Browser gesendet hat, darf nie zum Warenkorbpreis werden. Ihr Server prüft ihn zuerst bei CutOptim.
CutOptim nimmt keine Zahlungen entgegen und hostet keinen Shop; Warenkorb, Kasse und Zahlung bleiben bei Ihnen. Es gibt noch kein SDK. Die Konfigurator-API-Referenz listet jede Route, jeden Fehlercode und jede Grenze auf, mit einem OpenAPI-3.1-Dokument; diese Seite, die Seite zu Bestellungen und der Referenzcode führen Schritt für Schritt durch die Integration.
Zwei Schlüssel
- Der öffentliche Schlüssel (publishable key) steht in Ihrer Seite für die Einbettung. Er kann nur tun, was ein Käufer tut, und nur von den Domains, die Sie für ihn aufgelistet haben.
- Der geheime Schlüssel (secret key) ist für Ihren Server und kommt nie in eine Seite. Er wird als
Authorization: Bearer <key>an den Dienst gesendet, standardmäßighttps://cfg.cutoptim.com. Senden Sie bei einem POST immerContent-Type: application/json.
Schritt 1: das Angebot vor dem Warenkorb prüfen
Bestellt der Kunde, erhält Ihre Seite ein cutoptim:order-Ereignis mit einem Angebots-Token. Senden Sie das Token an Ihren Server und von dort:
curl -X POST https://cfg.cutoptim.com/cfg/v1/quote/verify \
-H "Authorization: Bearer $CFG_API_SECRET" \
-H "Content-Type: application/json" \
-d '{"quoteToken":"<token from the page>"}'
Die Antwort ist 200 mit {"valid": true, "redeemed": false, "claims": {...}} oder {"valid": false, "reason": "..."}. Auch eine Ablehnung ist ein 200, lesen Sie also valid. Behandeln Sie einen Timeout, ein 401, ein 500 oder einen unlesbaren Body als nicht geprüft und lehnen Sie die Position ab. Vergleichen Sie dann die Claims mit Ihrer Warenkorbposition: Der Tenant ist Ihrer, die Währung ist die des Warenkorbs, der Ablauf liegt in der Zukunft, und der Angebots-Hash entspricht dem Hash des Angebots, das Ihre Seite angezeigt hat. Der Referenzcode enthält die Funktion, die diesen Hash berechnet.
Eine lokale Prüfung von Form, Tenant und Ablauf des Tokens ist günstiger, kann aber die Signatur nicht beweisen, weil der Signaturschlüssel nicht herausgegeben wird. Nutzen Sie sie nur als Vorprüfung.
Schritt 2: die Bestellung kontrollieren
Die Prüfung des Angebots zeigt, dass das Preisversprechen echt ist. Sie zeigt nicht, welche Bestellung der Browser meint. Bevor Sie anhand einer Bestell-ID speichern oder ausliefern, rufen Sie sie auf Ihrem Server mit GET /cfg/v1/orders/{id} und Ihrem geheimen Schlüssel ab. Sie liefert Plan-Hash, Angebots-Hash, Status, Währung und die drei Summen in kleinsten Währungseinheiten, keine personenbezogenen Daten. Vergleichen Sie sie mit dem, was Sie geprüft haben.
Schritt 3: den Webhook empfangen
Konfigurieren Sie einen Webhook, wie auf der Seite zu Bestellungen beschrieben. Ihr Empfänger:
- liest den rohen Body, bevor er ihn parst;
- liest den Header
CutOptim-Signature,t=<unix seconds>,v1=<hex>(während ein Secret rotiert, kann es zweiv1-Werte geben); - berechnet
HMAC-SHA256(secret, "<t>.<raw body>")neu, vergleicht in konstanter Zeit und weist einen Zeitstempel ab, der mehr als etwa fünf Minuten abweicht; - beansprucht die Ereignis-ID aus
CutOptim-Event-Id, bevor er irgendeine Arbeit erledigt, und ignoriert eine bereits verarbeitete ID; - ignoriert Ereignistypen, die er nicht kennt, und antwortet mit
2xx, damit der Sender nicht umsonst wiederholt.
Das Empfänger-Secret erhalten Sie mit POST /cfg/v1/admin/webhooks/{id}/secret und Ihrem geheimen Schlüssel. Halten Sie Secrets in Ihrer Umgebung, nie in einer Seite, einem Repository oder einem Log.
Referenzcode
Zwei kleine, abhängigkeitsfreie Beispiele zeigen alle drei Schritte. Sie sind Code zum Lesen und Kopieren, kein gehosteter Dienst:
- Node 18 oder höher: cutoptim-verify.mjs und example-server.mjs.
- PHP 7.4 oder höher: CutOptimVerify.php und example-webhook.php.
Ihre Secrets sind Platzhalter. Der In-Memory-Duplikatspeicher in den Beispielen ist ein Stellvertreter: Halten Sie in der Produktion verarbeitete Ereignis-IDs in Ihrer Datenbank und beanspruchen Sie eine ID in derselben Transaktion, die die Bestellung festhält.
Dieselben Schritte, mit den genauen Anfragen und Antworten, stehen in der Referenz: Eigener Shop oder ERP.
Schlüssel rotieren
Ein Schlüssel oder Webhook-Secret kann mit Überlappung rotiert werden, sodass der alte für eine festgelegte Zeit weiter funktioniert, während Sie den neuen ausrollen. Bei einer Webhook-Rotation trägt eine Zustellung sieben Tage lang zwei v1-Signaturen, und das Akzeptieren einer beliebigen davon lässt Sie ohne Ausfallzeit umstellen. Konsolen-Schaltflächen für die Rotation mit Überlappung sind noch nicht gebaut; die Konsole kann Schlüssel erstellen und widerrufen.
Andere Wege, Bestellungen zu empfangen
Für WooCommerce nutzen Sie das Plug-in. Wenn Sie nur Schnittpläne in Ihrer eigenen Software benötigen, ohne eingebetteten Kundenbildschirm, ist das die Engine API.