Vezmo App

Accept payments

WooCommerce plugin

VezmoPay for WooCommerce adds cards, US bank payments (ACH), Apple Pay and Google Pay to any WooCommerce store. No code is needed, and card data never reaches your server.

Downloadvezmopay-woocommerce.zip (latest release) · all releases and changelog
RequiresWordPress 6.0+, WooCommerce 8.0+, PHP 7.4+
CheckoutClassic (shortcode) checkout and Cart & Checkout Blocks
Order storageHPOS (High-Performance Order Storage) compatible
PCI scopeSAQ‑A: card fields are always hosted by VezmoPay
UpdatesDelivered in wp-admin like any other plugin. Each package is checked against the checksum published with its release.
LicenseGPL-2.0-or-later

Choose an integration mode

You pick the mode under Integration mode in the plugin settings, and you can switch at any time. In every mode the payment form is rendered by VezmoPay, so card numbers never touch your page.

ModeWhere the customer paysBuilt on
Inline payment element (default)On your checkout, inside a VezmoPay formSecure Payments + vezmo.js
Secure iframeOn your pay page, inside a VezmoPay iframeSecure Payments
Hosted checkoutRedirected to a VezmoPay payment-link pagePaylinks

Inline mode falls back to the iframe on its own if the SDK can't load. If a payment link can't take payments yet, for example because the account isn't activated to receive money, hosted mode keeps the customer on your checkout and shows an error.

Install and connect

  1. Install the plugin

    Download the zip, then in wp-admin go to Plugins → Add New → Upload Plugin, choose the file, and activate it.

  2. Connect your VezmoPay account

    Open WooCommerce → Settings → Payments → VezmoPay, set Environment to Test, and click Connect with VezmoPay. Sign in and approve. The plugin then creates and saves the API key, registers the webhook and your trusted origin, and stores the webhook secret, so you never copy a credential by hand. (The webhook is registered automatically only on an https:// store; on plain http, add it as described under manual setup.)

  3. Place a test order

    In Test mode the standard test cards work inside the VezmoPay form: 4242 4242 4242 4242 succeeds, 4000 0000 0000 3220 asks for 3D Secure, and 4000 0000 0000 0002 is declined.

  4. Go live

    Switch Environment to Live and connect again, or paste a live key. Then click Test connection. Live payments need an approved, charges-enabled VezmoPay account.

Manual setup (without Connect)

If you'd rather paste credentials yourself, open VezmoPay → Developers and do the following:

  • API keys: create a key with the permissions secure-payment.create, paylink.create, paylink.read, payment.read, account.read and account.update. Paste the key and secret into the plugin, then click Test connection. The secret is shown only once, and creating a new key deactivates your previous one.
  • Webhooks: add the endpoint https://your-store.example/wp-json/vezmopay/v1/webhook for payment.success and payment.failed, then paste its whsec_… secret into Webhook secret. See Webhooks.
  • Trusted origins (inline element mode): add your store's origin, e.g. https://your-store.example. Without it, customers are sent to the VezmoPay secure page to pay instead of seeing the form on your checkout.

To keep secrets out of the database, define them in wp-config.php. Constants override anything saved in the settings.

wp-config.php
define( 'VEZMOPAY_TEST_API_KEY',    'vzm_xxxxxxxxxxxxxxxx' );
define( 'VEZMOPAY_TEST_API_SECRET', '…' );
define( 'VEZMOPAY_LIVE_API_KEY',    'vzm_xxxxxxxxxxxxxxxx' );
define( 'VEZMOPAY_LIVE_API_SECRET', '…' );

How orders are completed

The plugin never takes the browser's or a webhook's word for a payment. Before it changes an order, it fetches the payment from the VezmoPay API.

VezmoPay paymentWooCommerce order
CAPTUREDProcessing / Completed, with the transaction ID stored
ACH submitted, still settlingOn hold until the ACH debit settles (see Bank payments)
FAILEDFailed, with the reason in an order note
REFUNDEDRefunded
Amount differs from the order totalOn hold. It is never completed automatically.

A missed confirmation can't strand an order. Signed webhooks, a reconciliation job that runs every five minutes, and a manual Order actions → Check VezmoPay payment status all settle orders independently. Payment creation uses an idempotency key, so refreshes and double clicks never charge twice.

Good to know

  • Refunds are issued from your VezmoPay dashboard. The order is marked refunded the next time the plugin verifies the payment.
  • Zero-decimal currencies (JPY, KRW, VND and others) are not supported yet. In those stores the gateway hides itself at checkout.
  • Not supported yet: saved cards, WooCommerce Subscriptions and Pre-Orders, and authorize-then-capture.
  • Debug logs: turn on Debug logging in the plugin, then open WooCommerce → Status → Logs (source vezmopay). Keys, tokens and secrets are redacted.

Found a problem? Open an issue on GitHub and attach the redacted vezmopay log if you can.