Payments · Integrations

Muny for WooCommerce

Accept $MUNY at checkout in any WooCommerce store. Prices stay in your currency; Muny quotes the MUNY amount, verifies the payment on Solana and updates the order.

Requirements#

  • WordPress 6.4+, WooCommerce 8.0+, PHP 8.1+ with the curl extension
  • A Muny API key with the create_payments, view_payments, refund_payments and manage_webhooks scopes
  • A receiving wallet set in Muny → Payments → Settings

Install#

  • WordPress admin → Plugins → Add New → Upload Plugin → choose muny-for-woocommerce.zip → Activate.
  • WooCommerce → Settings → Payments → Muny: choose Test mode, paste your mk_test_… key and save.
  • The plugin checks the key, shows your merchant name and network, and registers its webhook endpoint automatically:
bash
https://your-store.com/wp-json/muny/v1/webhook

That's it — "Pay with $MUNY" now appears at checkout (block checkout and classic checkout).

How it works#

StepWhat happens
Place orderThe order is created as Pending payment. The plugin creates a Muny payment with the order total in your store currency; Muny quotes the MUNY amount and locks the rate.
PayThe customer is sent to Muny's hosted checkout and pays from any Solana wallet or by scanning the QR. Funds go straight to your receiving wallet.
VerifyMuny verifies the transfer on chain and sends a signed payment.confirmed webhook. The plugin re-checks the payment with the API before acting.
FulfilThe order moves to Processing (configurable) with the transaction signature, explorer link and the USD value at payment time in the order notes.

Never trusts the redirect

Coming back to the thank-you page doesn't mark an order paid. The plugin completes orders only from verified webhooks, and as a backup from a server-side API check on the thank-you page and a 5-minute reconciler.

Currencies#

Price in any currency Muny can quote (USD, EUR, GBP, SAR, AED, KWD, QAR, BHD, OMR, EGP…). Three-decimal currencies such as KWD are supported. Or choose MUNY as your store currency (the plugin adds it) to charge exact MUNY amounts with no conversion.

Refunds#

Refund from the WooCommerce order screen as usual — full or partial, in your store currency. Muny converts it proportionally to the original quote and sends the MUNY back to the customer's wallet. Partial refunds that add up to the order total refund the exact MUNY amount (no rounding dust).

If your receiving wallet is external (non-custodial), Muny can't sign for it: the refund is created in Muny with status requires_signature and you approve it with your wallet in the Muny dashboard.

Settings#

Setting
ModeTest (devnet, mk_test_ key) or Live (mainnet, mk_live_ key). Test mode shows a TEST MODE notice at checkout.
API base URLDefaults to https://api.muny.io — change only for staging or self-hosted Muny.
Payment expiryMinutes the customer has to pay (default 30). Expired payments cancel the pending order.
Order status after paymentProcessing (default) or Completed for virtual goods.
Debug logWooCommerce → Status → Logs → muny. Secrets are never logged.

Order statuses

Muny eventWooCommerce order
payment.confirmed / finalizedProcessing (payment complete, signature recorded)
payment.expired / cancelledCancelled — only if still pending
payment.failedFailed — e.g. the customer sent the wrong amount (refund from Muny if needed)
payment.refundedOrder note

FAQ#

Do customers need SOL? Customers paying from their own wallet pay a tiny Solana network fee (a fraction of a cent). Muny Wallet users will have fees sponsored.

Does Muny hold my money? No. Payments go directly from the customer to your receiving wallet; Muny observes and verifies.

HPOS? Yes — compatible with High-Performance Order Storage and the Cart & Checkout blocks. See also the PHP SDK the plugin is built on.