Konfiguration – Widerrufs-Button¶
Alle Einstellungen liegen pro Sales-Channel unter Admin → Einstellungen → System → Plugins → Widerrufsbutton. Wechsle oben links zwischen den Sales-Channels, um pro Channel unterschiedliche Werte zu setzen – z.B. längere Frist im Premium-Channel.
Bereich „Allgemein"¶
| Option | Default | Beschreibung |
|---|---|---|
| Widerrufsbutton aktiviert | ein | Globaler Hauptschalter pro Sales-Channel. |
| Widerrufsfrist (Tage) | 14 | Wird im Storefront-Hinweistext und in der „verbleibende Tage"-Anzeige verwendet. |
| Fristbeginn | Bestelldatum | Wahl zwischen Bestelldatum, Versanddatum oder „Bestellung abgeschlossen" (seit 1.4.0). Beeinflusst die Vorfilterung der Bestellliste. Bei „Bestellung abgeschlossen" wird der Zeitpunkt des Order-State-Wechsels auf completed verwendet — sinnvoll für Dienstleistungs-, Software- und Abo-Verträge. Fallback auf Bestelldatum, solange die Bestellung noch nicht abgeschlossen ist. |
| Keine zeitliche Vorfilterung (alle Bestellungen anzeigen) | aus | Empfohlen mit Blick auf 19.06.2026. Wenn aktiv, werden ALLE Bestellungen angezeigt – die gesetzliche Frist beginnt nach § 356 Abs. 2 BGB erst mit Erhalt der Ware und darf nicht durch Vorfilterung verkürzt werden. |
| Bestell-Identifikation | Shopware-Bestellnummer | Wahl: Shopware-Bestellnummer oder Bestell-Custom-Field (z.B. ERP-Nummer). Siehe ERP-Bestellnummer. |
| Custom Field für ERP-/externe Bestellnummer | – | Dropdown mit allen Custom Fields, die einem Custom-Field-Set mit Bezug zur Bestell-Entität zugeordnet sind. Nur wirksam, wenn oben „Bestell-Custom-Field" gewählt. |
| Fallback auf Shopware-Bestellnummer zulassen | ein | Empfohlen. Wenn die eingegebene Nummer im Custom Field nicht gefunden wird, sucht das Plugin zusätzlich anhand der Shopware-Bestellnummer. Schützt Altbestellungen ohne gepflegte ERP-Nummer. |
| Optionale Begründung anzeigen | aus | Mit Blick auf Art. 11a / § 356a BGB n.F. standardmäßig deaktiviert. Die Abfrage einer Widerrufsbegründung – auch optional – wird zunehmend als unzulässige Erschwernis ausgelegt. Aktivieren nur, wenn Du die Begründung wirklich brauchst. |
| Spam-Schutz | Einfacher Spamschutz (Rechenaufgabe) | Auswahl: Honeypot, Rechenaufgabe, Google reCAPTCHA. |
19.06.2026 – darauf achten
Mit Anwendung von Artikel 11a der RL 2011/83/EU muss die Widerrufsfunktion „während der gesamten Widerrufsfrist verfügbar" sein. Empfohlene Compliance-Konfig:
- „Keine zeitliche Vorfilterung" → ein
- „Optionale Begründung anzeigen" → aus
- PLZ-Feld im Formular: optional (bereits seit 1.1.9 default)
Bereich „Platzierung"¶
Steuert, an welchen Stellen im Storefront der Button automatisch erscheint.
| Option | Wirkung |
|---|---|
| In der oberen Navigationsleiste | Erscheint in der Top-Bar neben Login/Konto. |
| Im Footer | Erscheint im Service-Bereich des Footers. Theme-robust: auch bei aggressiven Theme-Overrides (ThemeWare, TWT) wird der Button via JS-Fallback eingefügt. |
| Im Kundenkonto-Menü | Sidebar-Eintrag in /account. |
| In der Bestellübersicht | Schwebender Button pro Bestellung in /account/order. |
| In der Bestelldetailseite | Button in der Bestellansicht. |
| In der Bestellbestätigungs-Mail | Hängt einen rechtssicheren Hinweis-Block mit Widerrufs-Link direkt an HTML- und Plain-Body der Bestellbestätigung an (seit 1.4.0). Funktioniert ohne Mail-Template-Anpassung. Toggle unter Bereich Benachrichtigungen (s. u.). |
Eigener CSS-Selektor für den Footer-Anker (Theme-Edge-Cases)
Bei stark angepassten Themes (ThemeWare TWT, Custom-Themes von MAN-/Opel-/BPW-Shop, TÜV-Shop etc.), die den Standard-Shopware-Footer komplett überschreiben und in denen weder die Standard-Klassen .footer-column-hotline noch eine Heading-Text-Suche greift, lässt sich unter Darstellung → Eigener CSS-Selektor für Footer-Anker (optional) der CSS-Selektor eines stabilen Footer-Containers angeben (z. B. .footer-contact-form oder .my-theme-footer-services) — der Button wird dann gezielt dort eingefügt. Leer = automatische Erkennung.
Eigene Platzierung via CMS
Es gibt ein eigenes CMS-Element „Widerrufsbutton" mit konfigurierbarem Text und Style – im Shopping Experiences nutzbar.
Bereich „Darstellung"¶
| Option | Default | Beschreibung |
|---|---|---|
| Button-Stil | Primär (ausgefüllt) | Primär/Sekundär/Outline. |
| Button-Farbe | #dc3545 |
Color-Picker. Footer-Button und Confirm-Button-Farbe gleichzeitig. |
| Button-Textfarbe | #ffffff |
Color-Picker. |
| Header-Anzeige | Textlink | Im Header als Link oder als Button-Element. |
| Verbleibende Tage anzeigen | ein | Im Auswahl-Dropdown und im Hinweisbanner für eingeloggte Kunden. Bei aktivierter Compliance-Variante („Keine zeitliche Vorfilterung") automatisch unterdrückt. |
| Link zum Muster-Widerrufsformular (PDF) | – | Optionaler Download-Link zum gesetzlichen Muster-Widerrufsformular. Wird unter dem Formular angezeigt, wenn ausgefüllt. |
Bereich „Benachrichtigungen"¶
| Option | Default | Beschreibung |
|---|---|---|
| Interne Benachrichtigungs-E-Mail | – | E-Mail-Adresse(n) für interne Benachrichtigungen bei neuen Widerrufen (komma-separiert). |
| Widerrufslink in Bestellbestätigung anzeigen | aus | Hängt einen rechtssicheren Widerrufs-Hinweis-Block mit Button an HTML- und Plain-Body der Bestellbestätigungs-E-Mail an (out of the box, ohne Mail-Template-Edit). Sprache wird anhand des Mail-Body-Inhalts erkannt (DE/EN). Wirkungslos in Versionen vor 1.4.0 — Bugfix seit 1.4.0. |
| Hilfetext im Formular (HTML erlaubt) | – | Wird unterhalb des Formulars angezeigt. Z.B. Telefon-Hotline / E-Mail-Kontakt für Rückfragen. |
| Erinnerungs-E-Mail aktivieren | ein | Erinnerung an den Shop-Inhaber, wenn ein Widerruf zu lange unbearbeitet bleibt. |
| Erinnerung nach X Tagen | 3 | Schwellenwert für die Erinnerung. |
| Empfänger der Erinnerungs-E-Mail | – | E-Mail-Adresse. Leer = gleicher wie interne Benachrichtigungs-E-Mail. |
Bereich „Bestellverarbeitung"¶
| Option | Default | Beschreibung |
|---|---|---|
| Bestellstatus automatisch auf „Widerrufen" setzen | ein | State-Machine-Transition: Bestellstatus wird beim Widerruf automatisch auf withdrawn gesetzt. Vorteil: in der Bestellliste auf den ersten Blick sichtbar. |
| Rückerstattungs-Tracking anzeigen | ein | Felder im Admin-Modul für manuelles Pflegen des Rückerstattungs-Status (open, partial, done) und -Betrags. Reines Tracking, kein automatischer Zahlungseingriff. |
Mail-Templates¶
Das Plugin liefert sechs Mail-Templates:
| Template | Technical Name | Empfänger | Trigger |
|---|---|---|---|
| Widerrufsbestätigung an Verbraucher | kommora_withdrawal_submitted |
Kunde | Bei Einreichung des Widerrufs |
| Widerrufseingang an Shop-Inhaber | kommora_withdrawal_submitted_shop |
Adresse aus „Interne Benachrichtigungs-E-Mail" | Bei Einreichung des Widerrufs |
| Widerruf in Bearbeitung | kommora_withdrawal_in_progress |
Kunde | Status-Wechsel auf „in Bearbeitung" |
| Widerruf abgeschlossen | kommora_withdrawal_completed |
Kunde | Status-Wechsel auf „abgeschlossen" |
| Rückerstattung veranlasst | kommora_withdrawal_refunded |
Kunde | Refund-Status auf „veranlasst" / „abgeschlossen" gesetzt |
| Widerruf abgelehnt (seit 1.4.0) | kommora_withdrawal_rejected |
Kunde | Backoffice-Ablehnung via Modal mit Begründung |
Beide sind unter Einstellungen → Shop → E-Mail-Templates anpassbar. Verfügbare Twig-Variablen:
| Variable | Wert |
|---|---|
{{ withdrawalId }} |
UUID des Widerrufs |
{{ orderNumber }} |
Shopware-Bestellnummer |
{{ externalOrderIdentifier }} |
Externe Bestellnummer (z.B. ERP), sofern ERP-Modus aktiv. Sonst null – nutze {{ externalOrderIdentifier\|default(orderNumber) }} |
{{ customerName }} |
Voller Name laut Bestellung |
{{ customerEmail }} |
E-Mail laut Bestellung |
{{ reason }} |
Begründung, sofern eingegeben (null wenn nicht) |
{{ submittedAt }} |
ISO-Zeitstempel der Einreichung |
{{ withdrawal.lineItems }} |
Bei Teil-Widerruf: Array der widerrufenen Positionen [{lineItemId, label, quantity}, …]. null bei vollständigem Widerruf. (Seit 1.4.0) |
{{ withdrawal.rejectionReasonCode }} |
Bei Ablehnung: Code der Rechtsgrundlage (custom_made, perishable, sealed_hygiene, sealed_digital, inseparably_mixed, other). (Seit 1.4.0) |
{{ withdrawal.rejectionReasonText }} |
Bei Ablehnung: Freitext-Begründung des Backoffice. Wird in der Ablehnungs-Mail an den Kunden 1:1 übernommen. (Seit 1.4.0) |
Empfohlener Twig-Header in der Bestätigungsmail
Flow-Builder-Events¶
Für eigene Workflows stehen zwei Events bereit:
| Event-Name | Wann | Verfügbare Variablen |
|---|---|---|
kommora_withdrawal.submitted |
Direkt nach Einreichung | withdrawalId, orderId, orderNumber, externalOrderIdentifier, customerEmail, customerName, reason, submittedAt |
kommora_withdrawal.status_changed |
Bei jeder Status-Änderung im Admin | withdrawalId, orderNumber, oldStatus, newStatus, notes, processedAt |
Damit lassen sich z.B. automatisch Tickets im Helpdesk anlegen, Slack-Notifications schicken oder ERP-Rückerstattungs-Workflows triggern.
Speichern und prüfen¶
Nach allen Änderungen oben rechts Speichern. Die Änderungen greifen sofort – Cache-Leeren ist nicht erforderlich (System-Config-Werte werden zur Laufzeit gelesen).
→ Weiter mit ERP-Bestellnummer oder Anwendungsfällen.