Online Withdrawal Module
Automated Online Withdrawal Right Module
Make your Magento 2 store 100% compliant. A seamless, automated online withdrawal process for consumers and an intuitive management workflow for merchants.
Strict Legal Compliance
The extension enables B2C customers to legally exercise their right of withdrawal online within 14 days (or a custom configured period). Upon submission, the buyer instantly receives an automated email confirmation on a durable medium, fully satisfying legal obligations.
Online Withdrawal Declaration Form
Customers no longer need to print, sign, or scan documents. They can easily select eligible orders from a dropdown list, view the summary, add an optional comment, and instantly submit the request.
Granular Store View Configuration
The module is completely configurable under the Webtech Solutions tab in the Magento Admin. Define the withdrawal period (in days), restrict eligible order statuses, and independently assign transaction email templates per store view.
Customer Account / Request History
Customers can effortlessly monitor the state of their submitted declarations inside their dashboard.
Admin / Request Review UI
A dedicated block appears directly on the order details page for instant Approvals or Rejections.
Automated Order History Comments
Every status transition and admin action is automatically logged chronologically in the native Order History.
v1.1.0 - Latest stable version 🛡️
Google reCAPTCHA Support: Google reCAPTCHA spam filtering has been integrated for the secure submission of withdrawal forms.
Operation
• Guest form: The reCAPTCHA widget appears above the withdrawal declaration button; on the server side, the Observer validates the token and redirects the customer back to the form if validation fails.
• Logged-in form: The same Observer runs, and the Hyva template also checks the token on the client side before the Alpine.js submitForm() call.
• Inactive state: If reCAPTCHA is disabled (no type selected), the Observer and the input field automatically become inactive — the form works without reCAPTCHA.
v1.0.5 - Earlier stable version
✔ Fixed My Orders grid layout breaking in Hyva theme — registered WeatherAnomalyHyva and CustomerWithdrawalHyva modules in the Hyva CompatModuleRegistry.
✔ Fixed withdrawal success page missing left sidebar navigation in Luma theme.
✔ Fixed withdrawal form using Alpine.js template on Luma theme, making it unsubmittable.
✔ Fixed email mismatch error for logged-in customers on multi-store setups with identical order increment IDs across store views.
v1.0.2 - Earlier stable version
✔ Fixed My Orders grid layout breaking in Hyva theme — registered WeatherAnomalyHyva and CustomerWithdrawalHyva modules in the Hyva CompatModuleRegistry.
✔ Fixed withdrawal success page missing left sidebar navigation in native Magento Luma theme environments.
✔ Fixed withdrawal form using Alpine.js template on Luma theme, resolving an edge-case bug that caused the form submission hook to become completely unsubmittable.
✔ Fixed email mismatch error for logged-in customers on complex multi-store setups operating with identical order increment IDs across different store views.
1.0.0 - First Release
- Online withdrawal form for guest and logged-in customers
- Server-side permission and validation checks (status, deadline, duplication)
- Automatic email confirmation (durable medium)
- Automatic order status update (withdrawal_requested)
- Order history log entry
- Admin UI: Sales > Withdrawal Requests management interface — approval and rejection with admin comments
- Status change notification email to the customer (approval / rejection)
- Two-way linking: order page ↔ withdrawal details page
- GraphQL mutation (requestWithdrawal) for headless/PWA frontends
- REST API endpoints for ERP/CRM integration
- Store View-level configuration
Frequently Asked Questions
The module is fully optimized to comply with the EU 2023/2673 directive and the modified Hungarian 45/2014. (II.26.) Korm. rendelet legal frameworks. It provides retail B2C shoppers with a fully digital, legally compliant method to exercise their 14-day right of withdrawal. Furthermore, it instantly emails an official confirmation to the shopper, fulfilling the strict legal requirement of providing verification on a "durable medium".
To prevent malicious scripts from flooding your order records, the extension features full integration with Google reCAPTCHA v2 and v3 (including checkbox and invisible variants). The reCAPTCHA protection automatically binds to the guest withdrawal form via an active server-side Observer that validates the validation token before any data hits your tables. Logged-in customer forms are similarly validated using an Alpine.js framework.
The frontend interface dynamically filters available transactions to protect store owners from invalid requests. An order will only display in the customer's selection dropdown if it satisfies three strict criteria: it belongs securely to their active profile, it hasn't exceeded the legal Withdrawal Period (e.g., 14 days from purchase), and its current order state perfectly matches the Allowed Order Statuses set in your system configuration (typically processing or complete).
The workflow gracefully syncs the withdrawal records with Magento's native sales engine:
- On Customer Submission: The system flags the order with a dedicated
withdrawal_requestedstate tag. - On Admin Approval: The order status transitions automatically to
withdrawal_approved, a history log is pinned, and a confirmation email fires to the client. - On Admin Rejection: The system reverts the order status back to its original baseline state, writes your administrative rejection notes into the order history logs, and alerts the customer via email with your written justification.
To eliminate tedious back-and-forth searching within the Magento backend, the module introduces seamless cross-referencing deep links. When viewing an active withdrawal case profile, the order increment ID functions as a direct hyperlink to the default Magento Sales > Orders details layout. Conversely, the default Magento order view page injects a dedicated Withdrawal Request right-hand sidebar panel with a direct link back to the processing workspace.
Yes, it is built out-of-the-box for modern headless commerce frameworks. The extension implements a native GraphQL mutation layer (requestWithdrawal) designed to easily wire into Hyvä, custom PWA storefronts, or decoupled frontends. Additionally, it exposes complete REST API endpoints (POST /V1/withdrawal/request), making it incredibly straightforward to sync incoming requests with external enterprise ERP or CRM workflows.
Yes, the entire configuration stack is fully scoped at the Store View level. This lets you toggle Enable Module = Yes for your consumer-facing retail B2C Store Views while setting it to No on wholesale B2B Store Views. When disabled for a specific view, the frontend routes gracefully default to a 404 page, and the API calls automatically throw an input exception.
By default, transactional notification emails are processed synchronously right after a request is successfully committed to the database. If your primary SMTP server drops, the request record remains perfectly intact, though the notification will fail to dispatch. For high-volume environments, it is strongly recommended to enable asynchronous email processing by leveraging Magento’s native Magento_MessageQueue database pipeline to guarantee message delivery.