REST-API-Spezifikation für individuelles E-Commerce
Diese technische Dokumentation beschreibt die Endpunkte, Webhooks, SSO-Verhaltensweisen und JSON-Nutzlasten, die erforderlich sind, um eine proprietäre oder Headless-E-Commerce-Plattform mit der PunchOut-Rocket-Middleware zu verbinden.
Dieses Dokument beschreibt, was die individuelle E-Commerce-Implementierung bereitstellen muss, damit sie in den Admin-Feldern konfiguriert werden kann:
- „Custom Clone Endpoint“
- „Custom Categories Endpoint“
Außerdem beschreibt es:
- Autologin-/SSO-Verhalten
- Auto-Post-Formular (Warenkorb zurück an die Middleware posten)
Es enthält erforderliche HTTP-Verben, Parameter, Parameterbedeutungen und mögliche Werte, erwartete Antworten (Erfolg & Fehler) sowie konkrete Beispiele.
1) Custom Clone Endpoint
Wird von der Middleware verwendet, um:
- Eine neue Bestellung/Sitzung im Remote-Store zu erstellen („create“-Flow), oder
- Eine bestehende Bestellung/einen bestehenden Warenkorb zu bearbeiten/zu befüllen (EDIT-Flow). Der Endpunkt muss entweder Folgendes zurückgeben:
- Eine SSO-URL, die den Käufer mit einem Einmal-Token auf der Remote-Website anmeldet. Dort kann der Nutzer – wenn es sich um den EDIT-Flow handelt und der Warenkorb befüllt ist – zum Warenkorb weitergeleitet werden, kann zum ausgewählten Produkt weitergeleitet werden (falls dies während des „create“-Flows übermittelt wird), andernfalls wird er zur Startseite weitergeleitet.
Empfohlener URL-Pfad (Beispiel):
- POST https://your-store.example.com/api/punchout/clone
HTTP-Verb
- POST (verpflichtend). Verwenden Sie einen JSON-Body (application/json). Die Middleware ruft POST auf.
Request Body (JSON)
Basisfelder (immer vorhanden)
-
- username (string) — Benutzername im E-Commerce des zu klonenden Nutzers, um einen neuen, an die Punchout-Session gebundenen Nutzer zu erzeugen.
- api_key (string) — API-Key, der mit dem in Punchout Rocket für das aktuelle E-Commerce hinterlegten übereinstimmen muss
- end_customer_id (integer) – Endkundenkennung in der Punchout-Rocket-Middleware für das E-Commerce der aktuellen Punchout-Anfrage
- session_token (string) — eindeutiges Buyer-Cookie im Fall von CXML oder eindeutige UUID o. Ä. im Fall von OCI
- operation (string) — „create“ oder „edit“ oder „inspect“ im Fall von CXML, „create“ im Fall von OCI. Im Fall von „edit“ oder „inspect“ kann eine Liste von Warenkorbpositionen übergeben werden
- gateway_base_url (string) — URL der Middleware, an die der Warenkorb später gepostet werden soll
Protokollspezifische Ergänzungen
- Wenn das aufgelöste Protokoll CXML ist, können diese zusätzlichen Felder hinzugefügt werden:
selected_item (object) — Identifikation des Produkts, zu dem der Nutzer weitergeleitet werden soll; optional im Fall der Operation „create“:
- supplier_part_id (string) — Kennung der SKU (Produktcode) im E-Commerce (falls vorhanden)
- supplier_part_auxiliary_id (string) — Kennung der Produkt-ID im E-Commerce (falls vorhanden)
Beispiel: json
{
„selected_item“:
{
„supplier_part_id“: „ABC-001“,
„supplier_part_auxiliary_id“: „19852“
}
}
cart_items (array) — die Liste der Warenkorbpositionen, die dem Warenkorb der aktuellen Session erneut hinzugefügt werden sollen. Jedes Element in cart_items enthält typischerweise:
- sku (string) — Kennung der SKU (Produktcode) im E-Commerce (falls vorhanden)
- product_id (string) — Kennung der Produkt-ID im E-Commerce (falls vorhanden)
- quantity (integer) – Menge des Artikels im Warenkorb
- price (Dezimalzahl mit Punkt als Dezimaltrennzeichen) – Stückpreis des Artikels im Warenkorb. Beachten Sie, dass beim Weiterleiten zum Warenkorb der aktuelle Preis aktualisiert wird
- description (string) – Beschreibung des Produkts
- currency (string) — ISO-4217-Währungscode
Beispiel-Payload (create, CXML, Selected Item vorhanden)
{
„username“: „buyer123“,
„api_key“: „site-api-key-abc“,
„session_token“: „sess-012345“,
„operation“: „create“,
„end_customer_id“ : 2,
„gateway_base_url“: „https://middleware.example.com“,
„selected_item“: {
„supplier_part_id“: „X-100“,
„supplier_part_auxiliary_id“: „19853“
}
}
Beispiel-Payload (edit, CXML, Warenkorb befüllt)
{
„username“: „buyer123“,
„api_key“: „site-api-key-abc“,
„session_token“: „sess-67890“,
„operation“: „edit“,
„end_customer_id“ : 2,
„gateway_base_url“: „https://middleware.example.com“,
„cart_items“: [
{
„sku“: „ABC-001“,
„product_id“: „19852“,
„quantity“: 2,
„price“: 15.95,
„description“ : „Beispielbeschreibung“,
„currency“: „EUR“
},
{
„sku“: „XYZ-002“,
„product_id“: „19854“,
„quantity“: 1,
„price“: 249.00,
„description“ : „Eine weitere Beispielbeschreibung“,
„currency“: „EUR“
}
]
}
Erfolgsantwort(en)
Option A — Eine direkte SSO-URL bereitstellen (JSON) – HTTP 200 – Content-Type: application/json – Body:
{
„status“:“success“,
„sso_url“:“https://your-store.example.com/sso?token=eyJ…“
}
Verhalten: Die Middleware leitet den Käufer zu sso_url (GET) weiter und sendet sie im Fall von CXML an die Beschaffungsplattform zurück oder im Fall von OCI direkt. Der Remote-Store muss das Token konsumieren, den Nutzer anmelden und dann:
- Wenn die Aktion „edit“ oder „inspect“ ist: Die Remote-Website sollte die Warenkorbinformationen lesen und den Warenkorb befüllen, sodass der Nutzer im Store auf der Warenkorbseite landet, mit Artikeln im Warenkorb in den passenden Mengen.
- Wenn die Aktion „create“ ist: Die Remote-Website sollte zum ausgewählten Artikel weiterleiten, sofern übergeben und gefunden; andernfalls landet der Nutzer einfach im Storefront
Fehlerantworten
HTTP 400 — Bad Request (fehlende Pflichtfelder) json
{
„status“:“error“,
„error_code“:“invalid_request“,
„message“:“Missing field: action“
}
HTTP 422 — SSO kann nicht erstellt werden (z. B. fehlende Käuferidentität) json
{
„status“:“error“,
„error_code“:“sso_unavailable“,
„message“:“Cannot generate SSO token for this user“
}
HTTP 500 — Interner Fehler json
{
„status“:“error“,
„error_code“:“internal_error“
}
2) Autologin-&-SSO-Workflow (wie der Käufer angemeldet und der Warenkorb befüllt wird)
Bei einer Antwort mit sso_url sollte der Store:
- Das Token konsumieren (damit es nicht zweimal verwendet werden kann) und den Käufer mit dem geklonten Nutzer anmelden.
- Nach dem Login:
- Wenn die Aktion „edit“ ist:
- Den Warenkorb des Nutzers mit den exakt bereitgestellten Produkten und Mengen als Warenkorbpositionen befüllen.
- Den Nutzer zur Warenkorb-/Checkout-Seite weiterleiten, wo er vor dem Checkout bearbeiten kann.
- Wenn die Aktion „create“ ist:
- Optional zum als Selected Item angegebenen Produkt weiterleiten. Wenn die Middleware kein Selected Item bereitgestellt hat oder es im E-Commerce nicht mehr gefunden wird, landet der Nutzer auf der Store-Startseite.
- Wenn die Aktion „edit“ ist:
Sicherheit:
- Nur HTTPS verwenden.
- Tokens müssen nur einmal verwendbar sein.
3) Auto-Post-Formular (Warenkorbübertragung)
Wenn der Store den Warenkorb/die Warenkorbbestätigung an die Middleware zurücksenden muss (nach SSO-Login, Hinzufügen von Produkten zum Warenkorb oder Bearbeiten), wenn der Nutzer auf die Schaltfläche klickt (normalerweise im Warenkorb), die den Checkout starten sollte, dann sollte er stattdessen – im Fall geklonter Nutzer von Punchout-Sessions – ein Formular (Content-Type: application/x-www-form-urlencoded) an die Middleware-URL posten, die in der Anfrage an den Clone-Endpunkt im relativen Pfad „/start-sso-checkout“ übermittelt wurde. Bevorzugte UX: Der Store liefert eine HTML-Seite mit einem Loader aus, die ein verborgenes Formular automatisch an den Middleware-Endpunkt sendet (dadurch ist SSO nahtlos).
Von der Middleware erwartete Formularfelder:
- session_token (string) — Session-Token, das das E-Commerce während der Clone-Anfrage erhalten hat
- end_customer_id (integer) — Endkundenkennung, die das E-Commerce während der Clone-Anfrage erhalten hat
- Für jeden Artikel im Warenkorb sollten wir Formulardaten mit nullbasiertem Index haben, z. B. mit dem Schlüssel products[0][product_id] für die Produkt-ID des ersten Artikels im Warenkorb. Für jeden Artikel im Warenkorb ist die Liste der Felder:
- sku (string) — Kennung der SKU (Produktcode) im E-Commerce (falls vorhanden)
- product_id (string) — Kennung der Produkt-ID im E-Commerce (falls vorhanden)
- description (string) — Beschreibung des Produkts
- quantity (integer) — Menge des Produkts im Warenkorb
- price (Dezimalzahl mit Punkt als Dezimaltrennzeichen) — Stückpreis
- currency (string) — ISO-4217-Währungscode
- manufacturer_name (string) – Produkthersteller
- category_ids (string) — Liste, durch Komma getrennt, der Kategorie-Integer-IDs im E-Commerce der Kategorien, zu denen das Produkt direkt gehört (in der Regel Blatt in der Kategorienbaumstruktur)
Beispiel-HTML-Auto-Post-Formular (der Store liefert es an den Browser des Nutzers zurück und sendet es automatisch an die Middleware):
Verhalten:
- Der Browser postet automatisch an middleware_callback.
- Die Middleware empfängt den Warenkorb und setzt ihren Workflow fort, indem sie Kategoriecodes (z. B. UNSPSC) hinzufügt, die durch Abgleich von E-Commerce-Kategorien mit neu zugeordneten Kategoriecodes berechnet werden.
4) Custom Categories Endpoint
Wird von Middleware/Admin verwendet, um Kategorien aus dem Remote-Store abzurufen und die Zuordnung zu Standard-Kategoriecodes (z. B. UNSPSC) zu ermöglichen.
Empfohlener URL-Pfad (Beispiel):
- POST https://your-store.example.com/api/punchout/categories
HTTP-Verb
- POST (verpflichtend). Optionale Query-Parameter sind erlaubt (siehe unten).
Body
- api_key (string) — API-Key, der mit dem in Punchout Rocket für das aktuelle E-Commerce hinterlegten übereinstimmen muss
Erfolgsantwort
HTTP 200
Content-Type: application/json
Body:
{
„status“:“success“,
„categories“:[
{"id":1345,"name":"Bürobedarf","parent_id":0},
{"id":1847,"name":"Stifte","parent_id":1345},
{"id":2345,"name":"Elektronik","parent_id":0}
]
}
Semantik:
- id (integer) — eindeutige Kennung (normalerweise Integer-ID der Kategorie in der Kategorientabelle im E-Commerce) der Kategorie, die die Middleware später beim Senden des Warenkorbs an das Beschaffungssystem mit neu zugeordneten Kategorien (z. B. UNSPSC-Code) verwendet.
- name (string) — Anzeigename
- parent_id (integer) — eindeutige Kennung (normalerweise Integer-ID der Kategorie in der Kategorientabelle im E-Commerce) der übergeordneten Kategorie der aktuellen Kategorie. Normalerweise „0“, wenn sie keine übergeordnete Kategorie hat
Fehlerantworten:
- HTTP 400 — ungültige Query
- HTTP 500 — interner Fehler
Beispielanfrage: POST /api/punchout/categories
{‘api_key’: ‘site-api-key-abc’}
Beispielantwort:
{
„status“:“success“,
„categories“:[
{"id":1345,"name":"Bürobedarf","parent_id":0},
{"id":1847,"name":"Stifte","parent_id":1345},
{"id":2345,"name":"Elektronik","parent_id":0}
]
}
5) Implementierungshinweise
- Verwenden Sie immer HTTPS.
- Verwenden Sie nur einmal verwendbare SSO-Tokens.
- Behalten Sie beim Posten von Warenkorbzeilen die Indexreihenfolge bei (sku[], product_id[], quantity[], unit_price[], extended_price[], categories[]). Die Middleware ordnet die Artikel nach Index zu.
