mage2kishan/module-eu-withdrawal
Composer 安装命令:
composer require mage2kishan/module-eu-withdrawal
包简介
Panth EU Withdrawal Button — a clear, accessible digital withdrawal (cancellation) function for Magento 2 and Adobe Commerce that complies with Directive (EU) 2023/2673 (effective 19 June 2026). Guest-capable two-step withdrawal flow, durable-medium email proof, withdrawal link in order emails, conf
关键字:
README 文档
README
Panth EU Withdrawal Button — Directive (EU) 2023/2673 Cancellation Function for Magento 2 | Panth Infotech
The cancellation function your store needs before 19 June 2026. Directive (EU) 2023/2673 requires every webshop selling to EU consumers to provide a clear, easy-to-find digital withdrawal button. This extension delivers the full flow — a guest-capable two-step form, durable email proof, a pre-filled link in order emails, customer account history, and admin management.
Panth EU Withdrawal Button implements the digital "right of withdrawal" function set out in Directive (EU) 2023/2673, which becomes mandatory on 19 June 2026. Customers can cancel an order from a permanently visible button, without logging in and without giving a reason, inside the legal withdrawal period. The store records each request, sends the consumer a confirmation on a durable medium as proof, and gives the merchant a place to track and resolve every withdrawal.
The whole flow is built for both Hyvä and Luma, ships translations for English, Dutch, German and French, and stays out of the way of Full Page Cache. It adds nothing to checkout and touches the order only to record a status-history comment, so it is safe to install on a live store.
🚀 Need Custom Magento 2 Development?
Get a free quote for your project in 24 hours — custom modules, Hyvä themes, performance optimization, M1→M2 migrations, and Adobe Commerce Cloud.
Visit our website: kishansavaliya.com | Get a quote: kishansavaliya.com/get-quote
Table of Contents
- Screenshots
- What Directive (EU) 2023/2673 Requires
- Key Features
- How This Module Meets the Directive
- The Customer Flow
- Customer Account Area
- Admin Management
- Compatibility
- Installation
- Configuration
- Anti-Abuse Protection
- Hyvä and Luma
- Batch Processing and Reminders
- Translations
- Troubleshooting
- FAQ
- Support
- License
- About Panth Infotech
- Quick Links
Screenshots
Storefront
Always-visible floating "Cancel my order" tab on every page (Hyvä shown):
Pop-up withdrawal form — logged-in customers pick the order from a dropdown, with name and email pre-filled:
Step 2 — order summary and "Confirm withdrawal" before anything is recorded:
Proof page with the unique reference after the withdrawal is recorded:
Customer Account
"My withdrawals" history, placed right after "My Orders", with status badges and a View action:
Per-request detail with status, proof reference and the full content of the withdrawal:
Admin
Configuration — General, Form, Compliance Content, Notifications and Batch Processing:
EU Withdrawal Requests grid with status column, order links and filters:
Request detail — proof content, status workflow and internal note:
"EU Withdrawal Request" panel on the sales order view, linking the order to its request:
What Directive (EU) 2023/2673 Requires
The directive updates the rules for distance contracts and, from 19 June 2026, requires a usable online cancellation function. In short, a compliant store must:
- Show a clearly labelled withdrawal button that is easy to find and stays reachable for the whole withdrawal period, on desktop and mobile.
- Let consumers cancel without logging in — guest orders included.
- Use a two-step process: first a short form asking only for the data needed, then a confirmation screen before the cancellation is final.
- Ask for minimal data only. If a reason is requested, it must be optional.
- Send an automatic confirmation on a durable medium (such as email) containing the date, time and content of the withdrawal.
- Include a direct link to the cancellation function in every order confirmation email.
- Keep consumers informed about exclusions, return shipping costs and refunds before purchase.
This module covers the technical side of all of the above. The compliance text on the form and in emails is fully editable so you can match it to your own terms.
Key Features
Storefront Entry Points
- Floating side tab that stays visible on every page (left or right, configurable).
- Header and footer links as optional alternatives.
- Customer account menu entry, placed right after My Orders.
- "Cancel my order" button on the order view page for logged-in customers, pre-filled and signed for that specific order.
- Pop-up modal — clicking any entry point opens the form in place; without JavaScript it falls back to the dedicated
/withdrawalpage.
Two-Step Withdrawal Flow
- Step 1 collects only order number, email and name, plus an optional reason.
- Logged-in customers get an order dropdown of their eligible orders, with name and email pre-filled.
- Step 2 shows an order summary and a "Confirm withdrawal" button before anything is recorded.
- A proof page with a unique reference closes the flow.
Durable-Medium Email Proof
- Customer confirmation email with the proof reference, exact date and time, and the full content of the withdrawal.
- Admin notification email for every new request.
- Signed, pre-filled withdrawal link injected into order confirmation emails, with no template editing required.
- Refund-deadline reminder email to staff before the 14-day refund window lapses.
Customer Account History
- A "My withdrawals" page lists every request with order, date, status and proof reference.
- A View action opens a read-only detail page for each request.
- Ownership is enforced — a customer can only see their own requests.
Admin Management
- A dedicated EU Withdrawal Requests grid under Panth Extensions, with filters, status column and links to each order.
- A request detail screen to read the full proof content, change status (Received, Acknowledged, Refunded, Rejected) and add an internal note.
- An "EU Withdrawal Request" panel on the admin order view, linking the order to its request and showing the current status.
Compliance, Window and Status
- Configurable withdrawal period (default 14 days), counted from the order date or the shipment date.
- Editable compliance notices for right of withdrawal, excluded products, return shipping and refunds.
- Optional order status applied on withdrawal; a status-history comment is always recorded.
- One request per order — a second attempt shows the status page instead of creating a duplicate.
Anti-Abuse and Performance
- Honeypot field, JavaScript speed-trap and per-IP rate limiting on the public lookup step.
- Signed HMAC tokens prevent order-number guessing and power the pre-filled email links.
- No personal data is exposed to anyone who cannot already prove order ownership.
- Front-end markup stays Full Page Cache friendly; customer-specific data loads through a session request.
How This Module Meets the Directive
| Requirement | How it is met |
|---|---|
| Clearly labelled, easy-to-find button | Floating side tab on every page, plus header/footer/account options, with an editable label |
| Reachable for the full period, desktop and mobile | Always-visible, responsive, available for the configured window |
| No login required, guests included | Order lookup by order number and email; no account needed |
| Two-step process | Step 1 minimal form, Step 2 confirmation page before it is recorded |
| Minimal data, optional reason | Asks order number, email and name; the reason field can never be required |
| Immediate confirmation on a durable medium | Automatic email with proof reference, date, time and withdrawal content |
| Link in every order email | Signed, pre-filled withdrawal link injected into order confirmation emails |
| Inform of exclusions, shipping, refunds | Editable notices shown on the form and in emails |
This extension provides the cancellation function and the supporting workflow. It is not legal advice — set your compliance notices and refund handling to match your own terms and local implementation of the directive.
The Customer Flow
- The customer opens the form from the floating tab, the link in an order email, or the order view page.
- Step 1 — they enter order number, email and name (logged-in customers pick the order from a list). The reason is optional.
- The store checks that the order matches the email and is still inside the withdrawal period.
- Step 2 — a summary of the order is shown. The customer clicks Confirm withdrawal.
- The withdrawal is recorded, a confirmation email is sent as durable proof, staff are notified, and a comment is added to the order.
- The customer sees a proof page with a reference number.
If the order has already been withdrawn, the form shows the existing request's status instead of recording a second one.
Customer Account Area
Logged-in customers get a My withdrawals entry in the account menu, directly after My Orders. The page lists each request with its order number, date, status badge and proof reference, and a View link to a read-only detail page. The order view page also shows a Cancel my order button for orders that are still eligible.
Admin Management
Open Panth Extensions → EU Withdrawal Button → Withdrawal Requests for the grid. Each row links to its sales order; the Status column and filters help you work through the queue. Open a request to read the full proof content, change its status, and add an internal note.
On the sales order view, an EU Withdrawal Request panel appears for any order that has a request, showing the status badge and a link to the request detail. The relationship is visible from both sides — request to order, and order to request.
Compatibility
| Requirement | Versions Supported |
|---|---|
| Magento Open Source | 2.4.4, 2.4.5, 2.4.6, 2.4.7, 2.4.8, 2.4.9 |
| Adobe Commerce | 2.4.4 — 2.4.9 |
| Adobe Commerce Cloud | 2.4.4 — 2.4.9 |
| PHP | 8.1.x, 8.2.x, 8.3.x, 8.4.x |
| MySQL | 8.0+ |
| MariaDB | 10.4+ |
| Hyvä Theme | 1.1+ (native support) |
| Luma Theme | Native support |
| Required Dependency | mage2kishan/module-core ^1.0 |
Installation
Composer Installation (Recommended)
composer require mage2kishan/module-eu-withdrawal bin/magento module:enable Panth_Core Panth_EuWithdrawal bin/magento setup:upgrade bin/magento setup:di:compile bin/magento setup:static-content:deploy -f bin/magento cache:flush
Manual Installation via ZIP
- Download the latest release ZIP from Packagist or the Adobe Commerce Marketplace.
- Extract the contents to
app/code/Panth/EuWithdrawal/in your Magento installation. - Make sure
Panth_Coreis installed (required dependency). - Run the same commands as above, starting from
bin/magento module:enable.
Verify Installation
bin/magento module:status Panth_EuWithdrawal
# Expected output: Module is enabled
Configuration
Go to Admin → Stores → Configuration → Panth Extensions → EU Withdrawal Button.
General
| Setting | Default | Description |
|---|---|---|
| Enable Withdrawal Button | Yes | Master toggle for the whole feature. |
| Button / Link Label | Cancel my order | The visible label. Use clear wording; vague labels are not compliant. |
| Storefront Placement | Floating + Account | Where the always-visible button appears: floating side tab, header, footer, account. |
| Floating Button Side | Right | Right or left, when the floating tab is used. |
| Withdrawal Period (days) | 14 | Minimum is 14. Extends to 12 months if the customer was not informed before purchase. |
| Period Starts From | Order date | Order date or shipment date (date of receipt). |
| Set Order Status On Withdrawal | (none) | Optional status applied on withdrawal. A comment is always recorded. |
Withdrawal Form
| Setting | Default | Description |
|---|---|---|
| Ask For Withdrawal Reason | Yes | When shown, the reason field is always optional. |
| Enable Honeypot Spam Protection | Yes | Hidden trap plus a JavaScript speed-check on the lookup step. |
| Lookups Allowed Per IP (per 10 min) | 10 | Anti-enumeration throttle. 0 disables it. |
Compliance Content
| Setting | Description |
|---|---|
| Right Of Withdrawal Notice | Shown on the form and in emails. |
| Excluded Products Notice | Custom-made goods, perishables, sealed hygiene items, downloaded digital content, and so on. |
| Return Shipping Costs Notice | Who pays for returns. |
| Refund Policy Notice | How and when refunds are issued. |
Notifications and Emails
| Setting | Default | Description |
|---|---|---|
| Email Sender | General Contact | Sender identity for outgoing mail. |
| Send Customer Confirmation (durable proof) | Yes | The required durable-medium confirmation. |
| Customer Confirmation Template | Panth default | Email template for the confirmation. |
| Send Admin Notification | Yes | Notify staff of new requests. |
| Admin Notification Email | orders@example.com | Recipient for admin notifications. |
| Admin Notification Template | Panth default | Email template for admin notices. |
| Add Withdrawal Link To Order Emails | Yes | Injects a signed, pre-filled link into order confirmation emails. |
Batch Processing and Reminders
| Setting | Default | Description |
|---|---|---|
| Enable Batch Processor (cron) | Yes | Retries failed confirmation emails and sends refund reminders. |
| Batch Size | 50 | Records processed per run. |
| Send Refund-Deadline Reminder To Admin | Yes | Reminds staff before the 14-day refund window lapses. |
| Remind After (days) | 10 | Days after the request before the reminder is sent. |
All settings respect Magento's scope hierarchy (default → website → store view).
Anti-Abuse Protection
The public lookup step is open by design, so it is protected in layers:
- Honeypot field — a hidden input that real customers never fill.
- JavaScript speed-trap — submissions that arrive implausibly fast from a scripted client are rejected, while customers without JavaScript are still able to withdraw.
- Per-IP rate limiting — caps repeated lookups in a time window.
- Signed HMAC tokens — order-number guessing is blocked, and the pre-filled email links cannot be tampered with.
- Generic responses — a wrong order/email pair returns the same message every time, so the form cannot be used to confirm whether an order exists.
None of this stores extra personal data, and the markup stays cacheable.
Hyvä and Luma
The storefront detects the active theme through the shared Panth_Core theme helper and renders the matching markup. Styling is shipped as an external stylesheet, so it is identical on both themes and safe under Hyvä's strict Content Security Policy — no inline styles or inline scripts. Order emails are theme-independent. The floating tab, modal and forms have been tested on both Hyvä and Luma.
Batch Processing and Reminders
A cron job runs on a schedule and processes requests in configurable batches. It re-sends any confirmation email that failed the first time, so the durable-proof guarantee holds even if mail was briefly unavailable. It also emails staff a reminder when a request is approaching the 14-day refund deadline and is still unresolved, which helps the store meet its refund obligation.
Translations
The storefront ships with full translations for:
- English (
en_US) - Dutch (
nl_NL) - German (
de_DE) - French (
fr_FR)
All strings use Magento's __() function, so you can add or override any locale from your own theme or language pack.
Troubleshooting
| Issue | Cause | Resolution |
|---|---|---|
| Button not visible | Module disabled, placement, or cache | Check Enable and Placement, then bin/magento cache:flush |
| Wrong theme markup | Stale generated/static files | bin/magento cache:flush and remove generated/code/Panth/EuWithdrawal |
| No confirmation email | Sender identity or mail transport | Check the email settings; the batch cron retries failures |
| Order not found | Order number and email must match | Confirm both, and the correct store scope |
| Withdrawal link missing in order email | Setting disabled or order out of window | Enable Add Withdrawal Link To Order Emails |
| Hyvä storefront missing styles | Static content not deployed | bin/magento setup:static-content:deploy -f |
FAQ
Does it work for guest orders?
Yes. Customers cancel by entering the order number and email — no account is required.
Can a customer withdraw the same order twice?
No. A second attempt shows the existing request's status page instead of creating a duplicate.
Does it cancel or refund the order automatically?
No. It records the request, comments the order, optionally sets a status, and notifies staff. Your team handles the refund within the legal window. This keeps paid and partially shipped orders safe.
Does it support Hyvä?
Yes, natively. The same flow renders on both Hyvä and Luma.
Will it work with Full Page Cache?
Yes. The markup is cacheable; customer-specific data (such as the order dropdown) loads through a session request, not from cached HTML.
Is the reason field required?
Never. If you choose to show it, it stays optional, as the directive requires.
Can I edit the compliance text and emails?
Yes. The notices are admin settings, and the email templates are standard Magento transactional templates you can override.
Is Panth_Core required?
Yes. mage2kishan/module-core is a required dependency and is pulled in automatically by Composer.
Is this legal advice?
No. It provides the technical cancellation function and workflow. Configure the notices and refund process to match your own terms and local rules.
Support
| Channel | Contact |
|---|---|
| kishansavaliyakb@gmail.com | |
| Website | kishansavaliya.com |
| +91 84012 70422 | |
| GitHub Issues | github.com/mage2sk/module-eu-withdrawal/issues |
| Upwork (Top Rated Plus) | Hire Kishan Savaliya |
| Upwork Agency | Panth Infotech |
Response time: 1-2 business days.
💼 Need Custom Magento Development?
Looking for custom Magento module development, Hyvä theme customization, store migrations, or performance optimization? Get a free quote in 24 hours:
Specializations:
- 🛒 Magento 2 Module Development — custom extensions following MEQP standards
- 🎨 Hyvä Theme Development — Alpine.js + Tailwind CSS, fast storefronts
- 🖌️ Luma Theme Customization — pixel-perfect designs, responsive layouts
- ⚡ Performance Optimization — Core Web Vitals, page speed, caching strategies
- 🔍 Magento SEO — structured data, hreflang, sitemaps
- 🛍️ Checkout Optimization — one-page checkout, conversion rate optimization
- 🚀 M1 to M2 Migrations — data migration, custom feature porting
- ☁️ Adobe Commerce Cloud — deployment, CI/CD, performance tuning
- 🔌 Third-party Integrations — payment gateways, ERP, CRM, marketing tools
License
Panth EU Withdrawal Button is licensed under a proprietary license — see LICENSE.txt. One license per Magento installation.
About Panth Infotech
Built and maintained by Kishan Savaliya — kishansavaliya.com — a Top Rated Plus Magento developer on Upwork with 10+ years of eCommerce experience.
Panth Infotech is a Magento 2 development agency building high-quality, security-focused extensions and themes for both Hyvä and Luma storefronts. Our catalog covers SEO, performance, checkout, product presentation, customer engagement, compliance and store management — over 34 modules built to MEQP standards and tested across Magento 2.4.4 to 2.4.9.
Browse the full extension catalog on the Adobe Commerce Marketplace or Packagist.
Quick Links
- 🌐 Website: kishansavaliya.com
- 💬 Get a Quote: kishansavaliya.com/get-quote
- 👨💻 Upwork Profile (Top Rated Plus): upwork.com/freelancers/~016dd1767321100e21
- 🏢 Upwork Agency: upwork.com/agencies/1881421506131960778
- 📦 Packagist: packagist.org/packages/mage2kishan/module-eu-withdrawal
- 🐙 GitHub: github.com/mage2sk/module-eu-withdrawal
- 🛒 Adobe Marketplace: commercemarketplace.adobe.com
- 📧 Email: kishansavaliyakb@gmail.com
- 📱 WhatsApp: +91 84012 70422
Get your store ready for 19 June 2026.
SEO Keywords: magento 2 eu withdrawal button, directive eu 2023/2673 magento, magento 2 right of withdrawal, magento 2 order cancellation function, magento 2 cancel order button, magento 2 consumer rights, magento 2 distance selling, magento 2 14 day withdrawal, magento 2 cooling off period, withdrawal button magento extension, hyva withdrawal button, luma withdrawal button, magento 2 guest order cancellation, magento 2 refund workflow, magento 2 order email cancellation link, magento 2 durable medium confirmation, magento 2 gdpr cancellation, magento 2.4.9 withdrawal module, magento php 8.4 compliance module, mage2kishan eu withdrawal, panth infotech withdrawal button, kishan savaliya magento, eu 2023/2673 cancellation function, magento 2 widerruf button, magento 2 herroepingsrecht, hire magento developer upwork, top rated plus magento freelancer, custom magento development
统计信息
- 总下载量: 0
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 1
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: proprietary
- 更新时间: 2026-06-16









