DocumentationGetting startedLimitations
Limitations
Here is everything this plugin cannot do, and everything someone else's rules stop it doing. Each entry says who runs into it and whether there is a way around it.
Payment providers
A gateway that combines several payment methods charges one fee
A fee belongs to a WooCommerce payment method. Some providers register one method and let the shopper pick card, Klarna or a wallet inside the provider’s own element. Stripe’s “Universal Payment Methods” is the one most stores meet. WooCommerce only ever sees the outer method, so that is the one fee it charges. What the shopper picks inside the element changes nothing.
The symptom is a fee that never appears: a rule set on “Credit Cards (Stripe)” cannot fire while the store checks out through “Universal Payment Methods”, because those are two different methods and only the second one is in play.
Most providers register the individual methods as well as the combined one. Switch the individual gateways on instead, and each gets its own fee — a card rule that charges, a bank-transfer rule that discounts.
PayPal's own terms do not allow surcharging
Nothing stops you setting a fee on PayPal, and it will charge like any other method. PayPal’s user agreement is what prohibits surcharging, in most of the markets it operates in — so the risk is not that the fee fails, it is that charging one breaks your contract with PayPal.
Check your own PayPal agreement before switching a fee on for it. A discount on a cheaper method is the approach their terms do allow.
Mercadopago drops the fee line
The Mercadopago gateway has known issues with WooCommerce’s own fee API, and a fee added to those orders may not survive to the total. This is in their integration, not in this plugin, and there is nothing this side can do about it.
A gateway that still shows no fee is usually fixable
Gateways register their payment methods however they like, and some do it in ways nothing can predict. Most of those need a small piece of code on this side.
Write to support@payforpayment.com with the gateway’s name and a link to download it, and I will test it here. It either gets fixed, or it gets added to this page.
Manual orders
Pay-for-order links do not recalculate the order
WooCommerce never runs cart fees outside a checkout, so an order raised in the admin or paid through a pay-for-order link carries no fee at all. That is core issue 17794 (opens in a new tab), not something a plugin can fix from the outside.
Pro writes the fee onto those orders itself, and the fee watchdog flags any order that used a fee-configured gateway and still came through without one. On the free version the fee is simply absent.
Checkout and the cart
The cart page shows a fee before the shopper has picked a method
The cart does not know how someone will pay, so WooCommerce previews the fee for the method it would default to. It recalculates the moment a method is picked at checkout, so the amount charged is always right — but a shopper on the cart page can see a number that then changes.
Order your payment methods so a fee-free one comes first, which works in the free version. Pro can hide the fee on the cart page altogether, and show each method’s fee beside its own name at checkout instead.
The Checkout block in a template part stops updating the total
On the block checkout the total updates live when the shopper changes payment method. That only fires when the Checkout block sits in the page’s own content. Move it into a template part and the shopper’s choice never reaches the server before they submit, so the totals show whichever method the session last held. Pro corrects the fee to the method actually paid with, just before the charge. On the free version the mismatched line is removed instead, so the order can end up with no fee at all.
Keeping the block in the checkout page itself is the WooCommerce default; this only comes up on themes that have moved it.
Express and wallets
Klarna's one-step express checkout cannot carry a fee
Klarna Express Checkout in its one-step flow computes the amount with a formula that excludes fee lines. The plugin cannot add a fee that flow will honour, so it does not try.
A wallet sheet on the order-pay page opens on the pre-correction total
When an express button is used on an order-pay page, the wallet sheet is drawn before the order’s gateway is known, so the total it shows can be missing the fee. The amount actually authorised is corrected first — nobody is undercharged or overcharged — but for that moment the sheet and the order disagree.
Baskets and shipping
One free-shipping package switches the fee off for the whole basket
“Don’t charge when free shipping is available” scans every shipping package. If an order ships in two packages and only one of them is free, the fee is called off for the order.
This matches how version 2 behaved, and single-package carts — the large majority — cannot tell the difference.
Conditions read the first shipping package only
A rule conditioned on the shipping method looks at the first package. In a split shipment, the second package’s method is not what the condition is testing.
Whether you may charge at all
Your market may not allow the surcharge
The plugin will happily charge a fee that your market or your contract does not allow. Card surcharging is capped or banned outright in parts of the EU, in the UK for consumer cards, in several US states and in Australia, and individual payment providers prohibit it in their own terms whatever the local law says.
Checking what applies where you sell is on you, not on the plugin — the same point the terms make, and the surcharge rules page is the longer version.
Why this page exists
A feature list never tells you where a plugin stops. If one of these is in your way, say so. Support reaches me directly, and the tracker is where the ones worth building end up.
The other side of this is the free version (opens in a new tab): it costs nothing, so the cheapest way to find out whether any of this matters on your store is to install it and look.
Hit something that is not on this page? That is a bug rather than a limit — tell me and it gets fixed, or it gets added here.
Get in touch