Dokumentation

Isotope Widerrufsbutton + GPSR

Mit Isotope Widerrufsbutton + GPSR bekommt dein Isotope-Shop die Technik für die Widerrufsfunktion nach § 356a BGB (gilt seit 19.06.2026) und für die Angaben zur Produktsicherheit nach Art. 19 der EU-Produktsicherheitsverordnung (GPSR). Voraussetzungen: Contao 4.13, Isotope eCommerce 2.9, PHP 8.1 oder neuer, Notification Center 1.6 (kommt mit Isotope). Paket: contaolabs/isotope-legal-bundle

Rechtliche Prüfung: Die Erweiterung stellt die Technik bereit, sie ist keine Rechtsberatung. Für die rechtliche Prüfung deines Shops bist du selbst verantwortlich. Lass Texte, Mails, Fristen, Einstellungen und Produktangaben vor dem Livegang von einer Fachstelle prüfen, zum Beispiel vom Händlerbund, der IT-Recht-Kanzlei oder deiner Anwältin bzw. deinem Anwalt.

Installation

  1. ZIP aus „Mein Konto“ im Contao Manager unter „Pakete hochladen“ hochladen. Beim ersten Mal zusätzlich license-client-….zip hochladen.
  2. „Änderungen anwenden“, danach „Datenbank aktualisieren“.
  3. Lizenzschlüssel unter System → Einstellungen → contaolabs-Lizenzen eintragen (siehe Übersicht).

Ohne gültige Lizenz sind die GPSR-Bereiche und die Module im Backend gesperrt. Widerrufsformular, Mails und GPSR-Angaben im Shop laufen immer weiter, und die Liste der eingegangenen Widerrufe bleibt immer erreichbar.

Widerrufsbutton einrichten

  1. Seite anlegen, zum Beispiel „Vertrag widerrufen“, und darauf das Frontend-Modul Widerrufsformular (Gruppe Isotope) einbinden. Die Seite muss ohne Login erreichbar sein.
  2. Unter Isotope → Shop-Konfiguration im Bereich Widerrufsbutton (§ 356a BGB) diese Seite auswählen und die Frist prüfen (siehe unten).
  3. Button im Footer: das Modul Button „Vertrag widerrufen“ ins Layout setzen oder den Insert-Tag {{cl_withdrawal::link}} verwenden. Das Gesetz verlangt, dass die Funktion während der Widerrufsfrist ständig verfügbar, hervorgehoben und leicht zugänglich ist.
  4. Link in der Bestellbestätigung: In deiner Benachrichtigung für die Bestellbestätigung ##cl_withdrawal_link## (fertiger Link) oder ##cl_withdrawal_url## (nur die Adresse) einfügen. Der Link öffnet das Formular direkt mit der passenden Bestellung, ohne Login. Er ist signiert und lässt sich nicht auf andere Bestellungen umschreiben.

Im Kundenkonto erscheint der Button automatisch in der Bestelldetail-Ansicht. Angemeldete Kunden sehen im Widerrufsformular außerdem ihre Bestellungen.

Du oder Sie: Formular und Eingangsbestätigung siezen. Duzt dein Shop seine Kunden, setzt du in der Shop-Konfiguration Kunden duzen. Die Texte in eigenen Benachrichtigungen schreibst du ohnehin selbst.

So sieht das Ganze im Demo-Shop aus: Seite „Vertrag widerrufen“, Link im Footer, Block „Produktsicherheit“ bei Skibrille und Skihelm.

So läuft ein Widerruf ab

  1. Der Kunde wählt die Bestellung: aus seinem Konto, über den Link aus der Mail oder mit Bestellnummer und E-Mail-Adresse der Bestellung.
  2. Er gibt seinen Namen an (vorausgefüllt), wählt die ganze Bestellung oder einzelne Positionen mit Menge und die E-Mail-Adresse für die Bestätigung. Ein Grund ist freiwillig.
  3. Er prüft die Zusammenfassung und klickt auf „Widerruf bestätigen“.
  4. Er sieht eine Bestätigung mit Datum und Uhrzeit des Eingangs und bekommt sofort die Eingangsbestätigung per E-Mail. Du bekommst eine Nachricht, der Widerruf steht unter Isotope → Widerrufe.

