Withdrawal ButtonDocumentatie

Documentatie Withdrawal Button

Installatiestappen en een volledig overzicht van elk veld en elke functie in de admin, met concrete voorbeelden — hetzelfde detailniveau dat onze support gebruikt om klanten te helpen.

Weergeven als Markdown

Installatie

Vereisten

Magento 2.4.x — getest op 2.4.9, compatibel met eerdere 2.4.*-versies. PHP 8.1–8.5. Compatibel met zowel het standaard Luma-thema als het Hyvä-thema. Vereist dat de native Magento_ReCaptcha*-modules aanwezig zijn voor de optionele reCAPTCHA-bescherming (al standaard opgenomen in de Magento-core).

Installatiestappen

  1. Voeg de inloggegevens die je per e-mail ontvangt toe aan auth.json in de root van je Magento-project:
    { "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. Plak je licentiesleutel in Admin → Stores → Configuration → Codingrow Extensions → Withdrawal Button → License → License Key, sla op en voer dan bin/magento cache:flush uit.
  7. Plaats de aanvraaglink ergens waar klanten hem vinden — zie De widget plaatsen hieronder.

Het volledige frontend-formulier, de e-mails en de admin-interface zijn beschikbaar in 7 talen, automatisch geselecteerd op basis van de winkel-/admintaal:

Admin-configuratie

De volledige configuratie staat in Stores → Configuration → Codingrow Extensions → Withdrawal Button: Licentie, Algemeen (inschakelen, notificatie-e-mail, toegestane orderstatussen, herroepingstermijn, knoptekst/-kleuren, aangepaste velden), E-mailsjablonen en het optionele retourlabel.

Withdrawal Button admin configuration in Magento

Deïnstallatie

composer remove codingrow/module-withdrawal-button daarna bin/magento setup:upgrade && bin/magento setup:di:compile && bin/magento cache:flush. Aanvragen die al zijn geregistreerd in codingrow_withdrawalbutton_request worden nooit automatisch verwijderd — exporteer eerst het overzicht als je een registratie wilt bewaren.

Gebruikershandleiding

De herroepingsaanvraagpagina

Eén pagina, twee stappen, precies zoals vereist door de onderliggende richtlijn: de klant vult eerst de vaste velden in (naam, e-mail, bestelnummer, ontvangstdatum) plus eventuele ingeschakelde aangepaste velden, ziet een alleen-lezen samenvatting van alles wat is ingevuld, en bevestigt pas daarna via een aparte, laatste knop. De verborgen velden die de gegevens tussen de twee stappen doorgeven, worden bij bevestiging server-side opnieuw gevalideerd — een klant kan de controles nooit omzeilen door de "bevestigde" stap direct te forceren.

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

Bestelverificatie

Voordat een aanvraag wordt geaccepteerd, controleert de module of het bestelnummer echt bestaat en of het e-mailadres overeenkomt met dat van die bestelling (niet hoofdlettergevoelig, werkt zowel voor gast- als geregistreerde-klantbestellingen). Als een van beide controles mislukt, wordt in beide gevallen hetzelfde algemene bericht "niet gevonden" getoond — dit is bewust: het tonen van "verkeerd e-mailadres" versus "bestelling bestaat niet" zou iemand in staat stellen geldige bestelnummers te achterhalen door te proberen.

Bestelstatus en herroepingstermijn

Twee instellingen in Stores → Configuration → Codingrow Extensions → Withdrawal Button → General bepalen welke aanvragen worden geaccepteerd, naast de verplichte bestel-/e-mailverificatie hierboven beschreven.

  • Order statuses eligible for withdrawal — een native Magento-multiselect (Pending / Processing / Complete / Closed / Canceled / On Hold). Een aanvraag wordt alleen geaccepteerd als de huidige bestelstatus een van de geselecteerde is; bij installatie vooraf geselecteerd op Pending, Processing, Complete, Closed en On Hold. Een lege lijst blokkeert elke aanvraag ongeacht de bestelstatus — een bewuste keuze van de winkelier, geen bug.
  • Withdrawal period (days) — hoeveel dagen zijn toegestaan tussen de opgegeven ontvangstdatum en het moment waarop de aanvraag wordt ingediend (standaard 14, het minimum volgens de EU-regelgeving voor herroeping). Na afloop van die termijn wordt de aanvraag geweigerd met een verklarend bericht dat de klant uitnodigt rechtstreeks contact op te nemen met de winkel; de kolom met verstreken dagen in het adminoverzicht markeert aanvragen die deze limiet overschrijden.

Preventie van dubbele aanvragen

Eén bestelling kan slechts één actieve herroepingsaanvraag hebben, ongeacht de status — zelfs een "Afgewezen" aanvraag. Een klant die het niet eens is met een afwijzing kan niet zomaar dezelfde aanvraag opnieuw indienen om dit te omzeilen; als een echte uitzondering nodig is, verwijdert de admin eerst de vorige aanvraag uit het overzicht.

Ontvangstdatum & verstreken dagen

De herroepingstermijn (instelbaar, standaard 14 dagen) begint vanaf het moment dat de goederen zijn ontvangen, niet vanaf de aankoop- of factuurdatum — informatie die Magento niet uit zichzelf kan weten, omdat dit afhangt van de vervoerder. Het formulier vraagt hierom via een native HTML5-datumkiezer (zonder jQuery UI-afhankelijkheid die met een thema in conflict zou kunnen komen), begrensd zodat er geen toekomstige datum kan worden ingevoerd. De besteldatum zelf wordt automatisch uitgelezen uit de gekoppelde bestelling — de klant hoeft deze nooit zelf in te typen. Beide data, plus de dagen verstreken sinds ontvangst, worden getoond in het adminoverzicht (gemarkeerd na afloop van die termijn) en zijn beschikbaar als e-mailvariabelen.

Bouwer voor aangepaste velden

Naast de vier wettelijk verplichte velden (naam, e-mail, bestelnummer, ontvangstdatum — altijd verplicht, nooit te verwijderen), kun je een onbeperkt aantal eigen velden toevoegen via Stores → Configuration → Codingrow Extensions → Withdrawal Button → Custom Fields: label, type, of het verplicht is, en of het momenteel op het formulier wordt getoond — de volgorde van de rijen in die lijst is de weergavevolgorde op het formulier.

TypeWeergegeven als
TekstInvoerveld van één regel
TekstvakMeerregelig vak
KeuzelijstEen <select> met de door jou ingevoerde opties, één per regel
SelectievakjeEén selectievakje (bijv. "Ik heb de originele verpakking nog")
Voorbeeld — een verplicht keuzelijstveld "Reden voor retour" met opties "Defect / Komt niet overeen met beschrijving / Van gedachten veranderd": klanten moeten er één kiezen voordat ze kunnen verzenden, en de gekozen waarde verschijnt in de kolom "Aangepaste velden" van het adminoverzicht en in beide notificatie-e-mails.

Waarden die zijn ingevuld voor een veld dat later wordt uitgeschakeld, blijven bewaard in de geschiedenis van de aanvraag en worden nog steeds getoond waar ze zijn geregistreerd — alleen het label van het veld wordt opnieuw opgehaald op basis van het ID, dus het hernoemen van een veld werkt het label overal bij, ook bij eerdere antwoorden.

Knopkleuren & tekst

Twee hexadecimale kleurvelden (tekst en achtergrond) laten je de knop aan je merk aanpassen — alleen de kleuren veranderen; vorm, padding en lettertype blijven altijd die van je thema (Luma of Hyvä), zodat de knop nooit visueel kapot kan gaan. Een ongeldige hexwaarde wordt gewoon genegeerd, waarbij wordt teruggevallen op de standaardkleur van het thema. De tekst van de knop is ook configureerbaar, weergegeven precies zoals ingetypt (hoofdlettergebruik behouden, geen automatische hoofdletters) — laat leeg om het standaard vertaalde label te behouden.

reCAPTCHA-bescherming

Withdrawal Button registreert zichzelf als beschermbaar formulier in het native reCAPTCHA-systeem van Magento — Stores → Configuration → Customers → Google reCAPTCHA → Storefront → "Enable for Withdrawal Button". De versie die je al hebt geconfigureerd voor de rest van de winkel (v2 selectievakje, v2 onzichtbaar, of v3) wordt automatisch toegepast; er is geen aparte captchaconfiguratie om te onderhouden.

Adminoverzicht & bulkacties

Elke aanvraag komt terecht in Codingrow Extensions → Withdrawal Button, gepagineerd en filterbaar, met kolommen voor bestelnummer, klant, ontvangstdatum, verstreken dagen (gemarkeerd na 14), waarden van aangepaste velden en status. Met bulkacties kun je de status van meerdere geselecteerde aanvragen tegelijk bijwerken, of rijen verwijderen om testgegevens op te ruimen.

StatusBetekenis
In behandelingNet ingediend, nog niet beoordeeld.
Wordt verwerktWordt afgehandeld door de winkel.
VoltooidRetour/terugbetaling afgerond.
AfgewezenDe winkel heeft de aanvraag geweigerd.
GeannuleerdDe klant heeft zijn eigen aanvraag ingetrokken.

E-mailsjablonen & variabelen

Twee native Magento-e-mailsjablonen — een klantbevestiging (de wettelijk verplichte bevestiging op een duurzame gegevensdrager) en een interne adminmelding — automatisch verzonden via TransportBuilder, precies zoals Magento's eigen bestel-e-mails. Kloon een van beide vanuit Marketing → Email Templates, bewerk de tekst met de native WYSIWYG-editor, en selecteer dan je kopie in Configuration → Email Templates — geen aangepaste sjabloonlogica nodig.

VariabeleInhoud
order_increment_idHet bestelnummer
order_dateDe datum van de bestelling zelf, automatisch uitgelezen
receipt_dateDe datum waarop de klant aangaf de goederen te hebben ontvangen
days_since_receiptDagen verstreken sinds die datum
request_idIntern referentienummer van deze aanvraag
submitted_atExacte datum en tijd waarop de aanvraag werd bevestigd
custom_fields_textAlle ingevulde aangepaste velden, opgemaakt als "Label: waarde"-regels

PDF-retouretiket

Een optionele eenvoudige bon (logo, naam afzender, retouradres, verpakkingsinstructies) intern gegenereerd met Zend_Pdf — dezelfde PDF-bibliotheek die de Magento-core zelf gebruikt voor facturen en verzendingen, geen extra afhankelijkheid van derden — en automatisch toegevoegd aan de ontvangstbevestigings-e-mail van de klant zodra dit is ingeschakeld in Configuration → Return Label. Upload een logo, vul het retouradres en eventuele verpakkingsinstructies in, en elke toekomstige bevestigingsmail van een aanvraag bevat een afdrukklaar etiket met het referentienummer, bestelnummer, klantnaam en ontvangstdatum van die aanvraag, plus eventuele door de klant ingevulde aangepaste velden.

De widget plaatsen

De aanvraaglink is nooit hardgecodeerd in het thema — hij wordt uitsluitend geplaatst via het native Widget-systeem van Magento, zodat een verkoper volledige controle heeft of, en waar, hij verschijnt. Twee manieren om dit te doen, afhankelijk van hoe breed je hem wilt tonen:

MethodeHet beste voor
Content → Elements → WidgetsDe link tonen op veel/alle pagina's tegelijk, of op een vaste layoutpositie (footer, zijbalk) op de hele site.
Insert Widget in de inhoud van een CMS-paginaHem plaatsen op slechts één specifieke pagina — bijv. de homepage — precies waar je hem wilt in de inhoud van die pagina, zonder andere pagina's te beïnvloeden.

Sitebreed, via Content → Elements → Widgets:

  1. Content → Elements → Widgets → Add Widget, kies de Withdrawal Button-linkwidget.
  2. Wijs hem toe aan "All Pages" of "Specified Page(s)" en stel de weergavecontainer in (bijv. content of sidebar.additional) — bij Hyvä-thema's is de container "Footer" mogelijk niet beschikbaar in de widgetkiezer; gebruik in dat geval in plaats daarvan het hoofdinhoudsgebied, vlak voor de footer.
  3. Sla op en herlaad de doelpagina('s) — geen cache-flush nodig voor een net opgeslagen widget-instantie.

Op slechts één specifieke pagina, bijv. de homepage:

  1. Content → Pages, open de pagina (bijv. "Home page").
  2. Plaats in de WYSIWYG-editor van het tabblad Content de cursor waar je de knop wilt en klik op Insert Widget.
  3. Kies de Withdrawal Button-linkwidget, stel de labeltekst en CSS-klasse in, en klik dan op Insert — dit plaatst een directive {{widget type="Codingrow\WithdrawalButton\Block\Widget\Link" ...}} direct in de inhoud van die pagina, zonder andere pagina's te beïnvloeden.
  4. Sla de pagina op.
Let op: de widget is de enige ondersteunde manier om de link te tonen — de module injecteert hem bewust nooit automatisch in de footer of een ander template, omdat een verkoper hem legitiem ergens anders zou kunnen willen (een bestelpagina, een speciale CMS-pagina, een specifieke productcategorie) of helemaal niet sitebreed wil tonen.

Licentie

Zonder geldige licentiesleutel blijft de herroepingspagina zichtbaar (een verkoper mag nooit zonder de wettelijk verplichte knop komen te zitten alleen omdat een licentie is verlopen), maar nieuwe indieningen worden geblokkeerd totdat een sleutel wordt ingevoerd in Configuration → License → License Key.