Changelog

Release notes

Every notable change to the PimiPay Paddle for WooCommerce plugin, newest first.

v1.3.1

2026-08-06
  • New checkout theme and language settings — match the Paddle checkout to your site instead of always using Paddle’s defaults.
  • New Site Health checks that surface Paddle problems which otherwise fail silently: missing credentials, a webhook that has stopped verifying, and a scheduled sync that is not running. The warnings clear themselves once the problem is fixed.
  • The webhook signing secret returned by Paddle is now saved and filled in for you when you register the webhook, and cleared when the webhook is forgotten.
  • A Paddle Product ID that another WooCommerce product already owns is now rejected, and sync stops rather than overwriting the other product’s link.
  • Prices now sync even when the product-level update is rejected, so one bad field no longer blocks the whole price update.
  • Fixed: auto-sync could still run after the setting was switched off.
  • Fixed: the webhook health check judged “recent” by the last webhook received rather than the last one that actually succeeded, so a stream of failing deliveries looked healthy.
  • Fixed: stores without the mbstring PHP extension now fall back to WordPress’s own shims instead of erroring.
  • Licensing: an install now binds to its own license, and your license key is no longer deleted when a check is rejected.

v1.3.0

2026-07-29
  • Choose the Paddle tax category for each product, with a store-wide default. Everything was previously sent as “Standard”, which means pre-written software downloaded and installed locally — so if you sell ebooks, hosting, training or services, Paddle was collecting tax at the wrong rate on your behalf. Note that only Standard and SaaS are enabled on a Paddle account by default; the others must be requested in the Paddle dashboard first.
  • New option to hide Paddle when the cart contains a physical product. Paddle is a merchant of record for digital goods and its terms do not cover physical items, but nothing fails visibly when one is sold — the exposure turns up later as a rejected payout or an account review. Off by default.
  • Failed syncs now explain themselves. The reason is recorded on the product and shown on its Paddle tab, at the top of the product editor, and — for scheduled syncs — on the products list and in WooCommerce → Status. Previously it was only written to the debug log.
  • Paddle’s specific validation errors are shown instead of a generic “Invalid request.”, so a rejected field is named along with the rule it broke.
  • Fixed: a product with a description longer than 2,048 characters could never sync. Paddle rejects anything longer rather than shortening it, so affected products failed on every run indefinitely with no usable explanation. Product names and descriptions are now trimmed to Paddle’s limits.
  • Fixed: a product with no price no longer creates an entry in your Paddle catalogue. Paddle cannot delete products, only archive them, so this used to leave something behind that had to be tidied up by hand.
  • Fixed: a variable product with one unpriced variation now names that variation, instead of reporting that the whole product has no price.

v1.2.0

2026-07-29
  • Sync many products at once — select any number of products on the Products screen and choose "Sync with Paddle" from Bulk actions. If a large selection runs out of time, the remaining products are reported so you know exactly what still needs syncing.
  • A Paddle section in WooCommerce → Status showing your environment, whether credentials and the webhook are set up, when the last webhook arrived and how it went, when auto-sync next runs, how many products are synced, and any refunds awaiting Paddle approval. It never includes your API key or webhook secret, so the report is safe to paste into a support email.
  • Failed payments now explain themselves. Paddle’s decline codes are translated into plain English in the order notes, and customers see a message that tells them whether it is worth trying the same card again.
  • A warning now appears if two products point at the same Paddle price — a state that makes both products charge the same amount and lets syncing one silently change the other’s price.
  • Fixed: duplicating a product copied its Paddle IDs to the copy, so the duplicate pointed at the original’s Paddle product and price. Syncing the copy then rewrote the original’s price, which stayed invisible for as long as the two products cost the same. Duplicates are now created unsynced, including every variation.
  • Fixed: VND was treated as a zero-decimal currency. Paddle does not support VND at all, and the correct zero-decimal currencies are CLP, JPY and KRW.
  • Tested up to WordPress 7.0.2.

v1.1.0

