PHPackages                             run-as-root/module-withdrawal - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. run-as-root/module-withdrawal

ActiveMagento2-module[Utility &amp; Helpers](/categories/utility)

run-as-root/module-withdrawal
=============================

Magento 2 EU Withdrawal Button Module - Adds a withdrawal/revocation button for orders in compliance with EU Directive (EU) 2023/2673

1.5.0-p2(2mo ago)01.1k↓50%1OSL-3.0PHPPHP &gt;=7.4

Since Feb 10Pushed 2mo agoCompare

[ Source](https://github.com/run-as-root/magento2-withdrawl)[ Packagist](https://packagist.org/packages/run-as-root/module-withdrawal)[ RSS](/packages/run-as-root-module-withdrawal/feed)WikiDiscussions main Synced 3w ago

READMEChangelog (2)Dependencies (8)Versions (8)Used By (1)

Withdrawal Button for Magento 2
===============================

[](#withdrawal-button-for-magento-2)

> Magento 2 extension for implementing the EU right of withdrawal via button click.

---

What is it about?
-----------------

[](#what-is-it-about)

The EU Directive **(EU) 2023/2673** requires that in the future, consumers must be able to withdraw from online purchase contracts just as easily as they were concluded. **Starting June 19, 2026**, a clearly visible withdrawal button will be mandatory in online shops.

This Magento module provides exactly that: your customers can withdraw orders with just a few clicks – directly from their customer account or via a separate form for guest orders. As a shop operator, you maintain a full overview in the admin area.

---

What does the module do?
------------------------

[](#what-does-the-module-do)

### For your customers

[](#for-your-customers)

**Withdrawal button in the order overview**

In the *My Account &gt; My Orders* view, a new column appears for each order. There, the customer can see at a glance:

- A **Withdrawal link**, as long as the period is active
- The note **"Withdrawal submitted"**, if a withdrawal has already been made
- The note **"Period expired"**, if the withdrawal period has passed

Additionally, a **"Withdrawal Order"** button is displayed on the order details page.

**Withdrawal detail page**

Refore the actual withdrawal, the customer sees a summary of their order:

- Order number, date, status, total amount
- All ordered items with name, SKU, quantity, and price
- The deadline until which withdrawal is possible, calculated from the date of the last shipment
- A button for final submission ₓ with a preceding security confirmation

**Guest orders**

Customers who ordered without an account can access the withdrawal via a dedicated search form. Entering the order number and email address is sufficient to find the order and initiate the withdrawal.

Accessible at: `/withdrawal/guest/search`

**Confirmation page**

After submission, the customer is redirected to a success page. This confirms that the withdrawal has been received and that an email is on its way.

### For you as a shop operator

[](#for-you-as-a-shop-operator)

**Admin overview of all withdrawals**

Under *Sales &gt; Withdrawals*, you will find a tabular overview of all received withdrawals:

- ID, order number, customer name, email
- Status (Pending / Confirmed / Rejected)
- Date of order and date of withdrawal
- Direct link to the respective order view

All columns can be filtered and sorted.

**Automatic email notification**

Soon as a withdrawal is received, two emails are sent:

1. **To the customer** ₓ Confirmation with order details
2. **To you** – Notification with all relevant data

In addition, you receive a BCC copy of the customer email. The email templates can be customized in the admin panel.

**Note in the order**

Every withdrawal is automatically added as a comment in the order history. This way, it is immediately apparent in the order view that a withdrawal exists.

**Configurable**

In the admin under *Stores &gt; Configuration &gt; Sales &gt; Withdrawal Settings*:

- Enable/Disable the module
- Set recipient address for notifications
- Set withdrawal period in days, counted from the last shipment date (Default: 14)
- Select email sender and templates

---

Hyvä Theme Compatibility
------------------------

[](#hyvä-theme-compatibility)

If you are using the Hyvä Theme, please install the Hyvä compatibility module:

This module adds the required Hyvä frontend integration for the withdrawal button and ensures compatibility with the Hyvä template system.

The base module remains required.

### REST API

[](#rest-api)

Withdrawal entries can also be retrieved programmatically:

```
GET /rest/V1/zwernemann/withdrawals`

```

Access is protected by ACL permission (`Zwernemann_Withdrawal::withdrawals`).

### Multilingualism

[](#multilingualism)

Completely translated into all 24 languages of the EU (97 strings). Further languages can be added via custom CSV files.

---

System Requirements
-------------------

[](#system-requirements)

ComponentVersionMagento 2 Open Source2.4.6 to 2.4.8-p4PHP7.4 or higher---

Installation
------------

[](#installation)

### Via ZIP file

[](#via-zip-file)

1. Extract the ZIP file and copy the entire contents to:

    ```
    app/code/Zwernemann/Withdrawal/

    ```
2. Ensure the structure looks like this:

```
app/code/Zwernemann/Withdrawal/
    Api/
    Block/
    Controller/
    Helper/
    Model/
    Ui/
    etc/
    i18n/
    view/
    composer.json
    registration.php

```

3. Run the following commands in the Magento root:

    ```
    php bin/magento setup:upgrade
    php bin/magento setup:di:compile
    php bin/magento setup:static-content:deploy de_DE en_US
    php bin/magento cache:flush

    ```
4. Check if the module is active:

    ```
    php bin/magento module:status zwernemann_Withdrawal

    ```

### Via Composer

[](#via-composer)

```
composer requirezwernemann/module-withdrawal
php bin/magento setup:upgrade
php bin/magento setup:di:compile
php bin/magento setup:static-content:deploy de_DE en_US
php bin/magento cache:flush

```

---

Setup
-----

[](#setup)

1. Log into Magento Admin
2. Navigate to **Stores &gt; Configuration &gt; Sales &gt; Withdrawal Settings**
3. Set **"Enable Module** to *Yes*
4. Enter **Notification Email** ₓ withdrawal notifications will be sent here
5. Adjust **Withdrawal Period** if the legal period differs
6. Configure email sender and templates if necessary
7. Save and flush cache

### Linking the Guest Order Form

[](#linking-the-guest-order-form)

The search form for guest orders is located at:

```
https://www.your-shop.com/withdrawal/guest/search

```

Include this link, for example:

- In the footer of your shop
- In order confirmation emails
- On your withdrawal policy page

With Magento URL rewrites, you can adjust the address as desired, for example to `/withdrawal`.

---

Uninstallation
--------------

[](#uninstallation)

```
php bin/magento module:disable Zwernemann_Withdrawal
php bin/magento setup:upgrade
php bin/magento setup:di:compile
php bin/magento cache:flush
```

Then delete the directory `app/code/Zwernemann/Withdrawal/`.

The database table `zwernemann_withdrawal` remains and can be removed manually if needed.

---

Version History
---------------

[](#version-history)

### 1.5.0

[](#150)

- Newly added languages: Bulgarian, Danish, Estonian, Finnish, French, Greek, Irish, Italian, Croatian, Latvian, Lithuanian, Maltese, Dutch, Polish, Portuguese, Romanian, Swedish, Slovak, Slovenian, Spanish, Czech, Hungarian. The module now supports all 24 official languages of the European Union. All translations use the legally correct term for the statutory right of withdrawal in accordance with the EU Consumer Rights Directive (2011/83/EU).

### 1.4.0

[](#140)

- Deleted the version attribute from composer.json. Composer has great integration with version control systems like Git, Mercurial and Subversion and there is no need to manually track version numbers in a text file for Composer at all. The field only exists for special situations where a version control system is not in use.

### 1.3.0

[](#130)

- Admin can now confirm or reject individual withdrawal requests directly from the grid
- Context-sensitive action links per row (Confirm / Reject) — only shown when a status change makes sense
- Bulk actions to confirm or reject multiple withdrawal requests at once
- Added getById() and updateStatus() methods to WithdrawalRepositoryInterface and WithdrawalRepository

### 1.2.0

[](#120)

- Withdrawal period now starts from the date of the last shipment instead of the order date (legally correct under EU Directive 2011/83/EU)
- If an order has not been shipped yet, withdrawal is always allowed
- Withdrawal deadline display updated accordingly

### 1.1.0

[](#110)

- Complete withdrawal workflow for logged-in customers and guest orders
- Withdrawal button in order overview and on order details page
- Detail page with order summary and period display
- Confirmation page after successful withdrawal
- Email notifications to customer and shop operator (incl. BCC)
- Admin grid with filtering, sorting, paging, and direct link to order
- Configuration area for module, deadlines, and email settings
- ACL-based permissions and secured REST API
- CSRF protection and JavaScript confirmation dialog
- Full DE/EN translations

### 1.0.3

[](#103)

- Enabled withdrawal for guest orders
- Success page after submitting withdrawal

### 1.0.2

[](#102)

- Column "Order placed on" in admin grid
- Action "View Order" in admin grid
- Automatic comment in order history

### 1.0.1

[](#101)

- Shop email as BCC in confirmation email
- Order details above the withdrawal form

### 1.0.0

[](#100)

- Initial release
- Tested with Magento 2.4.6 to 2.4.8-p1

---

Planned
-------

[](#planned)

- Extend REST API to include write access
- Individual withdrawal periods per product (via product attributes)

---

Contact &amp; Support
---------------------

[](#contact--support)

**Zwernemann Medienentwicklung**
Martin Zwernemann
79730 Murg, Germany

[To the website](https://www.zwernemann.de/widerrufsbutton-fuer-magento-2/)

If you have questions, problems, or ideas for new features – feel free to get in touch.

---

License
-------

[](#license)

OSL-3.0

###  Health Score

41

—

FairBetter than 87% of packages

Maintenance86

Actively maintained with recent releases

Popularity20

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity40

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 90.1% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~24 days

Total

5

Last Release

66d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/f30c3b4c4281c9e771bd267d0086c4f56b2fde98ae2cf624dc2daeab1738ff15?d=identicon)[mwltr](/maintainers/mwltr)

![](https://www.gravatar.com/avatar/fec450a50f69d1fb285a02b31606c762374dd44040b4ab98ff9cd7aa434c076a?d=identicon)[riconeitzel](/maintainers/riconeitzel)

---

Top Contributors

[![Zwernemann](https://avatars.githubusercontent.com/u/52236002?v=4)](https://github.com/Zwernemann "Zwernemann (64 commits)")[![Valant13](https://avatars.githubusercontent.com/u/27895167?v=4)](https://github.com/Valant13 "Valant13 (7 commits)")

### Embed Badge

![Health badge](/badges/run-as-root-module-withdrawal/health.svg)

```
[![Health](https://phpackages.com/badges/run-as-root-module-withdrawal/health.svg)](https://phpackages.com/packages/run-as-root-module-withdrawal)
```

###  Alternatives

[mollie/magento2

Mollie Payment Module for Magento 2

1131.9M16](/packages/mollie-magento2)[loki/magento2-components

Core module for defining Alpine.js components with advanced AJAX features

1011.8k26](/packages/loki-magento2-components)[zwernemann/module-withdrawal

Magento 2 EU Withdrawal Button Module - Adds a withdrawal/revocation button for orders in compliance with EU Directive (EU) 2023/2673

256.0k2](/packages/zwernemann-module-withdrawal)[buckaroo/magento2

Buckaroo Magento 2 extension

32420.3k8](/packages/buckaroo-magento2)[run-as-root/magento2-prometheus-exporter

Magento2 Prometheus Exporter

68357.9k](/packages/run-as-root-magento2-prometheus-exporter)[dotdigital/dotdigital-magento2-extension

Dotdigital for Magento 2

50398.5k20](/packages/dotdigital-dotdigital-magento2-extension)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
