Zum Inhalt

ERP-Bestellnummer als Identifikation

Seit Version 1.2.0 – wenn Dein Backoffice mit einer eigenen Bestellnummer arbeitet (ERP-, Auftrags-, oder Rechnungsnummer), kann der Verbraucher genau diese Nummer im Widerrufsformular eingeben. Das Plugin findet die zugehörige Shopware-Bestellung automatisch über das passende Custom Field.

Warum dieses Feature

In professionellen Setups ist nicht das Shopware-Backend, sondern ein ERP-System das führende System für die Auftragsverarbeitung. Die Shopware-Bestellnummer ist intern oft irrelevant – die Buchhaltung, der Versand, die Reklamationsabteilung arbeiten mit der ERP-Nummer (z.B. AB2026-12345), die auf Rechnung, Lieferschein und allen Belegen steht.

Wenn der Verbraucher dann widerruft, kennt er nur die ERP-Nummer. Müsste er stattdessen die Shopware-Bestellnummer suchen (die er vielleicht nur in der Bestellbestätigungs-Mail findet), wird der Widerruf erschwert – was nach § 356a BGB n.F. genau das ist, was vermieden werden soll.

Mit dieser Option findet der Verbraucher seine Bestellung über die ihm bekannte Nummer; Du im Backoffice siehst weiterhin beide Werte parallel.

Voraussetzungen

  1. Ein Custom Field auf der Bestell-Entität, in dem die ERP-Nummer gespeichert wird. Üblicherweise legt das ein ERP-Connector-Plugin an (Afterbuy, Plentymarkets, JTL, Pickware, Sage-Connector, eigene Schnittstelle …). Falls noch keins existiert:

    Custom Field selbst anlegen

    • Einstellungen → System → Custom Fields → Set hinzufügen → Set-Name z.B. erp_data.
    • Zuweisung → Bestellungen (entity name order).
    • Feld hinzufügen → technischer Name z.B. erp_orderNumber, Typ Text.
  2. Custom-Field-Wert muss in den Bestellungen befüllt sein. Das Plugin liest, was im Custom Field steht – wenn dort null oder leer steht, findet es die Bestellung nicht.

  3. Mindestens eine Bestellung mit gepflegtem Custom-Field-Wert für den Test.

Einrichtung in 3 Schritten

Schritt 1: ERP-Modus aktivieren

Im Admin Einstellungen → System → Plugins → Widerrufsbutton öffnen, Sales-Channel wählen.

Im Bereich „Allgemein":

  • Bestell-Identifikation → auf „Bestell-Custom-Field (z.B. ERP-Nummer)" stellen.

Schritt 2: Custom Field auswählen

