Withdrawal ButtonDokumentation

Withdrawal-Button-Dokumentation

Installationsschritte und eine vollständige Referenz für jedes Feld und jede Funktion im Admin, mit konkreten Beispielen — derselbe Detailgrad, den unser Support zur Kundenbetreuung verwendet.

Als Markdown anzeigen

Installation

Voraussetzungen

Magento 2.4.x — getestet mit 2.4.9, kompatibel mit vorherigen 2.4.*-Versionen. PHP 8.1–8.5. Kompatibel sowohl mit dem Standard-Luma-Theme als auch mit dem Hyvä-Theme. Für den optionalen reCAPTCHA-Schutz müssen die nativen Magento_ReCaptcha*-Module vorhanden sein (bereits im Magento-Core enthalten).

Einrichtungsschritte

  1. Fügen Sie die per E-Mail erhaltenen Zugangsdaten zu auth.json im Stammverzeichnis Ihres Magento-Projekts hinzu:
    { "http-basic": { "repo.codingrow.com": { "username": "...", "password": "..." } } }
  2. composer config repositories.codingrow composer https://repo.codingrow.com
  3. composer require codingrow/module-withdrawal-button
  4. bin/magento module:enable Codingrow_WithdrawalButton
  5. bin/magento setup:upgrade && bin/magento setup:di:compile && bin/magento cache:flush
  6. Fügen Sie Ihren Lizenzschlüssel in Admin → Stores → Configuration → Codingrow Extensions → Withdrawal Button → License → License Key ein, speichern Sie, dann bin/magento cache:flush.
  7. Platzieren Sie den Anfragelink dort, wo Kunden ihn finden — siehe Widget platzieren weiter unten.

Das gesamte Frontend-Formular, die E-Mails und die Admin-Oberfläche sind in 7 Sprachen verfügbar, automatisch ausgewählt je nach Store-/Admin-Gebietsschema:

Admin-Konfiguration

Die vollständige Konfiguration liegt unter Stores → Configuration → Codingrow Extensions → Withdrawal Button: Lizenz, Allgemein (Aktivierung, Benachrichtigungs-E-Mail, zulässige Bestellstatus, Widerrufsfrist, Button-Text/-Farben, benutzerdefinierte Felder), E-Mail-Vorlagen und das optionale Rücksendeetikett.

Withdrawal Button admin configuration in Magento

Deinstallation

composer remove codingrow/module-withdrawal-button dann bin/magento setup:upgrade && bin/magento setup:di:compile && bin/magento cache:flush. Bereits in codingrow_withdrawalbutton_request erfasste Anfragen werden nie automatisch gelöscht — exportieren Sie zuerst die Übersicht, wenn Sie einen Nachweis behalten möchten.

Benutzerhandbuch

Die Widerrufsseite

Eine Seite, zwei Schritte, genau wie von der zugrundeliegenden Richtlinie gefordert: Der Kunde füllt zunächst die festen Felder aus (Name, E-Mail, Bestellnummer, Empfangsdatum) sowie alle aktivierten benutzerdefinierten Felder, sieht eine schreibgeschützte Zusammenfassung aller Eingaben und bestätigt erst dann über einen separaten, abschließenden Button. Die versteckten Felder, die die Daten zwischen den beiden Schritten weitergeben, werden bei der Bestätigung serverseitig erneut validiert — ein Kunde kann die Prüfungen niemals umgehen, indem er den "bestätigten" Schritt direkt erzwingt.

The public withdrawal request page: name, email, order number and delivery date, with the EU Directive 2023/2673 note

Bestellprüfung

Bevor eine Anfrage angenommen wird, prüft das Modul, ob die Bestellnummer tatsächlich existiert und ob die E-Mail-Adresse mit der auf dieser Bestellung übereinstimmt (ohne Berücksichtigung von Groß-/Kleinschreibung, funktioniert sowohl für Gast- als auch für registrierte Kundenbestellungen). Schlägt eine der beiden Prüfungen fehl, wird in beiden Fällen dieselbe allgemeine "nicht gefunden"-Meldung angezeigt — das ist beabsichtigt: Würde "falsche E-Mail" statt "Bestellung existiert nicht" angezeigt, könnte jemand durch Ausprobieren gültige Bestellnummern ermitteln.

