Zum Inhalt

Anwendungsfälle

Drei typische Setups und wie das Plugin in jedem davon eingestellt wird.

B2C-Standardsetup

Profil

  • Endkunden-Shop mit gemischtem Sortiment.
  • Bestellungen kommen direkt in Shopware rein, kein vorgelagertes ERP.
  • Kunden bestellen meist als Gast oder mit einfachem Konto.
  • Versand erfolgt innerhalb 2–5 Werktagen.

Empfohlene Konfiguration

Feld Wert
Widerrufsbutton aktiviert ein
Widerrufsfrist 14 Tage
Fristbeginn Bestelldatum
Keine zeitliche Vorfilterung ein (Compliance 19.06.2026)
Bestell-Identifikation Shopware-Bestellnummer
Optionale Begründung anzeigen aus
Spam-Schutz Honeypot oder Rechenaufgabe
Platzierung – Footer ein
Platzierung – Kundenkonto-Menü ein
Automatischer Bestellstatus „Widerrufen" ein
Mail-Empfänger intern widerruf@dein-shop.de
Hilfetext im Formular Telefon-Hotline, alternative Mail

Verbraucher-Erlebnis

  1. Kunde scrollt im Footer und klickt auf „Vertrag widerrufen".
  2. Eingeloggt: Bestellliste mit Klick-Auswahl. Gast: E-Mail + Bestellnummer + (optional) PLZ.
  3. Weiter zur Bestätigung → Confirm-Page mit Kundenname, E-Mail, Bestellnummer.
  4. Widerruf bestätigen → Erfolgsseite. Bestätigungsmail kommt sofort.

Backoffice-Erlebnis

  • Widerruf erscheint im Modul Widerrufsbutton unter „Eingegangen".
  • Bestellstatus wechselt automatisch auf „Widerrufen".
  • Bearbeiter setzt nach Bearbeitung Status auf „In Bearbeitung" / „Abgeschlossen" und pflegt optional Rückerstattung.

B2B-ERP-Setup

Profil

  • Geschäftskunden, Versand erfolgt mit Lieferzeiten 1–4 Wochen, teils Sonderbestellungen.
  • ERP (z.B. Sage 100, Microsoft Dynamics, JTL-Wawi, Pickware-ERP) ist das führende System.
  • Custom Field migration_erp_orderNumber an der Bestellung enthält die ERP-Bestellnummer.
  • Reklamations- und Widerrufsabwicklung läuft im Backoffice mit ERP-Nummer.

Empfohlene Konfiguration

Feld Wert
Widerrufsbutton aktiviert ein
Widerrufsfrist 14 Tage (gesetzlich, in den AGB ggf. anders)
Fristbeginn Versanddatum
Keine zeitliche Vorfilterung ein (Compliance + lange Lieferzeiten)
Bestell-Identifikation Bestell-Custom-Field
Custom Field migration_erp_orderNumber (im Dropdown auswählen)
Fallback auf Shopware-Bestellnummer ein
Optionale Begründung anzeigen aus
Mail-Empfänger intern widerruf@erp-backoffice.de
Flow-Builder: kommora_withdrawal.submitted Webhook an ERP-Ticket-System

Verbraucher-Erlebnis

  1. Geschäftskunde öffnet seine Rechnung, sieht Auftragsnummer: AB2026-12345.
  2. Klickt im Shop-Footer auf „Vertrag widerrufen".
  3. Gibt E-Mail + AB2026-12345 ein – das ist die für ihn bekannte Nummer.
  4. Plugin findet die Bestellung über das ERP-Custom-Field, zeigt im Confirm:
    Kundenname: Mustermann GmbH
    Bestellnummer: AB2026-12345 (Shopware: SW-100237)
    Eingegangen: heute, 14:23
    
  5. Widerruf bestätigen → fertig.

Backoffice-Erlebnis

  • Im Admin-Modul erscheint der Widerruf mit primärer ERP-Nummer.
  • Über den Flow-Builder-Webhook wird automatisch ein Ticket im ERP-System geöffnet.
  • Buchhaltung kann mit der ERP-Nummer arbeiten, ohne Shopware-Tab zu wechseln.

→ Detail: ERP-Bestellnummer einrichten

Multi-Sales-Channel-Setup

