How to Apply WooCommerce Coupons at Paddle Checkout
A customer applies a coupon, WooCommerce shows the discount in the cart, and then one of two things happens at the Paddle checkout. Either Paddle charges the full price and the order is marked paid for more than it says, or the Paddle payment option is not offered at all while the coupon is in the cart. Both come from the same cause, and since PimiPay 1.7.0 both have the same fix.
Why a Paddle checkout ignores WooCommerce coupons
A Paddle checkout sells catalog prices. Each product in your store is synced to Paddle as a Paddle product with a Paddle price, and the checkout opens with those price IDs. Paddle then charges what its catalog says for those items. Nothing in that hand-off carries the WooCommerce cart: not the coupon, not a fee, not a per-customer price a pricing plugin worked out. So a plugin that opens the checkout with price IDs cannot apply a WooCommerce coupon, however the order looks in your admin.
Until 1.6.3 that meant an overcharge. Since 1.6.3 PimiPay hides the Paddle option while the cart carries a coupon discount or a negative fee, so the customer is never billed more than the order total. Safe, but it also means a customer with a coupon cannot pay through Paddle.
The fix: Order total pricing
Version 1.7.0 adds a Pricing setting to the gateway with two modes.
Catalog price is the default and behaves as before. The checkout opens with each product’s synced Paddle price, and a discounted cart hides the gateway.
Order total is new. Instead of opening the checkout with price IDs, the plugin creates the Paddle transaction on the server from the WooCommerce order’s own lines: products, fees and shipping, each with a fixed amount that is already net of the coupon. WooCommerce does the discount math; Paddle charges the result. A $60 product with a 20% coupon opens a Paddle checkout that reads “Due today $48.00”, and the order is marked paid for $48.00.
Because the amounts come from the order rather than the catalog, everything WooCommerce can put on an order reaches Paddle exactly as recorded: coupons, positive fees, shipping, sale prices, dynamic and per-customer prices. Products still need to be synced to Paddle, because every line references its Paddle product, but the synced price is no longer what is charged. You can stop keeping catalog prices in step with promotions.
How to turn it on
Go to WooCommerce, Settings, Payments, and open the Paddle gateway. Under Pricing, choose Order total and save. There is nothing else to configure, and switching back is the same dropdown. Order total is opt-in in 1.7.0; a later release plans to make it the default.
Tax follows your Paddle account’s own setting in both modes. A tax-exclusive account adds tax on top of the amount sent; a tax-inclusive account carves it out. Either way the line amounts go to Paddle excluding WooCommerce tax, so compare the two totals on a test order if your store prices include tax.
What still does not apply
Negative fees. Some discount plugins apply a reduction as a fee with a negative amount rather than as a coupon. Paddle cannot bill a reduction line, so a cart carrying a negative fee hides the gateway in both modes. If you can express the same discount as a WooCommerce coupon, Order total will charge it correctly.
Order notes cover the rare edge cases. If a customer pays an earlier draft transaction rather than the current one, or Paddle’s billed total differs from the order total, the plugin writes a note on the order so you can see it without opening the Paddle dashboard.
The full setting reference is on the configuration docs page, how the checkout opens is on the checkout docs page, and the release notes are in the changelog. Related questions, including how Paddle’s own discount-code field differs from WooCommerce coupons, are in the FAQ.