Releases: wcpos/mollie-terminal-for-woocommerce
Release list
Release v0.4.0
Mollie Terminal for WooCommerce 0.4.0
This release works through a round of beta-tester feedback: it fixes the two ways a cashier could get stuck with a lingering "open" payment, simplifies the checkout payment panel, and adds a few settings — including reusing the official Mollie plugin's API key and an initial Dutch translation.
Fixed — stuck payments & recovery
- No more dead ends when a terminal is off or unresponsive. When Mollie refuses to cancel an open payment (typically because the terminal never responded), the attempt is now abandoned locally: the panel returns to idle so the cashier can start a fresh payment — on the same or a different terminal — or pick another method, all without creating a new order. Previously the panel kept polling and the next Start reused the stuck payment, forcing a brand-new order.
- Refreshing mid-payment keeps control. If the checkout page is reloaded while a payment is open, the panel now resumes polling that payment instead of showing an idle panel while the payment lingers open at Mollie.
- Server-side stale-payment sweep. A WP-Cron job (every 10 minutes) cancels payments left open past a threshold on orders that are still unpaid — the backstop the tester asked for, covering the case where the browser is closed or the network drops before the panel's own auto-cancel or close-beacon can fire. The threshold defaults to 10 minutes and is filterable via
mtfwc_stale_payment_seconds.
Changed — simpler payment panel
- One button instead of three. The standalone Check Status button is gone: the panel shows a static "idle" status when it is ready and polls automatically once a payment is started. Start Terminal Payment now toggles to Cancel Terminal Payment while a payment is in flight.
- Switching payment method stops the terminal payment. If the customer changes their mind and the cashier selects e.g. cash, the poll loop stops and the open Mollie payment is canceled instead of continuing to poll.
- Friendlier premature-submit message. Submitting the order before the terminal confirms now shows a plain informational notice explaining what to do, rather than a red error.
Added — settings & i18n
- Checkout debug logs setting (off by default) hides the on-panel log tools (Show logs / Copy / Clear). Payment activity is still always recorded in WooCommerce → Status → Logs.
- API key source setting: optionally reuse the API key already configured in Mollie Payments for WooCommerce (matched to the selected mode) so keys live in one place. It falls back to this plugin's own key if the Mollie plugin has none set — switching the source never bricks checkout.
- The Enabled terminals setting now spells out that the default terminal is always available at checkout, even if it is not ticked.
- Translations. The plugin now loads translations from
/languages, ships a.pottemplate, and includes an initial Dutch (nl_NL) translation. Corrections to the Dutch wording are welcome.
Notes for testers
- The API key source convenience is not a security change: both this plugin and the Mollie plugin store their keys in
wp_options, which is standard WordPress practice. It just gives you a single place to manage the key. - QR-code terminal payments remain out of scope: Mollie has not yet exposed QR-initiated payments through their Payments API.
- The tab-order issue in the POS "Edit customer address" form belongs to the WooCommerce POS client, not this plugin, and is tracked separately.
Upgrade
No configuration changes are required. New installs and upgrades schedule the stale-payment sweep automatically; deactivating the plugin unschedules it. Existing settings are unchanged, and the new API key source defaults to using this plugin's own key.
Release v0.3.1
Mollie Terminal for WooCommerce 0.3.1
This maintenance release moves all plugin logging into the WooCommerce status logs and stops storing diagnostics in the WordPress options table — bringing it in line with how the other WooCommerce POS terminal gateways (Stripe, SumUp, PayArc, Square) already log.
Changed
- Diagnostics now go to the WooCommerce status logs. Find them under WooCommerce → Status → Logs, source
mollie-terminal-for-woocommerce. Payment activity, webhook events, and API errors are logged there with sensitive values (API keys, bearer tokens) redacted. - Logging now uses the same
Loggerpattern as the sibling terminal plugins, so the whole family behaves consistently. - The gateway settings Diagnostics panel now links to the status logs instead of showing a copy of recent events, the last API error, and the last webhook event.
Removed
- The plugin no longer writes diagnostics to the
wp_optionstable. This resolves the option-bloat and concurrency concerns raised in issue #5 — high-frequency terminal payments previously appended events to an option array with no atomic-append guarantee. - The now-empty
mtfwc_recent_diagnostic_events,mtfwc_last_api_error, andmtfwc_last_webhook_eventoptions are deleted automatically the next time you open the gateway settings screen.
Notes
- No configuration changes are required. The payment flow is unchanged; this release only changes where diagnostics are stored.
- If you use log-management tooling, filter WooCommerce logs by the
mollie-terminal-for-woocommercesource.
Release v0.3.0
Mollie Terminal for WooCommerce 0.3.0
This release fixes a checkout dead-end after a successful terminal payment, adds tools to curate which terminals cashiers can use, cancels abandoned payments so nothing lingers open on Mollie's side, and hardens and polishes the checkout UI. It also adds automated tests on every pull request so future changes are less likely to regress.
Fixed
- Successful payments now finish the order instead of showing "this order has already been paid." The payment is confirmed in the background and the checkout is sent straight to the thank-you page (the WooCommerce POS order-received screen). Previously the checkout re-submitted an already-paid order, which WooCommerce rejected — leaving the error message and a "Process payment" button that looped without advancing.
- The checkout terminal dropdown no longer stays stuck disabled if the terminal list is momentarily empty and then loads successfully.
Added
- Inactive terminals are hidden. Terminals that Mollie has deactivated (and cannot reactivate) no longer appear in the checkout dropdown or the settings "Default terminal" list.
- Enabled terminals. A new setting lets you choose exactly which terminals cashiers may select at checkout. Leave it empty to allow all active terminals. The restriction is enforced on the server, and your default terminal is always allowed.
- Lock terminal selection. A new setting makes cashiers always use the default terminal — the checkout dropdown is locked. Useful when only certain staff should choose a terminal. Enforced on the server as well as in the browser.
- Automatic cancellation of abandoned payments, so a payment never stays "open" on Mollie:
- when the checkout waits too long for the terminal (about five minutes) and times out;
- when the order is completed with a different payment method (for example, the customer decides to pay cash) or the order is cancelled;
- as a best-effort attempt when the checkout window is closed mid-payment.
If the payment has already reached the terminal, Mollie reports it as not cancelable and it is cancelled on the device itself — these cleanups are safe in that case.
- Refreshed checkout panel. The status message is now a clear banner with a spinner while waiting for the terminal, the primary "Start Terminal Payment" button stands out from the secondary actions, and the terminal selector locks while a payment is in progress.
- Hardened styling. The panel's CSS is isolated so aggressive store themes can no longer distort the buttons, dropdown, or status banner.
- Continuous testing. Every pull request now runs the plugin's lint and regression suites on PHP 7.4 and 8.3.
Notes
- Mollie terminals exist only on live accounts. A test API key cannot drive a physical (or iOS/Android) terminal; the settings screen shows a warning in test mode. This is a Mollie platform limitation.
- You do not need to configure a webhook in your Mollie dashboard — the plugin sends the webhook URL with every payment.
- Upgrading from 0.2.0 requires no action. Any previously saved Mollie Profile ID is ignored (the field was removed in 0.2.0); terminals are listed across the whole account.
- We recommend a quick live check after upgrading: run one terminal payment end to end and confirm it lands on the thank-you screen.
Release v0.2.0
Release v0.1.2
Mollie Terminal for WooCommerce 0.1.2
This patch release adds visible diagnostics for Mollie Terminal support so merchants can copy useful payment activity when a terminal payment fails.
Added
- Checkout and order-pay log panel for Mollie Terminal payment activity.
- Browser-side logs for start payment, check status, cancel payment, network errors, and AJAX responses.
- Show, copy, and clear controls for support-friendly log sharing.
- Redacted recent diagnostic events for server-side AJAX, Mollie API, payment lifecycle, and webhook activity.
Fixed
- The WooCommerce settings diagnostics now persist and display the last Mollie API error instead of leaving the field empty.
Notes
- Diagnostic events redact API keys, bearer tokens, passwords, and other sensitive context keys before storage.
- The payment flow itself is unchanged; this release focuses on support visibility and faster root-cause diagnosis.
Release v0.1.1
Mollie Terminal for WooCommerce 0.1.1
This patch release aligns Mollie Terminal payment creation with Mollie's documented API-key flow for point-of-sale payments, including Tap to Pay on iPhone terminals.
Fixed
- Adds the WooCommerce order received URL as Mollie's
redirectUrlwhen creating terminal payments. - Stops sending
profileIdinPOST /v2/paymentsrequests when using a Mollie API key; Mollie derives the profile from the API key. - Keeps
method=pointofsaleand the selectedterminalIdin the create-payment payload.
Verification
- Added regression coverage for the Mollie create-payment payload.
- Confirmed the payload includes
method=pointofsale,terminalId, andredirectUrl. - Confirmed the payload does not include
profileIdfor API-key payment creation.