Profil

  • Ein Shopware-Backend, mehrere Storefronts:
    • b2c.dein-shop.de (Endverbraucher)
    • b2b.dein-shop.de (Geschäftskunden)
    • outlet.dein-shop.de (Restposten, anderer Rechtsrahmen)
  • Unterschiedliche Frist, Texte, Mail-Empfänger pro Channel.

Konfiguration

Im Plugin-Config oben den Sales-Channel wechseln und pro Channel eigene Werte setzen.

Channel Frist Identifikation Mail-Empfänger Anmerkung
b2c.dein-shop.de 14 Tage Shopware-Nr. widerruf-b2c@... Standard-B2C
b2b.dein-shop.de 14 Tage ERP-Nr. (erp_orderNumber) widerruf-b2b@... ERP-Setup wie oben
outlet.dein-shop.de 14 Tage Shopware-Nr. widerruf-outlet@... Eigene Hilfetexte

Auch die Storefront-Texte (Snippets) lassen sich pro Sales-Channel + Sprache anders einstellen – das ist Standard-Shopware-Snippet-Verwaltung.

Hinweis: Snippets-Bearbeitung

Unter Einstellungen → Shop → Textbausteine den jeweiligen Sales-Channel-Snippet-Set öffnen, nach kommoraWithdrawal.form. suchen, gewünschte Werte überschreiben.

Wenn Du nicht willst, dass der Kunde erst zur Storefront muss, um den Button zu finden, aktiviere unter Benachrichtigungen:

  • Widerrufslink in Bestellbestätigung anzeigen → ein.

Damit fügt das Plugin der Standard-Bestellbestätigungs-E-Mail einen rechtssicheren Widerrufs-Block mit Button-Link an HTML- und Plain-Body an. Erfüllt zusätzlich die „leicht zugänglich"-Anforderung von Art. 11a für den Kunden ohne Account.

Achtung: vor 1.4.0 war der Toggle wirkungslos

In Versionen vor 1.4.0 existierte das Config-Feld, ohne dass es im Code verdrahtet war — die Aktivierung änderte nichts an der Bestellbestätigungs-Mail. Mit 1.4.0 hängt ein Mail-Subscriber den Block jetzt out of the box an HTML- und Plain-Body an, ohne dass am Mail-Template geschraubt werden muss. Sprache wird heuristisch erkannt (DE/EN).

Teil-Widerruf einzelner Positionen (seit 1.4.0)

Wofür?

Der Kunde hat eine Bestellung mit mehreren Artikeln aufgegeben und will nur einen Teil widerrufen — z. B. 3 von 5 Hemden behalten. § 356a BGB deckt den Teil-Widerruf explizit.

Storefront-Flow

  1. Kunde wählt seine Bestellung im Widerrufsformular aus → klickt „Prüfen".
  2. Auf der Bestätigungsseite erscheint ein neuer Block „Welche Positionen widerrufen Sie?" mit Checkbox pro Bestell-Position.
  3. Standard: alle Häkchen aktiv = vollständiger Widerruf (wie bisher).
  4. Wenn der Kunde Häkchen entfernt, wird der Widerruf als Teil-Widerruf für die markierten Positionen erfasst.
  5. Klick auf „Widerruf bestätigen" → Snapshot der gewählten Positionen (Label + Menge zum Einreichungs-Zeitpunkt) wird am Widerruf gespeichert.

Backoffice-Sicht

Im Detail-View des Widerrufs erscheint eine neue Karte „Widerrufene Positionen (Teil-Widerruf)" mit der genauen Liste. Bei vollständigem Widerruf (alle Häkchen aktiv) bleibt die Karte ausgeblendet.

Persistenz

Der Snapshot wird im Feld line_items der Tabelle kommora_withdrawal als JSON gespeichert (Array von {lineItemId, label, quantity}). Spätere Änderungen an der Order beeinflussen den Snapshot nicht — das Backoffice sieht jederzeit den genauen Stand zum Zeitpunkt der Einreichung.

Widerruf ablehnen mit Begründung (seit 1.4.0)

Wofür?

§ 312g Abs. 2 BGB listet 13 Ausnahmen vom Widerrufsrecht — Sonderanfertigungen, verderbliche Waren, entsiegelte Hygiene- oder Datenträger-Artikel usw. Wenn so eine Ausnahme greift, kann das Backoffice den Widerruf legitim ablehnen.