Mehrere Teil-Widerrufe zu einer Bestellung sind möglich, bereits widerrufene Mengen werden abgezogen. Sets aus Isotope Bundle Products erscheinen als ein Produkt.

  • Schutz vor Missbrauch: Bei falschen Angaben gibt es eine neutrale Meldung, die nicht verrät, ob eine Bestellnummer existiert. Nach 10 Fehlversuchen pro Stunde wird die Abfrage für diese IP-Adresse gesperrt.
  • Datenschutz: Gespeichert werden die Angaben aus dem Formular und ein nicht umkehrbarer Fingerabdruck der IP-Adresse. Fehlversuche werden nach einem Tag gelöscht.

Widerrufsfrist

Isotope speichert kein Lieferdatum. Die Frist beginnt deshalb

  1. am Versanddatum der Bestellung, sonst
  2. wenn die Bestellung zum ersten Mal deinen Status „versendet“ bekam (Einstellung in der Shop-Konfiguration), sonst
  3. am Bestelldatum.

Die Frist (Standard 14 Tage) und ein Puffer für die Lieferzeit (Standard 14 Tage) stellst du in der Shop-Konfiguration ein. So lange bieten Kundenkonto und Bestellansicht den Widerruf an. Über das Formular kommt ein Kunde auch danach noch durch: Der Widerruf wird angenommen und in der Liste mit ⚠ als „nach Fristende“ markiert. Mit Frist beginnt erst mit dem Versand bleiben noch nicht versendete Bestellungen unbegrenzt widerrufbar.

Produkte ohne Widerrufsrecht

Für Waren ohne Widerrufsrecht (zum Beispiel Sonderanfertigungen) setzt du die Checkbox Widerrufsrecht ausgeschlossen am Produkttyp (gilt für alle Produkte des Typs) oder am einzelnen Produkt. Für das Feld am Produkt aktivierst du im Produkttyp unter „Attribute“ das Feld aus der Gruppe „Widerrufsrecht“. Solche Positionen lassen sich im Formular nicht auswählen und tragen einen Hinweis.

Eingangsbestätigung und Nachricht an dich

Ohne weitere Einrichtung verschickt die Erweiterung eine einfache Mail mit allen Angaben an den Kunden und an die E-Mail für Widerrufe aus der Shop-Konfiguration. Eigene Texte gestaltest du im Notification Center mit den Typen Widerruf: Eingangsbestätigung und Widerruf: Info an den Shop. Die Benachrichtigungen wählst du anschließend in der Shop-Konfiguration aus.