Direkt darunter erscheint das Feld „Custom Field für ERP-/externe Bestellnummer" mit einem Dropdown. Das Plugin liest automatisch alle Custom Fields ein, die einem Custom-Field-Set mit Bezug zur Bestell-Entität zugeordnet sind, und zeigt sie als Auswahl.

  • Das passende Custom Field anklicken (z.B. „ERP-Bestellnummer (erp_orderNumber)").
Was im Dropdown auftaucht

Das Plugin filtert serverseitig über customFieldSet.relations.entityName = 'order'. Custom Fields, die nur an Produkt oder Kunde hängen, erscheinen nicht.

Schritt 3: Fallback einstellen

Das Feld „Fallback auf Shopware-Bestellnummer zulassen" standardmäßig ein lassen.

Warum? Es kann immer Bestellungen geben, bei denen das ERP-Custom-Field (noch) nicht befüllt ist – z.B. Altbestände, Imports, ein temporärer ERP-Ausfall. Mit aktivem Fallback findet das Plugin solche Bestellungen trotzdem, wenn der Verbraucher (oder Dein Support) hilfsweise die Shopware-Bestellnummer eingibt.

Wenn Du strikt nur ERP-Nummern akzeptieren willst (z.B. weil Bestellungen ohne ERP-Nummer gar nicht im normalen Bestellfluss sind), schalte den Fallback aus.

Speichern.

Wie es im Storefront aussieht

Gast-Modus:

  • Das Eingabefeld heißt jetzt „Bestellnummer (z.B. ERP- oder Rechnungsnummer)".
  • Darunter ein Hinweistext: „Geben Sie die Nummer ein, die auf Ihrer Auftragsbestätigung, Rechnung oder Ihrem Lieferschein steht."
  • Der Verbraucher gibt seine ERP-Nummer + E-Mail (+ optional PLZ) ein, drückt Weiter zur Bestätigung.
  • Das Plugin sucht im Hintergrund nach customFields.<dein_field> und – wenn Fallback aktiv und nichts gefunden – zusätzlich nach orderNumber.

Eingeloggter Kunden-Modus:

  • Der Auswahl-Dropdown zeigt pro Bestellung die ERP-Nummer als Primärwert, die Shopware-Bestellnummer in Klammern.
  • Beispiel: AB2026-12345 (SW-100001) — 02.06.2026 — 49,99 €
  • Bestellungen ohne ERP-Wert zeigen einfach die Shopware-Nummer.

Wie es im Admin aussieht

Im Modul Widerrufsbutton:

  • Liste: Spalte „Bestellnummer" zeigt die ERP-Nummer als primären Wert, die Shopware-Nummer als kleines Sub-Label „Shopware-Nr.: SW-100001".
  • Detail-Seite: Eine neue Zeile „Externe Bestellnummer (ERP)" erscheint, wenn ein ERP-Wert gespeichert ist.

In den Mail-Templates ist die Twig-Variable {{ externalOrderIdentifier }} verfügbar.

Migrations- und Daten-Modell

Beim Update auf 1.2.0 ergänzt eine Migration eine neue Spalte:

ALTER TABLE `kommora_withdrawal`
ADD COLUMN `external_order_identifier` VARCHAR(64) NULL AFTER `order_number`;
CREATE INDEX `idx.kommora_withdrawal.ext_order_id`
    ON `kommora_withdrawal` (`external_order_identifier`);

Die Spalte hält genau den Wert, den der Verbraucher im Formular eingegeben hat (= Inhalt des Custom Fields zum Zeitpunkt der Einreichung). Auch wenn die Bestellung später im ERP umnummeriert wird, bleibt der historisch korrekte Wert im Widerruf erhalten – wichtig für die Beweisführung bei Rückfragen.

Sicherheits-Überlegungen

Die ERP-Nummer ist nicht „streng geheim" – sie steht auf der Rechnung. Trotzdem reicht sie alleine nicht zur Bestell-Findung: Das Plugin sucht immer mit orderCustomer.email = <vom Verbraucher eingegebene E-Mail> UND <identifier>. Ein Angreifer müsste also gleichzeitig die ERP-Nummer und die im Shopware-Order-Customer hinterlegte E-Mail-Adresse kennen.

Die Eingangs- und Bearbeitungs-Bestätigungs-Mails gehen immer an die im Shopware-Order-Customer hinterlegte E-Mail-Adresse, nicht an die im Formular eingegebene. Selbst wenn jemand mit fremden Daten widerrufen würde, bekäme der echte Kunde sofort eine Bestätigungsmail und kann den Widerruf gegenüber Dir bestreiten.

FAQ

Was passiert, wenn das Custom Field gar nicht existiert (z.B. wurde gelöscht)?

Das Plugin findet keine Bestellung über das Feld – wenn Fallback aktiv, sucht es zusätzlich nach orderNumber. Ohne Fallback bekommt der Verbraucher die Meldung „Bestellung nicht gefunden". Sicherheit: kein Crash, keine SQL-Injection-Fläche.

Mehrere ERP-Felder im Shop (z.B. ein ERP-Connector + eigenes Custom Field)?

Das Plugin nutzt genau das eine ausgewählte Field. Möchtest Du beide unterstützen (z.B. ältere Bestellungen mit altem Field, neue mit neuem), bleib auf einem Field und pflege die Werte einheitlich – oder triff im ERP eine Mapping-Entscheidung pro Bestellung.

Funktioniert das mit Variants/Multi-Sales-Channel-Konfig?

Ja. Jeder Sales-Channel hat seine eigene Config. Du kannst im B2C-Channel die Shopware-Bestellnummer akzeptieren und im B2B-Channel die ERP-Nummer.

Wirkt sich der Modus auf die Bestätigungsmail aus?

Nur die Mail-Twig-Variable {{ externalOrderIdentifier }} wird gefüllt. Ob Du sie nutzt, entscheidest Du im Template (Empfehlung: {{ externalOrderIdentifier\|default(orderNumber) }}).

Was sieht der Kunde bei verbleibender-Tage-Anzeige?

Wenn die Vorfilterung aktiv ist, wird die Anzeige der verbleibenden Tage pro Bestellung im Dropdown gezeigt – unabhängig davon, ob ERP- oder Shopware-Nummer als Identifikation dient. Empfehlung mit Blick auf 19.06.2026: „Keine zeitliche Vorfilterung" aktivieren.

Weiter