The COD fee isn't a shipping trick, it's a proper invoice line
Cash on delivery has a cost: the courier charges for handling the cash, and most shops pass it on to the customer. The question is how. Hide it in the shipping cost and it doesn't show separately on the invoice, card-paying customers pay it too, and coupons and free-shipping thresholds start behaving oddly.
The WSC Cash on Delivery with Handling Fee module treats the fee as a separate item: the customer sees it at checkout, your accountant sees it on the invoice with its own VAT rate, and Számlázz.hu, your ERP and the shipping label receive it just like any other product.
Why it's worth it
🧾 The fee is a real line item everywhere
The handling fee is added to the cart as a hidden service product. That's why it appears as a separate line in the order, the confirmation e-mail, the PrestaShop invoice and every connected system, with the VAT rate you set. The WSC Számlázz.hu module sends it as a separate invoice line, and the WSC GLS module passes the COD amount to the label including the fee.
👀 Customers see exactly what they pay
Among the payment methods it shows as "Cash on delivery (+590 HUF handling fee)". When selected, a separate line appears in the cart summary below shipping, and the total updates without a page reload. Choose another payment method and the line disappears. The thank-you page shows the amount payable on delivery, fee included.
💳 No fee for card payments
The fee is only added for cash on delivery. If the customer switches to card, the module removes it, and the server checks this too, not just the browser. A handling fee never ends up in a card payment.
⚙️ The fee you want
The fee can be fixed, a percentage or both, with a minimum and a maximum. You can set a free-fee threshold, e.g. free COD above a certain cart value, and rounding to 1, 5 or 10 HUF.
🎯 Rules by carrier, country and customer group
If the fee isn't the same everywhere, write rules by carrier, country, zone, customer group, currency, cart value and weight range. The first matching rule wins; if none matches, the default fee applies. The Calculator tab lets you check what a given cart would pay, without placing an order.
🚫 Offer COD only where you want
It's available everywhere by default; you only set the exceptions: cart value range, carriers, countries, zones, customer groups, excluded categories, manufacturers or products, downloadable products. Where it's not available, you can hide it or show it greyed out with your own explanation per language.
🏷️ Coupons and free shipping work correctly
- The fee never makes shipping free, even if the cart wouldn't reach the threshold without it.
- The fee doesn't count toward coupon minimum amounts.
- The "cheapest product free" coupon gives the real cheapest product, not the fee.
🛡️ It keeps itself in order
The fee product can be hidden from the back-office product list, its deletion is logged, and if it disappears anyway, the module finds it by reference or creates a new one. Fee data of abandoned carts is cleaned up daily. If PrestaShop's own COD module is also enabled, the module warns you and disables it with one click.
📊 Clear back office
Four tabs: Overview with a 30-day summary and what currently restricts COD, Fee rules, Availability and labels, and Calculator and log.
Good to know: overrides
PrestaShop 1.7.8 and 8 have no hook that allows correct handling of coupons and free shipping. That's why the module overrides a few methods of the Cart and CartRule classes. If another module overrides the same methods, a red warning appears in the back office – we're happy to help in that case.
When you don't need it
If you don't charge a handling fee for COD, or don't offer COD at all, PrestaShop's own COD module is enough. This module really pays off when the fee has to appear as a separate, VAT-bearing line on the invoice and coupons and shipping discounts must stay correct.
Installation in three steps
- Upload the module, then create the fee product with one click on the module page, or pick an existing product (e.g. one synced from your ERP) by name or reference.
- Set the default fee (590 HUF by default) and, if needed, rules by carrier or cart value.
- If your shipping module (e.g. GLS) lists COD payment methods separately, tick this module there.
Technical details
- PrestaShop 1.7.8 – 9.x (tested on 1.7.8.11, 8.2.0 and 9.0.0)
- PHP 7.1 – 8.3
- Overrides: a few methods of Cart and CartRule
- Hungarian and English back office, labels per language
- Tested with the Classic and Warehouse themes; not with one-page checkout (OPC) modules
- Single shop: multistore is not supported
- Works with: WSC Számlázz.hu, WSC GLS, Tandofer ERP
- Updates via the Webstart Updater module; licence for one shop, with 1 year of updates and support
- For licence checks, the module reports to the Webstart licence server every few hours (licence key, domain, versions). No customer or order data is sent.
The customer sees it, the invoice shows it, the accountant understands it: the COD fee is finally where it belongs.