Backoffice-Flow

  1. Admin öffnet im Modul Widerrufsbutton den eingegangenen Widerruf.
  2. In der Smart-Bar oben rechts erscheint ein roter Button „Widerruf ablehnen" (nur sichtbar, wenn Status nicht bereits completed oder rejected).
  3. Klick → Modal mit Pflicht-Feldern:
    • Rechtliche Grundlage (Dropdown): Sonderanfertigung (§ 312g II Nr. 1), schnell verderbliche Ware (Nr. 4), Hygiene-Versiegelung entfernt (Nr. 3), entsiegelter Datenträger (Nr. 6), untrennbar vermischt (Nr. 5), Sonstiges.
    • Begründung für Kunden (Pflicht-Textarea): wird 1:1 in die Ablehnungs-Mail übernommen.
    • Kunden per E-Mail informieren (Checkbox, default an).
  4. Klick auf „Widerruf ablehnen" → Status wechselt auf rejected (eigene rote Badge in Liste + Detail), neue Karte „Ablehnung" im Detail-View zeigt Rechtsgrundlage + Begründung.
  5. Wenn Mail-Versand aktiv: Mail-Template kommora_withdrawal_rejected geht raus mit der wörtlichen Begründung des Backoffice.

Verbraucher-Sicht

  • Mail im Postfach: „Ihr Widerruf zur Bestellung … wurde abgelehnt" mit roter Box und der genauen Begründung.
  • Im Kundenkonto (s. u.): Eintrag mit roter „Abgelehnt"-Badge und Begründungstext.
Rechtlich sauber bleiben

Die Ablehnung muss begründet sein und greift nur, wenn tatsächlich eine § 312g Abs. 2 BGB-Ausnahme vorliegt. Pauschal-Ablehnungen ohne Rechtsgrundlage sind rechtlich angreifbar. Im Zweifel den Kunden kontaktieren statt direkt ablehnen.

„Meine Widerrufe" im Kundenkonto (seit 1.4.0)

Wofür?

Eingeloggte Kunden bekommen eine Übersichtsseite aller eigenen Widerrufe — entlastet den Support, weil Kunden nicht mehr fragen „ist mein Widerruf angekommen?".

Voraussetzung

In der Plugin-Konfig muss Platzierung → Im Kundenkonto-Menü aktiv sein.

Storefront

  • Sidebar im Kundenkonto bekommt einen neuen Link „Meine Widerrufe" (zusätzlich zu „Vertrag widerrufen").
  • Klick → /account/withdrawals mit Liste aller Widerrufe des eingeloggten Kunden:
    • Bestellnummer + Einreichungsdatum
    • Status-Badge (Eingegangen / In Bearbeitung / Abgeschlossen / Abgelehnt)
    • Bei Teil-Widerruf: Liste der widerrufenen Positionen
    • Bei eigener Begründung: Klartext-Anzeige
    • Bei Ablehnung: roter Block mit Rechtsgrundlage + Begründung
  • Anonyme Besucher landen auf der Standard-Login-Seite.

Fristbeginn-Variante „Bestellung abgeschlossen" (seit 1.4.0)

Wofür?

Bei Verträgen ohne physische Ware (Dienstleistungen, Software-Abos, digitale Konten) ist „Versanddatum" wertlos — es gibt keinen Versand. § 356 Abs. 2 BGB lässt für solche Verträge den Fristbeginn an den Vertragsabschluss knüpfen. In Shopware ist der Order-State-Wechsel auf completed der saubere technische Marker dafür.

Konfiguration

In der Plugin-Konfig unter Fristbeginn die dritte Option „Bestellung abgeschlossen" wählen.

Verhalten

  • Solange die Bestellung den Order-State completed hat: Fristberechnung ab dem Datum dieses Wechsels.
  • Solange noch nicht completed: Fallback auf Bestelldatum (damit der Widerruf nicht versehentlich ausgebremst wird, wenn der Vertrag noch in Bearbeitung ist).

Achtung

  • Funktioniert nur sinnvoll mit einer aktiv genutzten Order-State-Machine (z. B. manueller Abschluss durch Backoffice oder via Workflow-Plugin).
  • Bei klassischem Warenversand bitte weiterhin „Versanddatum" verwenden.

Weiter