WooCommerce Plugin
Accept Monero (XMR) payments on your WooCommerce store with the official Rebel Pay plugin. One plugin, zero JavaScript dependencies, fully automatic order management.
Requirements
- WordPress 5.8 or later
- WooCommerce 7.0 or later
- PHP 7.4 or later
- A Rebel Pay instance (self-hosted)
- SSL certificate (HTTPS) on your store — required for webhook security
Installation
Option A: Upload via WordPress Admin
- Download the rebel-pay-woocommerce-1.0.0.zip plugin file
- In your WordPress admin, go to Plugins → Add New → Upload Plugin
- Select the zip file and click Install Now
- Click Activate
Option B: Manual Upload via FTP/SFTP
- Download and unzip the plugin
- Upload the
rebel-pay-woocommercefolder to/wp-content/plugins/ - In WordPress admin, go to Plugins and activate Rebel Pay for WooCommerce
Configuration
Three steps to start accepting Monero payments:
Step 1: Get Your API Key
- Log in to your Rebel Pay dashboard
- Go to Settings
- Copy your API Key
Step 2: Create a Webhook
Webhooks tell WooCommerce when a payment has been confirmed, expired, or underpaid. Without a webhook, your orders won't update automatically.
- In the Rebel Pay dashboard, go to Settings → Webhooks
- Click Add Webhook
-
Set the URL to:
Replace
https://yourstore.com/?wc-api=rebel_payyourstore.comwith your actual domain. -
Select these events:
charge.confirmed— payment verified on-chaincharge.expired— charge timed outcharge.detected— payment seen in mempool
- Save and copy the Webhook Secret — you'll need it in Step 3
Step 3: Configure the Plugin
- In WordPress, go to WooCommerce → Settings → Payments
- Find Rebel Pay and click Manage
- Fill in the settings:
| Setting | What to enter |
|---|---|
| Enable/Disable | Check to enable Rebel Pay at checkout |
| Title | What customers see — e.g. Pay with Monero |
| Description | Shown below the title — e.g. Pay securely with Monero via Rebel Pay. |
| API Key | Your Rebel Pay API key from Step 1 |
| API URL | Your Rebel Pay instance URL — e.g. https://your-server.com |
| Payment Page URL | Leave blank to use the API URL. Set only if your payment page is hosted on a different domain. |
| Webhook Secret | The secret from Step 2 — used to verify webhook signatures |
| Test Mode | Enable for development — reserved for future test mode |
- Click Save changes
That's it. Your store now accepts Monero. 🎉
How It Works
Customer Experience
- Customer adds products to cart and goes to checkout
- Selects "Pay with Monero" — your Rebel Pay logo appears next to the option
- Clicks Place Order
- Redirected to the Rebel Pay payment page showing:
- XMR amount to send
- QR code (scannable from any Monero wallet)
- Monero address to copy
- Countdown timer
- Customer sends XMR from their wallet
- Payment detected — within seconds, a "Return to Store" button appears (opens in a new tab)
- Customer returns to your store while the payment page continues tracking confirmations
- After 10 confirmations (~20 minutes), order status updates automatically
Order Status Flow
| Event | WooCommerce Status | What Happened |
|---|---|---|
| Order placed | On Hold | Waiting for Monero payment |
| Payment detected | On Hold | XMR seen in mempool (0 confirmations) |
| Payment confirmed | Processing | 10+ on-chain confirmations ✓ |
| Charge expired | Failed | No payment received within timeout |
| Underpaid | On Hold + note | Partial payment — order note added |
Admin Features
Order Details
Every order paid via Rebel Pay shows additional details in the admin order view:
- Charge ID — the Rebel Pay charge reference (e.g.
ch_abc123def456) - XMR Amount — exact Monero amount paid
- Payment Address — the unique subaddress used for this payment
Order Notes
The plugin adds timestamped notes to each order:
- "Awaiting Monero payment via Rebel Pay." — on order creation
- "Rebel Pay payment confirmed. Charge: ch_..." — on confirmation
- "Rebel Pay charge expired. Charge: ch_..." — if charge timed out
- "Rebel Pay charge underpaid..." — if partial payment received
Security
- Webhook signatures — every webhook is signed with HMAC-SHA256. The plugin rejects requests with missing or invalid signatures.
- No API keys in URLs — payment page URLs use charge IDs, never API keys.
- Charge ID verification — the plugin verifies the charge ID in the webhook matches the one stored on the order, preventing cross-order attacks.
- Data pruning — Rebel Pay automatically strips sensitive transaction data after 14 days and fully deletes records after 30 days.
- Minimal data storage — only charge ID, XMR amount, and address are stored in WordPress. No wallet keys, no transaction hashes, no customer financial data.
Troubleshooting
"Place Order" fails or shows an error
- Check that the API URL is correct and reachable from your server
- Check that the API Key is valid (no extra spaces)
- Check your server can make outbound HTTPS requests (some hosts block them)
- Look at WooCommerce → Status → Logs for error details
Order stays "On Hold" after payment
- Webhook URL — verify it's exactly
https://yourstore.com/?wc-api=rebel_pay - Webhook secret — must match between Rebel Pay and WooCommerce settings
- HTTPS required — webhooks won't work over plain HTTP
- Firewall — your server must accept incoming POST requests to the webhook URL
- Check the order notes for any webhook-related messages
"Invalid signature" error
- The webhook secret in WooCommerce doesn't match the one in Rebel Pay
- Re-copy the exact secret from your Rebel Pay webhook settings — no extra whitespace
Customer paid but charge shows expired
Rebel Pay tracks late payments. If a customer pays after the charge expires,
a charge.late_confirmed webhook will still update the order.
The order note will indicate it was a late payment.
Logo not showing at checkout
- Verify the
assets/logo.pngfile exists in the plugin directory - Check for caching plugins that might be serving a stale checkout page
- Clear your browser cache and any page caching plugins
Uninstalling
Deactivating the plugin disables Monero payments at checkout. Deleting the plugin removes all gateway settings from the database.
Order data is preserved. Charge IDs, XMR amounts, and payment addresses stored on orders are intentionally kept for your accounting records, even after the plugin is deleted.
Version History
1.0.0 — February 15, 2026
- Initial release
- WooCommerce payment gateway integration
- Automatic charge creation and redirect to payment page
- HMAC-SHA256 webhook signature verification
- Automatic order status updates
- Admin order details panel
- HPOS compatibility
- Branded gateway icon
- Test mode support
Next Steps
- Webhooks Reference — full event reference and signature verification
- API Reference — all available endpoints
- Integrations — connect to Make.com, n8n, and more
- FAQ — common questions answered