Documentation
Everything you need to install WhopWoo, connect Whop, verify webhooks and go live. Written for store owners, with notes for developers.
Setup time: about 10 minutes. You need: a WooCommerce store on HTTPS, a Whop account (plus a Whop sandbox account for testing), and your WhopWoo licence key.
| Component | Minimum | Tested up to |
|---|---|---|
| WordPress | 6.5 | 7.1 |
| WooCommerce | 7.9 | 11.1 |
| PHP | 7.4 | 8.4 |
| Checkout | Classic shortcode checkout or Cart & Checkout Blocks | |
| Order storage | Legacy posts table or High-Performance Order Storage (HPOS) | |
Your store must be reachable on the public internet over HTTPS so that Whop can deliver webhooks to it. Sites on .local or localhost addresses can’t receive webhooks. See Troubleshooting for how to test locally.
You need three values from Whop for each environment (sandbox and live):
| Setting | Where to find it | Looks like |
|---|---|---|
| API key | Whop dashboard → Developer → API keys. Create a company API key. | A long secret string |
| Company ID | Whop dashboard → Settings, or the URL of your dashboard | biz_… |
| Product ID | Create one product in Whop, for example “Store orders”. WhopWoo attaches every order’s one-time plan to it. | prod_… |
Sandbox is a separate host. Whop’s sandbox runs at its own API address with its own keys. A sandbox key used against the live API (or the reverse) returns 401 Authentication failed. WhopWoo switches hosts for you when you tick Test mode, so you only need to paste the right keys into the right fields.
Go to WooCommerce → Settings → Payments → Whop and fill in:
| Setting | What it does |
|---|---|
| Enable/Disable | Shows Whop as a payment option at checkout. |
| Title | The name customers see at checkout. Default: Card or crypto (Whop). |
| Description | Short text under the title at checkout. |
| Place order button text | Replaces “Place order” when Whop is selected, for example “Continue to secure payment”. |
| Test mode | When ticked, WhopWoo uses your sandbox credentials and Whop’s sandbox API. |
| Sandbox / Live API key, company ID, product ID | The three values from step 3, for each environment. |
| Sandbox / Live webhook secret | The ws_… signing secret from step 5, for each environment. |
| Payment methods | Every method Whop offers (default), cards only, or crypto only. |
| Background reconciliation | Every 15 minutes, checks pending orders against Whop and completes any that were paid. Leave this on. |
| Debug log | Writes redacted logs to WooCommerce → Status → Logs. |
payment.succeeded, payment.failed and refund.created.ws_, and paste it into the matching webhook secret field in WhopWoo. Paste it exactly as shown and don’t decode it.Whop signs webhooks using the Standard Webhooks scheme. WhopWoo computes an HMAC-SHA256 over {webhook-id}.{webhook-timestamp}.{raw body} with your secret and compares it with the webhook-signature header. It rejects the event if the signature doesn’t match, if the event is a replay, or if the paid amount differs from the order total. An amount mismatch puts the order on hold with a note explaining why.
| Event | What WhopWoo does |
|---|---|
| Customer places order | Order is Pending payment. A Whop checkout is created for the exact total and the customer is redirected. |
| Customer returns to your site | Nothing is marked paid yet. The thank-you page checks the status while the customer waits. |
Verified payment.succeeded | Order is completed through WooCommerce’s normal payment-complete flow (stock, emails, status). |
| Amount mismatch | Order goes On hold with a note for you to review. |
payment.failed | Order is marked Failed with Whop’s failure reason in the notes (unless it was already paid). The customer can pay again from their account. |
| Refund from WooCommerce | Sent to Whop’s API. Confirmed by refund.created, deduplicated by refund ID, and reconciled against WooCommerce’s refunded total. |
| Webhook never arrives | The 15-minute reconciler finds the payment and completes the order. |
Why a refund can show as $0 at first: Whop reports a pending refund as 0 until it settles. WhopWoo waits for the refund.created webhook to record the real amount.
WhopWoo supports these store currencies out of the box: USD EUR GBP AUD CAD NZD SGD HKD JPY CHF SEK NOK DKK PLN CZK HUF RON BGN AED SAR INR MXN BRL ZAR TRY MYR THB PHP IDR KRW.
If your store currency isn’t on the list, WhopWoo hides itself at checkout and shows a notice in the admin, so a customer is never charged in the wrong currency. Developers can add currencies that Whop supports with the whop_wc_supported_currencies filter.
The reconciler runs on WP-Cron every 15 minutes. WP-Cron only fires when your site gets traffic, so on quiet stores we recommend a real server cron job that calls wp-cron.php every 5–15 minutes. Most managed WordPress hosts have a setting for this.
| Symptom | Likely cause and fix |
|---|---|
401 Authentication failed | Sandbox key used in live mode, or the reverse. Check Test mode and the key in each field. |
| Whop doesn’t appear at checkout | Gateway not enabled, credentials missing, or the store currency isn’t supported. The settings screen shows a warning for each. |
| Orders stay on Pending payment | The webhook isn’t reaching your site, or the secret is wrong. Turn on the debug log and check WooCommerce → Status → Logs. The reconciler will still complete paid orders within 15 minutes. |
| Testing on a local site | Whop can’t reach .local or localhost. Use a tunnel with a stable hostname (for example, a named Cloudflare Tunnel) and register that URL as the webhook. |
| Order on hold: “amount mismatch” | The paid amount differed from the order total. Compare the Whop payment with the order before completing it by hand. |
| Moved to a new domain | Nothing to do. WhopWoo’s store ID doesn’t depend on the site URL. Update the webhook URL in Whop to the new domain. |
Before contacting support, note your WordPress, WooCommerce, PHP and WhopWoo versions, whether you’re in test mode, your checkout type (classic or blocks), and an order number. Never send your API key or webhook secret.
| Hook | Type | Use |
|---|---|---|
whop_wc_supported_currencies | filter | Add or remove store currencies. |
whop_wc_payment_method_configuration | filter | Adjust the payment-method configuration sent to Whop. |
add_filter( 'whop_wc_supported_currencies', function ( $currencies ) {
$currencies[] = 'ILS';
return $currencies;
} );