Bestellstatus und Widerrufsfrist

Zwei Einstellungen unter Stores → Configuration → Codingrow Extensions → Withdrawal Button → General steuern, welche Anfragen akzeptiert werden, zusätzlich zur oben beschriebenen verpflichtenden Bestell-/E-Mail-Prüfung.

  • Order statuses eligible for withdrawal — ein natives Magento-Mehrfachauswahlfeld (Pending / Processing / Complete / Closed / Canceled / On Hold). Eine Anfrage wird nur akzeptiert, wenn der aktuelle Bestellstatus einer der ausgewählten ist; bei der Installation vorausgewählt auf Pending, Processing, Complete, Closed und On Hold. Eine leere Liste blockiert jede Anfrage unabhängig vom Bestellstatus — eine bewusste Entscheidung des Händlers, kein Fehler.
  • Withdrawal period (days) — wie viele Tage zwischen dem angegebenen Empfangsdatum und dem Zeitpunkt der Antragstellung erlaubt sind (standardmäßig 14, das nach EU-Verbraucherrecht vorgeschriebene Minimum). Nach Ablauf dieser Frist wird die Anfrage mit einer erklärenden Nachricht abgelehnt, die den Kunden bittet, sich direkt an den Shop zu wenden; die Spalte der verstrichenen Tage im Admin-Raster markiert Anfragen, die dieses Limit überschreiten.

Vermeidung doppelter Anfragen

Eine Bestellung kann nur eine aktive Widerrufsanfrage haben, unabhängig von deren Status — selbst eine "Abgelehnte". Ein Kunde, der mit einer Ablehnung nicht einverstanden ist, kann nicht einfach dieselbe Anfrage erneut einreichen, um sie zu umgehen; falls tatsächlich eine Ausnahme nötig ist, löscht der Admin zunächst die vorherige Anfrage aus der Übersicht.

Empfangsdatum & verstrichene Tage

Die Widerrufsfrist (konfigurierbar, standardmäßig 14 Tage) beginnt ab dem Zeitpunkt, zu dem die Ware empfangen wurde, nicht ab dem Kauf- oder Rechnungsdatum — eine Information, die Magento von sich aus nicht kennen kann, da sie vom Transportunternehmen abhängt. Das Formular fragt danach über einen nativen HTML5-Datumswähler (ohne jQuery-UI-Abhängigkeit, die mit einem Theme in Konflikt geraten könnte), begrenzt, sodass kein zukünftiges Datum eingegeben werden kann. Das Bestelldatum selbst wird automatisch aus der verknüpften Bestellung gelesen — der Kunde muss es nie eingeben. Beide Daten sowie die seit dem Empfang verstrichenen Tage werden in der Admin-Übersicht angezeigt (markiert nach Ablauf dieser Frist) und stehen als E-Mail-Variablen zur Verfügung.

Konfigurator für benutzerdefinierte Felder

Über die vier gesetzlich vorgeschriebenen Felder hinaus (Name, E-Mail, Bestellnummer, Empfangsdatum — immer verpflichtend, nie entfernbar) können Sie eine unbegrenzte Anzahl eigener Felder hinzufügen unter Stores → Configuration → Codingrow Extensions → Withdrawal Button → Custom Fields: Beschriftung, Typ, ob es verpflichtend ist, und ob es aktuell im Formular angezeigt wird — die Reihenfolge der Zeilen in dieser Liste ist die Anzeigereihenfolge im Formular.

