Skip to main content

WooCommerce

To accept payments through MONEI in your WooCommerce store you simply need to install and configure MONEI WooCommerce Plugin.

Live demo

Requirements

ComponentMinimumTested up to
WordPress5.07.0
WooCommerce3.011.0
PHP8.08.3
PHP 8.0 required since plugin v7.0.1

Plugin versions 7.0.1 and newer require PHP 8.0+. If you are still on PHP 7.4, upgrade PHP before updating the plugin — WordPress itself no longer supports PHP 7.4 either.

The plugin is compatible with:

  • WooCommerce Blocks (Cart + Checkout) — see the migration section below
  • High-Performance Order Storage (HPOS)
  • WooCommerce Subscriptions and YITH WooCommerce Subscription for recurring billing with saved cards

Before you begin

To test your integration:

Install

Install MONEI WooCommerce

The recommended path is wp-admin → Plugins → Add new → search for MONEIInstallActivate. WordPress will automatically update the plugin going forward.

For a pre-release or a specific tag, download the ZIP from the GitHub releases page and upload it via Plugins → Add new → Upload Plugin.

Configure

Go to WooCommerce → Settings → MONEI Settings

Enter your Account ID and API Key. You can find your Account ID and API Key in MONEI Dashboard → Settings → API Access. Test and live credentials have separate fields — the Mode toggle decides which pair is active.

Configure MONEI WooCommerce

The rest of the page sets how every MONEI method behaves:

SettingWhat it does
API Key ModeWhich pair of credentials is active, Test or Live.
What to do after payment?The status a paid order gets: Processing (recommended) or Complete. Use Complete only if nothing has to be packed or shipped.
Payment ActionSale charges immediately. Authorization holds the money until you capture it — see Payment action.
Log LevelHow much the plugin writes to WooCommerce → Status → Logs — see Troubleshoot.

MONEI settings in WooCommerce

Go to WooCommerce → Settings → Payments

Configure payment methods that you want to accept in your store. Each MONEI method has its own settings panel where you can switch between component (inline form) and redirect (Hosted Payment Page) mode, customize the title and description, and theme the embedded form via JSON.

Configure Card Payments

Card field layout

Under MONEI Cards, Card Field Layout decides how the card form looks.

Separate fields (default) — card number, expiry and CVC each get their own field. Focus moves from number to expiry to CVC as the customer types.

Separate card fields

Single line — all three share one field, which suits a compact checkout.

Single line card field

Card Input Style themes both layouts from the same JSON, so switching layout keeps your styling. If you set a height in base, use the field's inner height — 48px for the default 50px field with its 1px border. The frame renders at exactly the height you give it, so a larger value is clipped at the bottom and a smaller one sits at the top, and either way the text leaves the middle.

Separate fields became the default in v7.3.0

Up to v7.2.4 the default was a single line. If you never chose a layout, your checkout moves to separate fields when you update — pick Single line under MONEI Cards to keep the old form. A layout you already selected is kept.

Whichever you pick, card details go straight to MONEI and your PCI DSS scope stays at SAQ A.

Saved cards

Under MONEI Cards, turn on Saved cards to let a customer reuse a card. At checkout they see Save payment information to my account for future purchases, and any card they saved appears the next time they pay.

Card details are stored on MONEI servers, never in your WordPress database. Saved cards are also what makes recurring billing work — see Subscriptions.

Supported payment methods

  • Card (Visa, Mastercard, and more) — with for saved cards
  • Apple Pay
  • Google Pay
  • Bizum (Spain — automatically hidden for non-Spanish customers)
  • PayPal
  • Multibanco (Portugal — hidden for non-Portuguese customers, redirect only)
  • MB Way (Portugal — hidden for non-Portuguese customers, redirect only)

Express checkout

Express checkout puts an Apple Pay, Google Pay or PayPal button on your storefront. The customer pays from the wallet sheet, and the shipping and billing address comes from the wallet, so nobody fills in the checkout form. It works on both the classic checkout and the Cart and Checkout blocks.

Express checkout buttons on a product page

Requires plugin v7.1.0

Express checkout is available from plugin version 7.1.0.

To turn it on, go to WooCommerce → Settings → Payments, open MONEI Apple Pay / Google Pay or MONEI PayPal, and set:

SettingWhat it does
Express CheckoutTurns the button on. Off by default.
Express Checkout Button LocationsWhere the button appears: Product page, Cart page, Checkout page. All three by default.
Express Checkout Button StyleThemes the button in JSON.

