QAlaunch

WooCommerce checkout keeps spinning after Place order

A WooCommerce checkout that spins forever means the browser never received a usable reply to the checkout request: it timed out, or the server returned a PHP error or HTML page instead of the JSON WooCommerce expects. The usual culprits are a slow plugin hooked into order processing, a payment gateway configuration problem, or caching and firewall rules interfering with the request. Watch the request in DevTools during a test order, then check WooCommerce > Status > Logs for the matching error.

Opens your site in a real browser on desktop and phone. Free, about two minutes, no signup. Full report from $19.

What you'll see

The customer presses Place order, the overlay and spinner appear, and nothing else happens. Sometimes the payment has actually gone through, so the customer tries again and is charged twice, and you find duplicate or pending orders in the admin. Other times no order is created at all and the sale is simply lost.

Why it happens

1. The checkout request times out or returns an error page

The classic checkout posts to ?wc-ajax=checkout and the block checkout uses the Store API. If a slow plugin pushes the request past a server or proxy timeout (Cloudflare shows a 524), or PHP prints an error into the response, the page cannot read it and keeps spinning.

2. The payment gateway is misconfigured

Wrong or expired API keys, a gateway left in the wrong mode, or a webhook endpoint that no longer matches can leave the payment step hanging, or let the charge succeed while the order is never confirmed back to WooCommerce.

3. Another plugin hooks into order processing

Affiliate, membership, CRM and email marketing plugins often run code the moment an order is created. One that calls a slow external service, or crashes, holds up the entire checkout response.

4. Caching or security rules touch checkout requests

A page cache, CDN rule or firewall that caches, rewrites or blocks wc-ajax or Store API requests breaks the conversation between the checkout page and the server.

How to fix it

  1. Put your gateway in test or sandbox mode, open DevTools > Network, and place a test order. Find the checkout request and note its status code and whether the response body is JSON or an HTML error page.
  2. Go to WooCommerce > Status > Logs and open the fatal-errors log and your gateway’s log for the time of the test. A PHP fatal error there usually names the plugin file responsible.
  3. With Health Check & Troubleshooting, enable Troubleshooting Mode and activate only WooCommerce and the payment gateway, then repeat the test order. Add plugins back until the spinner returns.
  4. On the gateway’s settings screen, confirm it is in the intended live or test mode, that the keys match that mode, and that the webhook URL and secret match what the payment provider has on file.
  5. Exclude /checkout/, wc-ajax requests and the Store API path (/wp-json/wc/store/) from page cache, CDN and firewall rules. If requests are merely slow, ask your host about PHP max_execution_time and server timeouts.
  6. Check WooCommerce > Orders for pending or duplicate orders from affected customers, and refund any double charges.

How to check it's fixed

  • Place test orders on a desktop browser and on a phone: each should redirect to the order-received page within a few seconds.
  • Confirm exactly one order per test appears under WooCommerce > Orders, with the right status for your gateway.
  • Check the payment provider’s dashboard for the test charges and make sure each one is matched to a single order.

What a QAlaunch scan shows for this

  • JavaScript errors and failed script requests on the pages it loads, such as a gateway script that is blocked or missing.
  • Slow responses and poor performance scores from the PageSpeed (Lighthouse) check.
  • It does not fill in checkout or complete a payment, so a spinner that only appears after Place order needs a test-mode order or manual testing to reproduce.

See exactly what a full report contains in the sample report.

Frequently asked questions

The customer was charged but sees the spinner. What happened?

The payment provider accepted the payment, but WooCommerce’s reply to the browser failed or timed out. Gateway webhooks normally update the order afterwards; if they are misconfigured, the order can stay pending even though the money arrived.

Does this only happen with one payment method?

Test each method you offer separately. If only one spins, look at that gateway’s settings and log first; if all of them spin, the problem is in WooCommerce’s order processing or another plugin.

How do I stop customers paying twice while I fix it?

Add a note on the checkout page telling customers to check their email before retrying, and watch the Orders screen for pending orders. Fixing the timeout is the real cure.

Can an automated scan test my checkout?

It can load the checkout page and report errors there, but it should not submit real payment details. For a full run-through with test cards, manual testing is the honest option.

Done for you · not automated

Rather have a QA engineer test it by hand?

If this is a site you're launching or handing to a client, I'll go through it by hand, including the WooCommerce-specific issues a scan can't reach, like logged-in flows.

$299one-time · 3 business days
  • Up to 10 key pages tested by hand, not a scan
  • Every flow a customer uses: forms, sign-up, checkout, booking
  • Real mobile and desktop browsers
  • A written report in plain language, with screenshots
  • A 15-minute call to walk you through it
  • 10 years of professional QA experience

Tell me about your site and I'll reply personally, usually the same day.

No payment now. I'll confirm scope and price first.

More for WooCommerce: all WooCommerce fixes · WooCommerce testing

Written by Waqas Ahmad, QA engineer with 10 years of professional testing experience. Last checked October 26, 2026.

Sources: WordPress.org support: PayPal Payments checkout spinning · WPMU DEV forums: WooCommerce Stripe checkout keeps spinning