TypDargestellt als
TextEinzeiliges Eingabefeld
TextbereichMehrzeiliges Feld
DropdownEin <select> mit den eingegebenen Optionen, eine pro Zeile
CheckboxEine einzelne Checkbox (z. B. "Ich habe die Originalverpackung noch")
Beispiel — ein verpflichtendes Dropdown-Feld "Grund der Rückgabe" mit den Optionen "Defekt / Entspricht nicht der Beschreibung / Meinung geändert": Kunden müssen vor dem Absenden eine Option auswählen, und der gewählte Wert erscheint in der Spalte "Benutzerdefinierte Felder" der Admin-Übersicht sowie in beiden Benachrichtigungs-E-Mails.

Werte, die für ein später deaktiviertes Feld übermittelt wurden, bleiben im Verlauf der Anfrage erhalten und werden weiterhin dort angezeigt, wo sie erfasst wurden — nur die Beschriftung des Feldes wird anhand der ID neu aufgelöst, sodass eine spätere Umbenennung des Feldes die Beschriftung überall aktualisiert, auch bei dessen alten Antworten.

Button-Farben & Text

Zwei Hex-Farbfelder (Text und Hintergrund) lassen Sie den Button an Ihre Marke anpassen — nur die Farben ändern sich; Form, Padding und Schriftart bleiben immer die Ihres Themes (Luma oder Hyvä), sodass der Button niemals optisch beschädigt aussehen kann. Ein ungültiger Hex-Wert wird einfach ignoriert und auf die Theme-Standardfarbe zurückgesetzt. Der Button-Text ist ebenfalls konfigurierbar und wird genau wie eingegeben angezeigt (Groß-/Kleinschreibung beibehalten, keine automatische Großschreibung) — lassen Sie ihn leer, um die standardmäßig übersetzte Beschriftung beizubehalten.

reCAPTCHA-Schutz

Withdrawal Button registriert sich selbst als schützbares Formular im nativen reCAPTCHA-System von Magento — Stores → Configuration → Customers → Google reCAPTCHA → Storefront → "Enable for Withdrawal Button". Die für den Rest des Stores bereits konfigurierte Version (v2-Checkbox, v2 unsichtbar oder v3) wird automatisch übernommen; es gibt keine separate Captcha-Konfiguration zu pflegen.

Admin-Übersicht & Massenaktionen

Jede Anfrage landet unter Codingrow Extensions → Withdrawal Button, paginiert und filterbar, mit Spalten für Bestellnummer, Kunde, Empfangsdatum, verstrichene Tage (markiert nach 14), Werte der benutzerdefinierten Felder und Status. Massenaktionen ermöglichen es, den Status mehrerer ausgewählter Anfragen gleichzeitig zu aktualisieren oder Zeilen zu löschen, um Testdaten zu bereinigen.

StatusBedeutung
AusstehendGerade übermittelt, noch nicht geprüft.
In BearbeitungWird vom Store bearbeitet.
AbgeschlossenRückgabe/Rückerstattung abgeschlossen.
AbgelehntDer Store hat die Anfrage abgelehnt.
StorniertDer Kunde hat seine eigene Anfrage zurückgezogen.

E-Mail-Vorlagen & Variablen

Zwei native Magento-E-Mail-Vorlagen — eine Kundenbestätigung (die gesetzlich vorgeschriebene Bestätigung auf einem dauerhaften Datenträger) und eine interne Admin-Benachrichtigung — automatisch versendet über TransportBuilder, genau wie Magentos eigene Bestell-E-Mails. Klonen Sie eine der beiden aus Marketing → Email Templates, bearbeiten Sie den Text mit dem nativen WYSIWYG-Editor und wählen Sie dann Ihre Kopie unter Configuration → Email Templates aus — kein benutzerdefinierter Templating-Code erforderlich.

VariableInhalt
order_increment_idDie Bestellnummer
order_dateDas Bestelldatum selbst, automatisch gelesen
receipt_dateDas vom Kunden angegebene Empfangsdatum der Ware
days_since_receiptSeit diesem Datum verstrichene Tage
request_idInterne Referenznummer dieser Anfrage
submitted_atGenaues Datum und Uhrzeit der Bestätigung der Anfrage
custom_fields_textAlle ausgefüllten benutzerdefinierten Felder, formatiert als "Beschriftung: Wert"-Zeilen

