Documentation

Set up Whop payments in WooCommerce

Everything you need to install WhopWoo, connect Whop, verify webhooks and go live. Written for store owners, with notes for developers.

  • Version 1.1.1
  • About 10 minutes
  • No code required

On this page

On this page

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.

1. Requirements

ComponentMinimumTested up to
WordPress6.57.1
WooCommerce7.911.1
PHP7.48.4
CheckoutClassic shortcode checkout or Cart & Checkout Blocks
Order storageLegacy 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.

2. Install the plugin

  1. After purchase, download the plugin ZIP from your account (My account → Downloads).
  2. In WordPress, go to Plugins → Add New → Upload Plugin, choose the ZIP and click Install Now.
  3. Click Activate, then enter your licence key when prompted. The licence key turns on automatic updates.

3. Get your Whop credentials

You need three values from Whop for each environment (sandbox and live):

SettingWhere to find itLooks like
API keyWhop dashboard → Developer → API keys. Create a company API key.A long secret string
Company IDWhop dashboard → Settings, or the URL of your dashboardbiz_…
Product IDCreate 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.

4. Connect WhopWoo to WooCommerce

Go to WooCommerce → Settings → Payments → Whop and fill in:

SettingWhat it does
Enable/DisableShows Whop as a payment option at checkout.
TitleThe name customers see at checkout. Default: Card or crypto (Whop).
DescriptionShort text under the title at checkout.
Place order button textReplaces “Place order” when Whop is selected, for example “Continue to secure payment”.
Test modeWhen ticked, WhopWoo uses your sandbox credentials and Whop’s sandbox API.
Sandbox / Live API key, company ID, product IDThe three values from step 3, for each environment.
Sandbox / Live webhook secretThe ws_… signing secret from step 5, for each environment.
Payment methodsEvery method Whop offers (default), cards only, or crypto only.
Background reconciliationEvery 15 minutes, checks pending orders against Whop and completes any that were paid. Leave this on.
Debug logWrites redacted logs to WooCommerce → Status → Logs.

5. Register the webhook

  1. Copy the Webhook URL shown on the WhopWoo settings screen.
  2. In the Whop dashboard, go to Developer → Webhooks and create a webhook with that URL.
  3. Subscribe it to these events: payment.succeeded, payment.failed and refund.created.
  4. Copy the signing secret, which starts with ws_, and paste it into the matching webhook secret field in WhopWoo. Paste it exactly as shown and don’t decode it.
  5. Repeat in your Whop sandbox account, using the sandbox secret field.

How verification works

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.

6. Test in sandbox

  1. Tick Test mode and save.
  2. Place an order on your store using the Whop payment option. You should land on Whop’s hosted checkout showing the exact order total.
  3. Pay with a sandbox test card. You’ll be returned to the order-received page, which waits for confirmation.
  4. Check the order in WooCommerce. Its status should be Processing (or Completed for virtual/downloadable orders), and the order notes should show the Whop payment ID.
  5. Issue a partial refund from the order screen and confirm it appears in Whop.

7. Go live

  • Your site is on HTTPS with a valid certificate.
  • Live API key, company ID, product ID and webhook secret are filled in.
  • A live webhook exists in your Whop account, pointing to the same URL and subscribed to the same three events.
  • Untick Test mode and save.
  • Place one small real order, then refund it, to confirm the whole loop.

8. Orders, statuses and refunds

EventWhat WhopWoo does
Customer places orderOrder is Pending payment. A Whop checkout is created for the exact total and the customer is redirected.
Customer returns to your siteNothing is marked paid yet. The thank-you page checks the status while the customer waits.
Verified payment.succeededOrder is completed through WooCommerce’s normal payment-complete flow (stock, emails, status).
Amount mismatchOrder goes On hold with a note for you to review.
payment.failedOrder 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 WooCommerceSent to Whop’s API. Confirmed by refund.created, deduplicated by refund ID, and reconciled against WooCommerce’s refunded total.
Webhook never arrivesThe 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.

9. Currencies

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.

10. Background reconciliation and WP-Cron

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.

11. Troubleshooting

SymptomLikely cause and fix
401 Authentication failedSandbox key used in live mode, or the reverse. Check Test mode and the key in each field.
Whop doesn’t appear at checkoutGateway not enabled, credentials missing, or the store currency isn’t supported. The settings screen shows a warning for each.
Orders stay on Pending paymentThe 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 siteWhop 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 domainNothing 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.

12. For developers

HookTypeUse
whop_wc_supported_currenciesfilterAdd or remove store currencies.
whop_wc_payment_method_configurationfilterAdjust the payment-method configuration sent to Whop.
add_filter( 'whop_wc_supported_currencies', function ( $currencies ) {
    $currencies[] = 'ILS';
    return $currencies;
} );