Neben allen Bestell-Tokens wie in der Bestellbestätigung (z. B. ##billing_address_firstname##, ##document_number##) stehen bereit:

  • ##withdrawal_text## – alle Angaben als Text: Bestellung, Name, E-Mail, Umfang, Positionen, Grund, Eingang
  • ##withdrawal_received_at## – Datum und Uhrzeit des Eingangs, z. B. „22.10.2026, 14:05:31 Uhr“
  • ##withdrawal_name##, ##withdrawal_email##, ##withdrawal_reason##, ##withdrawal_scope##
  • ##withdrawal_items## (Text) und ##withdrawal_items_html## (Liste)
  • ##withdrawal_order_number##, ##withdrawal_deadline##, ##withdrawal_late##
  • ##admin_email## – die E-Mail für Widerrufe

Als Empfänger trägst du ##withdrawal_email## (Kunde) bzw. ##admin_email## (Shop) ein. Optional setzt die Erweiterung nach einem Widerruf einen Bestellstatus, zum Beispiel einen neuen Status „Widerrufen“.

Widerrufe im Backend

Unter Isotope → Widerrufe siehst du alle Widerrufe mit Eingang, Bestellung, Name, Umfang und Status. Den Status (eingegangen, in Bearbeitung, erledigt) und eine interne Notiz pflegst du selbst, die Angaben des Kunden bleiben unverändert. Über die Symbole öffnest du die Bestellung oder schickst die Eingangsbestätigung erneut. In der Bestellung selbst steht oben ein Hinweis, wenn ein Widerruf vorliegt.

GPSR: Hersteller und Produktangaben

  1. Unter Isotope → Hersteller (GPSR) legst du deine Hersteller an: Name oder Handelsmarke, Postanschrift und E-Mail oder Website. Sitzt der Hersteller außerhalb der EU, setzt du Hersteller sitzt außerhalb der EU und trägst die verantwortliche Person in der EU ein.
  2. Im Produkttyp wählst du unter „Widerrufsrecht und Produktsicherheit“ einen Vorgabe-Hersteller und aktivierst unter „Attribute“ die Felder der Gruppe „Produktsicherheit (GPSR)“: Hersteller, Produktkennung, Warn- und Sicherheitshinweise, Sicherheitsdokumente.
  3. Am Produkt trägst du einen Hersteller nur ein, wenn er vom Produkttyp abweicht. Warnhinweise (mehrsprachig) und Dokumente pflegst du je Produkt.

Auf der Produktseite erscheint unter dem Produkt der aufklappbare Block Produktsicherheit. Wer ihn selbst platzieren möchte, schaltet in der Shop-Konfiguration Automatisch auf der Produktseite zeigen aus und gibt im Leser-Template <?= $this->clGpsr ?> oder den Insert-Tag {{gpsr::block}} aus.

GPSR-Prüfbericht und CSV-Import

Unter Isotope → GPSR-Prüfbericht stehen alle veröffentlichten Produkte mit einer Ampel, filterbar nach Produkttyp und Status:

  • Rot: Pflichtangabe fehlt (Hersteller, Anschrift, E-Mail oder Website, verantwortliche Person in der EU, Artikelnummer oder Kennung).
  • Gelb: bitte prüfen (kein Produktbild, keine Warnhinweise – nicht jedes Produkt braucht welche).
  • Grün: vollständig.

Viele Hersteller importierst du per CSV direkt im Prüfbericht. Das Format wird an der Kopfzeile erkannt (Trennzeichen Semikolon oder Komma):

name;trademark;street;postal;city;country;email;website;outside_eu;eu_name;eu_street;eu_postal;eu_city;eu_country;eu_email
ACME GmbH;ACME;Musterweg 1;01067;Dresden;de;info@acme.example;;nein;;;;;;

Hersteller mit gleichem Namen werden aktualisiert. Die Zuordnung zu Produkten geht per Artikelnummer:

sku;manufacturer
TS-100;ACME GmbH

Templates und Insert-Tags

  • mod_cl_withdrawal – Widerrufsformular, mod_cl_withdrawal_link – Button, cl_gpsr_block – Block „Produktsicherheit“
  • {{cl_withdrawal::link}} und {{cl_withdrawal::url}} – Link bzw. Adresse des Widerrufsformulars
  • {{gpsr::block}} – Block des aktuellen Produkts, {{gpsr::block::ID}} für ein bestimmtes
  • {{gpsr::manufacturer}}, {{gpsr::manufacturer_address}}, {{gpsr::eu_person}}, {{gpsr::warnings}}, {{gpsr::identifier}} – einzelne Angaben, optional mit ::ID

Der Grundstil liegt in bundles/contaolabsisotopelegal/legal.css und lässt sich im Theme überschreiben. Farben und Ecken passt du am einfachsten über Variablen an:

.cl-wd, .cl-gpsr {
  --cl-legal-accent: #8a5a2b;   /* Buttons, Auswahl, Fokus */
  --cl-legal-accent-ink: #fff;  /* Schrift auf Buttons */
  --cl-legal-line: #dcdcdf;     /* Rahmen */
  --cl-legal-radius: 12px;      /* Ecken */
}

Weitere Variablen: --cl-legal-ink, --cl-legal-muted, --cl-legal-soft, --cl-legal-bg, --cl-legal-ok, --cl-legal-warn, --cl-legal-error.

Grenzen

  • Nur Contao 4.13 mit Isotope 2.9. Die Version für Isotope 3 und Contao 5 folgt, sobald Isotope 3 als stabile Version erschienen ist.
  • Isotope kennt kein Lieferdatum, die Frist ist eine Schätzung (siehe „Widerrufsfrist“).
  • Rücksendeetikett und Widerruf ohne Isotope-Bestellung (z. B. für Dienstleistungen) sind nicht enthalten.