PDF-Retourenetikett

Ein optionaler einfacher Beleg (Logo, Absendername, Rücksendeadresse, Verpackungshinweise), intern mit Zend_Pdf erstellt — dieselbe PDF-Bibliothek, die der Magento-Core selbst für Rechnungen und Lieferungen verwendet, keine zusätzliche Drittanbieter-Abhängigkeit — und automatisch der Bestätigungs-E-Mail des Kunden beigefügt, sobald es unter Configuration → Return Label aktiviert ist. Laden Sie ein Logo hoch, geben Sie die Rücksendeadresse und etwaige Verpackungshinweise ein, und jede zukünftige Bestätigungs-E-Mail einer Anfrage enthält ein druckfertiges Etikett mit der Referenznummer, Bestellnummer, dem Kundennamen und dem Empfangsdatum dieser Anfrage, sowie etwaigen vom Kunden ausgefüllten benutzerdefinierten Feldern.

Widget platzieren

Der Anfragelink ist niemals fest im Theme codiert — er wird ausschließlich über das native Widget-System von Magento platziert, sodass ein Händler vollständig steuert, ob und wo er erscheint. Zwei Möglichkeiten, abhängig davon, wie umfassend Sie ihn anzeigen möchten:

MethodeAm besten geeignet für
Content → Elements → WidgetsAnzeige des Links auf vielen/allen Seiten gleichzeitig oder an einer festen Layout-Position (Footer, Sidebar) auf der gesamten Website.
Insert Widget im Inhalt einer CMS-SeitePlatzierung auf nur einer bestimmten Seite — z. B. der Startseite — genau dort, wo Sie ihn im Inhalt dieser Seite möchten, ohne andere Seiten zu beeinflussen.

Website-weit, über Content → Elements → Widgets:

  1. Content → Elements → Widgets → Add Widget, wählen Sie das Withdrawal-Button-Link-Widget.
  2. Weisen Sie es "All Pages" oder "Specified Page(s)" zu und legen Sie den Anzeigecontainer fest (z. B. content oder sidebar.additional) — bei Hyvä-Themes ist der Container "Footer" möglicherweise nicht in der Widget-Auswahl verfügbar; verwenden Sie in diesem Fall stattdessen den Hauptinhaltsbereich, direkt vor dem Footer.
  3. Speichern und die Zielseite(n) neu laden — für eine neu gespeicherte Widget-Instanz ist kein Cache-Leeren erforderlich.

Nur auf einer bestimmten Seite, z. B. der Startseite:

  1. Content → Pages, öffnen Sie die Seite (z. B. "Home page").
  2. Platzieren Sie im WYSIWYG-Editor des Content-Tabs den Cursor dort, wo der Button erscheinen soll, und klicken Sie auf Insert Widget.
  3. Wählen Sie das Withdrawal-Button-Link-Widget, legen Sie Beschriftungstext und CSS-Klasse fest und klicken Sie dann auf Insert — dadurch wird eine Direktive {{widget type="Codingrow\WithdrawalButton\Block\Widget\Link" ...}} direkt in den Inhalt dieser Seite eingefügt, ohne andere Seiten zu beeinflussen.
  4. Speichern Sie die Seite.
Hinweis: Das Widget ist die einzige unterstützte Möglichkeit, den Link anzuzeigen — das Modul fügt ihn absichtlich nie automatisch in den Footer oder ein anderes Template ein, da ein Händler ihn legitim woanders haben möchte (eine Bestellseite, eine dedizierte CMS-Seite, eine bestimmte Produktkategorie) oder website-weit gar nicht anzeigen möchte.

Lizenz

Ohne gültigen Lizenzschlüssel bleibt die Widerrufsseite sichtbar (ein Händler sollte niemals ohne den gesetzlich vorgeschriebenen Button dastehen, nur weil eine Lizenz abgelaufen ist), aber neue Übermittlungen werden blockiert, bis ein Schlüssel unter Configuration → License → License Key eingegeben wird.