2026-07-28
  • Refunds from the WooCommerce admin — issue full or partial refunds the standard way and they sync to Paddle. Refunds made in the Paddle dashboard sync back to WooCommerce automatically.
  • Paddle reviews some refunds manually instead of approving them instantly. Those are recorded as awaiting approval, and the WooCommerce refund is created only once Paddle approves — so a refund record never claims money that has not actually moved.
  • Full support for the WooCommerce Cart & Checkout Blocks, alongside the classic checkout.
  • New Checkout Display setting: embed the Paddle checkout inline in the page instead of the overlay modal. The overlay remains the default.
  • A "Manage Billing" link in My Account takes customers straight into the Paddle customer portal for payment history, invoices, and card updates — no second login.
  • Paddle transaction details now appear on the order screen: transaction ID linked to your Paddle dashboard, payment method, totals including Paddle’s fee and your earnings, and a link to the invoice PDF.
  • New webhook health panel in the gateway settings — see whether webhooks are arriving and verifying, when the last one landed, recent delivery counts, and a list of recent deliveries from Paddle, with the option to replay one.
  • Fixed: orders in zero-decimal currencies (JPY, KRW, CLP, VND) were sent to Paddle multiplied by 100, overcharging customers 100x.
  • Fixed: product sync could report success when Paddle returned no product ID, leaving the gateway silently unavailable at checkout.
  • Fixed: switching on scheduled auto-sync did not actually schedule it.
  • API keys and webhook secrets are no longer shown in plain text on the settings screen.

v1.0.5

2026-07-27
  • Security: transaction validation now verifies the transaction is linked to the order and that its line items match the order’s synced Paddle prices, closing a payment-confirmation bypass.
  • Security: webhooks without a configured webhook secret are rejected instead of accepted unverified — make sure your webhook secret is set in the gateway settings after updating.
  • Paid or refunded orders can no longer be flipped to failed by canceled / past-due webhooks.
  • Scheduled auto-sync no longer silently stops after its first run.
  • Checkout completion failures now show the actual error, and Paddle API authorization problems persist as an admin notice until resolved.
  • Frontend assets are cache-busted with the real plugin version (was stuck at 1.0.0).
  • Bumped shazzad/plugin-updater to 1.2.0 for improved license validation and auto-update reliability.
  • Compatibility refreshed: WordPress 6.9, WooCommerce 10.9, PHP 8.3 required.

v1.0.4

2026-03-17
  • Auto-open Paddle checkout modal automatically on the order-received page — one less click for the customer.

v1.0.3

2026-03-17
  • Integrated shazzad/plugin-updater for license management and automatic plugin updates from the WordPress admin.
  • Cleaned up leftover console.log statements from checkout.js.
  • Removed legacy wprepo-upgrader.php in favor of the new updater library.

v1.0.2

2026-03-17
  • Added automatic price synchronization — detects WooCommerce price changes and syncs them to Paddle without manual intervention.
  • Added "last price sync time" display in the product admin.
  • New "Paddle" product data tab in the product editor with Paddle-specific fields.
  • Switched to environment-specific meta keys (_paddle_production_product_id / _paddle_staging_product_id) to prevent cross-environment contamination.
  • Switched to the WooCommerce product meta API instead of update_post_meta for full HPOS compatibility.
  • Automatic migration of legacy meta keys on first sync.

v1.0.1

2025-11-04
  • Added custom logo upload for the Paddle payment gateway.
  • Added cart item synchronization check — customers are prevented from checking out with products that have not been synced to Paddle yet.
  • Settings page refactor: grouped fields by environment and purpose for clarity.

v1.0.0

2025-11-03
  • Initial release.
  • WooCommerce payment gateway powered by Paddle Billing (sandbox + production).
  • One-click product and variation sync to Paddle.
  • Paddle overlay checkout integration with pre-filled customer data.
  • HMAC SHA256 webhook signature verification.
  • Cart recovery link handling (Paddle recovery emails redirect customers back to their pending order).
  • HPOS (High-Performance Order Storage) compatibility.
  • Comprehensive debug logging under WooCommerce → Status → Logs.