Whop Payment Gateway for WooCommerce — setup guide
Everything below is written against the shipping 3.12.23 release. You need an API key, a Company ID and a webhook signing secret. If you only read one section, read step 5 — that's the one people skip and then wonder why their orders stay unpaid.
1. Overview & requirements
This plugin puts Whop's card and crypto checkout inside your own WooCommerce checkout page. In the default Embed on Checkout mode the card fields render in your payment method box and WooCommerce's own Place Order button starts the payment flow. Test this normal path in your own theme.
You do not manually create or map Whop plans to WooCommerce products. The gateway creates a one-time Whop plan and checkout from the live order total, including quantities, coupons and shipping.
Requirements
| WordPress | 6.0 or newer |
|---|---|
| WooCommerce | 7.0 or newer |
| PHP | 7.4 or newer |
| Checkout | Classic checkout or the WooCommerce Checkout Block — both supported |
| Order storage | HPOS (High-Performance Order Storage) compatible |
| HTTPS | Required for live payments. Sandbox works without it. |
| Whop account | An active Whop seller account |
2. Install the plugin
-
Download the ZIP
After purchase, download the plugin ZIP from your Freemius account. Don't unzip it.
-
Upload it to WordPress
Go to Plugins → Add New → Upload Plugin, choose the ZIP and click Install Now.
-
Activate
Click Activate Plugin. A Whop entry now appears under your WooCommerce payment methods.
-
Enter your licence key
You'll be prompted for the licence key from your Freemius receipt. This is what enables automatic updates — the gateway still works without it, but you won't get new versions.
3. Get your Whop credentials
The plugin needs an API key and Company ID first. You will add the webhook signing secret after creating the callback in step 5.
-
Create an API key
In your Whop dashboard, open your developer / API settings and create a new API key for this store. Copy it immediately — most dashboards show a secret key once.
-
Copy your Company ID
Your Company ID identifies which Whop company the payment belongs to. It's shown in your Whop company settings and typically looks like
biz_xxxxxxxx. -
Decide sandbox or live
If you want to test first — and you should — use your sandbox credentials here and switch them out later at step 9.
4. Connect the gateway in WooCommerce
-
Open the gateway settings
Go to WooCommerce → Settings → Payments, find Whop in the list and click Manage.
-
Paste your credentials
Put the API key and Company ID from step 3 into their fields.
-
Set the title your customers see
This is the label in the payment method list. Something plain like Credit card or crypto converts better than the word "Whop", which most of your customers won't recognise.
-
Enable the gateway and save
Tick Enable, then Save changes. Leave sandbox mode on for now.
5. Register the webhook
This is the step that matters most. The webhook is how payment confirmation gets back to WooCommerce. Without it, customers can pay successfully and your orders will sit there unpaid.
-
Copy the webhook URL from the plugin
The gateway settings screen displays your store's callback URL. It looks like this:
https://yourstore.com/?wc-api=whop_webhookCopy the exact value from the gateway settings rather than typing it by hand. The callback must be publicly reachable over HTTPS when you test live payments.
-
Add it as a webhook in Whop
In your Whop dashboard, open webhook settings and create a new endpoint pointing at that URL.
-
Subscribe to
payment.succeededThis single event is what the plugin listens for. You don't need the membership events, and subscribing to everything just adds noise.
-
Copy the signing secret into the gateway
After Whop creates the endpoint, copy its webhook signing secret into the matching field in WooCommerce, then save the gateway settings.
-
Send a test event if Whop offers one
A test delivery should return a
200. A404usually means the callback URL is not the exact public URL from the gateway settings — see step 12.
What the plugin does with it
The signed webhook path validates the event before an order is marked paid:
- The webhook signature is verified cryptographically, including a replay window, so a spoofed request cannot mark an order paid.
- The gateway accepts only a paid
payment.succeededevent that matches the expected Whop plan, company, amount and currency.
Only after those checks pass does WooCommerce complete the payment. Some return and recovery paths can also check Whop's API separately.
localhost, so no webhook will ever arrive. Use a tunnel such as
ngrok or Cloudflare Tunnel and register the public URL instead.
6. Choose a checkout mode
One dropdown, three payment experiences. You can change it whenever you like without touching your credentials, your webhook or any existing orders.
WooCommerce Checkout
RecommendedCustomers choose Whop, enter their payment details, and place the order from the familiar WooCommerce checkout.
- Payment fields appear in the WooCommerce payment area
- Uses the familiar WooCommerce Place order action
- Recommended for a standard WooCommerce checkout
Popup Checkout
Stay on your siteCustomers complete payment in a focused overlay while your WooCommerce checkout stays open behind it.
- Keeps the WooCommerce checkout open behind the payment panel
- Creates a focused on-site payment window
- Works with Classic checkout and Checkout Block
Whop Checkout
Whop-hostedCustomers complete payment on a secure Whop-hosted page, then return to the WooCommerce order flow.
- Opens Whop's secure checkout page
- Keeps the payment page separate from the theme layout
- Returns to the WooCommerce order flow
Which one should you pick?
| Your situation | Use |
|---|---|
| Standard theme, conventional checkout | Embed on Checkout |
| Mostly mobile traffic | Embed on Checkout |
| Busy checkout with upsells and widgets | Popup |
| Checkout built by a page builder | Direct redirect |
| Isolating a plugin conflict | Direct redirect, then work back up |
All three modes use the same cart-derived payment and webhook verification. Their presentation differs: Embed on Checkout renders fields in WooCommerce, Popup opens an on-page modal, and Direct Redirect uses a Whop-hosted page. Test the mode you choose in your own theme.
7. Appearance & language
Making the form look like your store
The payment form is Whop's iframe, but you control how it presents itself:
- Theme — light or dark, with a high-contrast option where needed
- Accent colour — match your buttons and links
- Background colour — blend into your checkout panel
- Corner radius — match your theme's inputs so the fields don't look pasted in
Set these to your existing checkout styles and most customers won't register that the fields belong to a different system, which is the whole point.
Language
The payment form is available in 28 languages. Set one explicitly, or leave it on automatic to use the primary language from your WordPress site locale when that locale is supported.
On a multilingual store, test each translated checkout on staging. Automatic mode follows the WordPress site locale mapping; it is not browser or location detection.
All 28 supported languages
8. Currency handling
47 listed store currencies are passed to Whop natively. For a store currency outside that list, the gateway converts the order amount to USD using a live rate with safeguards. Test the currencies that matter to your store in sandbox.
All 47 natively charged currencies
Testing this properly
- Set your store currency to each one that matters commercially and place a sandbox order in each.
- Confirm the amount and currency shown in the checkout match the path you expect. Test a zero-decimal currency such as JPY specifically.
- Test a coupon and a shipping cost together, because that's where rounding errors surface.
- Test one currency outside the native list and confirm the USD conversion behaves as you expect.
9. Test, then go live
Run a full sandbox order
Sandbox mode lets you exercise the checkout and order-confirmation path before real charges. Place a test order and check the parts that apply to your selected checkout mode:
- The checkout appears in the expected place: embedded fields, popup, or hosted redirect.
- The amount and currency match the cart path you tested, including coupons and shipping.
- The signed
payment.succeededwebhook moves the matching order to a paid status. - Your normal WooCommerce fulfilment behaviour occurs after payment.
- Submit once with a deliberately invalid billing field and confirm validation fires before any charge.
Switching to live
-
Confirm HTTPS is active
Live payments require it. Check the certificate covers the exact domain your checkout runs on, including or excluding
wwwas appropriate. -
Swap in your live credentials
Replace the sandbox API key and Company ID with the live pair.
-
Register the matching live webhook and signing secret
Make sure your live Whop endpoint and the signing secret saved in WooCommerce match the live environment before accepting real orders.
-
Turn sandbox mode off and save
Place a small real order only after you have confirmed the live credentials and webhook are configured correctly. If you later refund a payment in Whop, record that operationally against the WooCommerce order as appropriate for your workflow.
10. Orders after payment
Order status
You choose what a paid order becomes:
- WooCommerce default — the normal behaviour, which is usually Processing for physical goods and Completed for downloads only
- Force Processing — when you fulfil manually and want everything queued
- Force Completed — when everything you sell is instant access
If you sell digital products and customers are waiting on a download, Force Completed is usually what you want.
When something goes wrong mid-payment
If a verified payment arrives before WooCommerce can match it to an order, the gateway records it for review in its status tools. Review and reconcile these entries promptly; payment checkout and third-party fulfilment are separate responsibilities.
Refunds
Refunds are issued from your Whop dashboard, since that's where the funds sit. Record the refund against the WooCommerce order afterwards so your reports stay accurate.
11. Settings reference
Every setting on the gateway screen, and what it actually affects.
| Setting | What it does | Suggested |
|---|---|---|
| Enable / disable | Shows or hides Whop at checkout | Enabled |
| Title | The label customers see in the payment list | "Credit card or crypto" |
| Description | Short text under the title | Mention cards and crypto |
| API key | Authenticates every request to Whop | — |
| Company ID | Which Whop company receives the payment | — |
| Sandbox mode | Routes everything to Whop's sandbox | On until launch |
| Checkout mode | Embed, popup or direct redirect | Embed on Checkout |
| Form theme | Light, dark or high contrast | Match your store |
| Accent / background colour | Colours inside the payment form | Your brand colours |
| Corner radius | Field rounding inside the form | Match your theme inputs |
| Language | Payment form language, or follow site language | Automatic |
| Order status after payment | Default, force Processing, or force Completed | Depends on fulfilment |
| Custom button label / colours | Popup mode only — styles your payment button | Match your theme |
| Webhook URL | Read-only. Copy this into Whop. | — |
12. Troubleshooting
Ordered roughly by how often each one actually happens.
| Symptom | Usual cause | Fix |
|---|---|---|
| Payment succeeds but the order stays pending | No webhook, or it's subscribed to the wrong event | Register the URL in Whop and subscribe to payment.succeeded |
| Webhook returns 404 | The public callback URL is incorrect or blocked | Copy the exact ?wc-api=whop_webhook URL shown in gateway settings, then verify it is publicly reachable over HTTPS |
| Worked in sandbox, first live order pending | Webhook only registered on the sandbox account | Add the webhook to your live Whop account too |
| Whop missing from checkout | Gateway disabled, incomplete credentials, or another plugin filtering methods | Check that the gateway is enabled, verify the credentials and then test with other payment customisations off |
| Card fields blank or never load | A JavaScript error from another plugin is breaking the page | Open the browser console; fix the erroring script or switch to popup mode |
| Fields work, then break after switching payment method | Checkout Block re-render not tearing the frame down | Update to the latest plugin version; report it if it persists |
| Live mode refuses to process | No valid HTTPS certificate | Install a certificate covering your checkout domain exactly |
| No webhook on a local install | Whop can't reach localhost |
Expose the site with ngrok or Cloudflare Tunnel |
| Charged amount differs from the cart | A currency-switcher plugin changing display but not store currency | Confirm the store currency at checkout matches what's displayed |
| Order meta missing after enabling HPOS | Another plugin writing post meta directly | Not this gateway — identify the plugin still using post meta |
Before you open a ticket
These four details get your issue resolved on the first reply instead of the third:
- WordPress, WooCommerce, PHP and plugin versions.
- Sandbox or live, and which checkout mode.
- Classic checkout or the Checkout Block.
- What you expected, what happened, and the order number. Never send your API key.
13. Get support
Send us the details from the checklist above and we'll pick it up. Tickets are monitored daily, and the form is protected by Google reCAPTCHA to keep spam out.