Skip to main content

NiftiPay for WooCommerce

Accepts crypto, fiat card, and ramping payments in WooCommerce. Works with both classic checkout and WooCommerce Blocks. Shared concepts are covered in E-commerce plugins.

Requirements

  • WordPress ≥ 6.2
  • WooCommerce ≥ 6.0
  • PHP ≥ 7.4

Download

Download NiftiPay for WooCommerce

Latest release as a .zip, ready to upload to WordPress.

Before you install

Have both credentials ready — the plugin can’t create an order without them:

Get your Integration ID

A fiat integration is the per-shop configuration your orders attach to: which URLs the customer comes back to, and where status updates are sent. Every order the plugin creates references exactly one integration.
1

Open Dashboard → Settings → Fiat

Fill the Create integration form:
  • Name — anything you recognise, e.g. My Shop.
  • Return URL (required) — your shop’s order-received page. The plugin overrides this per order when Return URL mode is WooCommerce thank-you page, so any valid URL on your shop works here.
  • Failure URL — where the customer lands after a failed/cancelled payment. Must match the Failure URL you set in the plugin.
  • Merchant webhook URL (required) — your shop’s webhook endpoint, shown at the top of the plugin settings page.
  • Contact URL — your contact/support page, shown to blocked customers.
2

Copy the ID

The new integration appears under Your integrations with Integration ID: <id>. Press Copy ID — that is the value you paste into the plugin.
Prefer the API? GET /api/fiat/integrations returns the same list:
integrations[].id (e.g. fi_abc123) is the Integration ID. Full CRUD is in Fiat integrations; the same walkthrough with more context is in Fiat orders → How to get your integrationId.
One integration per shop. Running several shops on one account? Create one integration each — that keeps return URLs and webhooks from crossing over, and lets you filter orders per shop.

Installation

1

Install the plugin

In WordPress go to Plugins → Add New → Upload Plugin, pick the .zip you downloaded, install it, and activate. Activation registers the /niftipay/webhook endpoint and flushes rewrite rules.
2

Open the settings

Go to WooCommerce → Settings → Payments → Niftipay.
3

Add your credentials

Paste your API key, then your Integration ID — see Get your Integration ID above.
4

Register the webhook

Copy the Webhook URL shown at the top of the settings page into the NiftiPay dashboard (Webhooks section), then paste the returned Webhook secret back into the plugin.
5

Enable your payment methods

Turn on Crypto, Fiat, and/or Ramping, then save.

Gateways

The plugin registers three WooCommerce gateways, all configured from the first one’s settings screen:

Settings reference

Shared

Per method

Each of Crypto, Fiat, and Ramping has its own block of settings:

Endpoints the plugin exposes

If pretty permalinks are disabled on the site, register the /wp-json/niftipay/v1/webhook route in the dashboard instead of /niftipay/webhook.

Payment flows

Crypto — creates the order at NiftiPay, sets the WooCommerce order to on-hold, and returns the customer to the order-received page, which renders the invoice (QR, address, amount, countdown) and polls order-status every 10 seconds. The message swaps in place when the invoice expires, is cancelled, is refunded, or is detected as paid. Fiat — creates the order (sending serviceFeePayer, returnUrl, failureUrl), stores the fiat order key for later refunds, sets the order to on-hold, and redirects the customer to the hosted payment page. NiftiPay then returns the customer to whichever URL the Return URL mode selects. Ramping — creates a payment link and redirects to it.

Admin features

  • Test API key and Refresh coins buttons on the settings screen.
  • Service-fee breakdown under the order totals on the admin order screen.
  • Refund address field and fiat refund action on the order screen.
  • Fraud signals and IP risk panel per order.
  • A guard rail rewrites a bare /order-received/ hit to the canonical order-received URL when the order can’t be resolved from the path, which prevents “invalid order” landings after returning from a payment page.

Troubleshooting