Express checkout settings

Each method is independent — you can offer a wallet button on the product page only, and PayPal nowhere, if that is what suits your store.

The same conditions as the regular payment method apply. Apple Pay needs your domain registered, and the Apple Pay or Google Pay button only appears for a customer whose device and browser can pay with that wallet.

PayPal needs a full address on the Cart and Checkout blocks

PayPal returns the shopper's name, email and country, and a street address only when the account has one saved. The Cart and Checkout blocks place the order through the WooCommerce Store API, which requires a complete billing address and refuses an incomplete one. The product page builds the order itself and accepts what PayPal sends. If a shopper is turned away, the store now says which fields are missing instead of failing silently.

For the equivalent in a custom integration, see Express checkout.

Subscriptions

The plugin bills subscriptions with either WooCommerce Subscriptions or YITH WooCommerce Subscription. Install one of them, and MONEI Cards and MONEI Apple Pay / Google Pay accept subscription products — the other MONEI methods do not.

Turn on Saved cards first. A renewal charges the token saved with the first payment, so without it there is nothing to charge on renewal day.

A customer changes the card behind a subscription from My account → Subscriptions → Change payment.

For subscriptions created through the API instead, see Subscriptions.

Payment action

WooCommerce → Settings → MONEI Settings → Payment Action decides when the money moves.

Sale (Immediate charge) — the default. The customer is charged as they pay.

Authorization (Pre-authorization) — the money is held on the customer's card and the order lands On hold. You capture it by moving the order to Processing or Completed, or release it by moving the order to Cancelled or Refunded. Both happen automatically as you change the status; there is no separate capture button.

A card authorization expires after 7 days

Capture within 7 days of a card payment. After that the authorization is marked expired and can no longer be captured — you have to ask the customer to pay again. The window is set by the payment method, so it is not the same everywhere; see Payments for the one that applies.

Pre-authorization applies to Card, Apple Pay, Google Pay and PayPal. MB Way and Multibanco charge immediately whatever this setting says.

Apple Pay and Google Pay need plugin v7.2.4

Before 7.2.4 those two charged immediately even with Authorization selected. Update the plugin if you rely on it.

Refunds

Refund from the order itself: WooCommerce → Orders, open the order and choose Refund. Enter the full amount or part of it, then use the refund button that names the MONEI payment method — not Refund manually, which only adjusts the order in WooCommerce and moves no money. The refund reaches MONEI straight away and the order gets a note with the result.

A refund that MONEI rejects also leaves a note on the order saying why.

Migration to WooCommerce Blocks

Starting from version 6.0, the plugin supports WooCommerce Blocks. To enable the modern checkout experience, replace the legacy shortcodes with the Cart and Checkout blocks.

Go to Pages and find the Checkout page. Remove the old shortcode and add the Checkout block to the page.

Configure Checkout Page

Go to Pages and find the Cart page. Remove the old shortcode and add the Cart block to the page.

Configure Cart Page

Troubleshoot

Set WooCommerce → Settings → MONEI Settings → Log Level to INFO while you reproduce the problem, then read the log at WooCommerce → Status → Logs and pick the MONEI file.

Put the level back to ERROR afterwards. INFO writes a line for every payment step and costs performance on a busy store.

A payment method does not appear at checkout

  • The method has to be active in MONEI Dashboard → Settings → Payment methods as well as enabled in WooCommerce.
  • Bizum, MB Way and Multibanco hide themselves for a customer outside the country they serve.
  • Apple Pay and Google Pay only appear on a device and browser that can pay with them. Apple Pay also needs your domain registered.
  • The plugin caches which methods your account offers for 30 seconds, so a change in the dashboard takes a moment and a reload to show up.

An order stays Pending after the customer paid

MONEI confirms a payment over the IPN callback. If your store never receives it, the payment succeeds in the dashboard while the order stays Pending.

Check that https://<your-store>/wc-api/monei_ipn/ is reachable from outside — no IP allowlist, no bot protection in front of it, and permalinks saved at least once.

Before you go live

  • Make sure that you are using live (production) mode API Key.
  • Make sure that you have at least one active payment method.
  • Verify the IPN URL https://<your-store>/wc-api/monei_ipn/ is reachable from MONEI (no IP allowlist, no Cloudflare bot block, permalinks saved).
  • For Apple Pay, register your domain in MONEI Dashboard → Settings → Payment methods.
  • If you use Blocks checkout, confirm the Cart and Checkout pages use blocks (not shortcodes).