Blog
How to Fix WooCommerce Orders Stuck as Pending Payment
A WooCommerce order stuck as Pending payment is your store saying, “I created the order, but I do not yet have proof the payment succeeded.”
Sometimes that is harmless. A shopper abandoned checkout, closed a 3D Secure window, or chose an offline payment method. Other times, the customer was charged and WooCommerce simply never received the confirmation from the payment gateway.
That second case is the one you need to take seriously. If paid orders stay pending, you can miss shipments, oversell inventory, confuse customers, and create a support headache that could have been avoided with a few checks.
What “Pending payment” means in WooCommerce
In WooCommerce, Pending payment usually means the order exists, but payment has not been completed or confirmed.
That is different from Processing, which usually means payment was received and the order needs fulfillment. It is also different from Completed, which is normally used when the order has been fulfilled or no further action is needed.
For offline methods, like cheque payment, direct bank transfer, or cash on delivery, pending can be normal. For online card payments through Stripe, Moneris, PayPal, or another gateway, pending should usually resolve automatically once the gateway confirms the transaction.
Quick rule: Never ship or fulfill a pending order until you confirm payment in the payment gateway dashboard. WooCommerce order status alone is not enough when something looks wrong.
First: confirm whether the customer was actually charged
Before touching settings, check the payment gateway itself.
Log in to Stripe, Moneris, PayPal, Square, or whichever gateway the order used. Search for the customer name, email address, order number, transaction ID, or amount.
You are trying to answer one simple question: did the payment actually succeed?
- If the payment succeeded: WooCommerce likely missed the payment confirmation, webhook, or callback.
- If the payment failed: the pending order is probably correct, and the customer needs to try again.
- If there is no transaction: the customer may have abandoned checkout before paying.
- If the transaction is authorized but not captured: check your gateway settings and capture policy before fulfilling anything.
Do not rely on the customer saying “I think it went through.” Ask for the approximate time, amount, and payment method, then verify it in the gateway.
Also avoid asking customers to email card numbers or screenshots containing full payment details. For Canadian stores, customer information still needs to be handled carefully under privacy laws such as PIPEDA.
Check the order notes
WooCommerce order notes are often the fastest clue.
Open the order in WordPress and look at the private order notes. You may see messages from the payment gateway such as payment failed, authentication required, webhook received, transaction authorized, fraud review, or API error.
Do not just look at the status label at the top. The order notes can tell you whether WooCommerce tried to update the order and failed, or whether the gateway never responded at all.
If the order notes show an error message, copy it somewhere safe before changing anything. That message may be useful when checking the gateway logs or contacting support.
Common reasons WooCommerce orders stay pending
1. The customer abandoned checkout
This is the least dramatic cause.
A shopper adds products to the cart, starts checkout, gets redirected to a payment page, then closes the browser or changes their mind. WooCommerce may still create the order before payment is completed.
In that case, the pending order is not broken. It is simply unpaid.
You can cancel it, leave it to expire if your store is configured that way, or send the customer a payment link if it makes sense.
2. The payment gateway webhook is not working
Modern payment gateways often use webhooks or callbacks to tell WooCommerce what happened after checkout.
For example, a customer completes payment on a hosted payment page. The gateway then sends a message back to your site saying the payment succeeded. WooCommerce receives that message and updates the order.
If that message never arrives, or your site blocks it, the order may remain pending even though the customer paid.
Common webhook problems include:
- The webhook was never created in the gateway dashboard.
- The webhook points to an old domain or staging site.
- The site moved from HTTP to HTTPS and the gateway still has the old callback address.
- A firewall, security plugin, or CDN is blocking gateway requests.
- The payment plugin was reinstalled and the webhook secret no longer matches.
- The gateway account is in test mode while WooCommerce is in live mode, or the other way around.
Do not guess webhook URLs or credential formats. Payment plugins change over time. Check the official documentation for your gateway and your WooCommerce payment plugin.
If you are using Moneris, this article may help: How to Set Up Moneris Payment Processing on Your Canadian WooCommerce Store.
If you are using Stripe, see How to Set Up Stripe Payments in WooCommerce for Canadian Stores.
3. Test mode and live mode are mixed up
This happens more often than store owners expect.
A gateway can be set to test mode while WooCommerce is configured with live credentials. Or WooCommerce can be in live mode while the gateway dashboard is showing test transactions.
The checkout may appear to work partway, but the final confirmation does not line up. Orders can then stay pending, fail silently, or show confusing notes.
Check both sides:
- The WooCommerce payment method settings.
- The payment gateway dashboard.
- The API keys or credentials currently saved in WordPress.
- Whether the latest transaction appears under live payments or test payments.
Do not copy credentials between stores without checking the gateway documentation. Some gateways use separate credentials for sandbox, test, production, recurring payments, terminals, or specific merchant accounts.
4. 3D Secure or bank authentication was not completed
Many card transactions now involve extra verification, such as 3D Secure or bank app approval.
If the customer does not complete that step, WooCommerce may create the order but never receive a successful payment confirmation. The result is a pending or failed order.
This is not necessarily a technical fault. It may be a customer-side issue.
Look at the gateway transaction details. If the payment shows authentication required, abandoned authentication, failed authentication, or similar wording, the customer may need to place the order again.
5. Caching is interfering with checkout
Caching is great for speed, but checkout pages need special handling.
If your cart, checkout, account, or payment return pages are cached incorrectly, WooCommerce can behave strangely. Customers may see stale cart data, payment sessions may not match, or callbacks may not complete correctly.
At minimum, your caching setup should avoid caching:
- Cart pages.
- Checkout pages.
- My Account pages.
- Order pay pages.
- Thank-you or order received pages.
- WooCommerce AJAX and REST requests used by payment plugins.
Do not disable all caching permanently as a first reaction. That can make the store slower and create another problem. Instead, exclude the right WooCommerce pages and test again.
If checkout problems started after changing caching, CDN, firewall, or optimization settings, roll those changes back and retest.
6. SSL or mixed content is causing payment return issues
Payment gateways expect secure HTTPS checkout pages.
If your site has SSL problems, insecure resources, forced redirect loops, or mixed content warnings, payment flows can break in odd ways. A customer might pay successfully, but the browser or gateway may have trouble returning to the correct page.
Check that:
- Your whole checkout flow uses HTTPS.
- Your WordPress Address and Site Address are correct.
- There are no browser security warnings on cart or checkout.
- The payment return page loads without redirects looping.
- Your SSL certificate is valid and not expired.
If you recently installed SSL and things started breaking, this related guide may help: How to Fix Mixed Content Errors in WordPress After Installing SSL.
7. A plugin conflict is interrupting checkout
WooCommerce checkout depends on several moving parts: WooCommerce itself, the payment gateway plugin, shipping plugins, tax settings, theme templates, security tools, caching, email delivery, and sometimes subscription or membership plugins.
A conflict in any of those can stop the final status update.
Common conflict sources include:
- Outdated payment gateway plugins.
- Checkout field editor plugins.
- Security plugins that block REST API requests.
- Optimization plugins that delay or combine checkout scripts.
- Custom checkout templates in the theme.
- Subscription, deposit, invoice, or quote plugins that alter order flow.
Do not troubleshoot this on a busy live store if you can avoid it. Use a staging site, especially if you need to disable plugins or switch themes temporarily.
On a staging copy, test with only WooCommerce, your payment gateway, and a default theme or known-good theme setup. Then re-enable other plugins one at a time until the issue returns.
8. WooCommerce scheduled actions or WP-Cron are stuck
WooCommerce uses scheduled tasks for many background jobs. Some payment plugins also rely on scheduled actions to verify payments, retry webhooks, renew subscriptions, or clean up unpaid orders.
If scheduled actions are stuck, overdue, or failing repeatedly, pending orders may not resolve as expected.
In WordPress, check WooCommerce status and scheduled actions if available in your admin area. Look for failed or overdue actions related to payments, webhooks, subscriptions, or your payment gateway.
If your host disables or limits WP-Cron, you may need a proper server-side cron job. Check your hosting provider’s documentation before changing anything.
9. Inventory hold settings are cancelling or confusing orders
WooCommerce has inventory settings that can hold stock for unpaid orders for a set amount of time.
If the hold time is too short, customers using slower payment methods may run out of time. If it is too long, pending orders may reserve stock and make products look unavailable.
Check WooCommerce inventory settings and look for the stock hold option. The best setting depends on your store.
- For fast card payments, a shorter hold may be fine.
- For manual payment methods, a longer hold may make sense.
- For limited inventory, abandoned pending orders should not reserve stock forever.
Be careful with bulk cleanup plugins or automatic cancellation rules. They can accidentally cancel legitimate orders if your payment gateway confirmations are delayed.
How to fix existing pending orders safely
Once orders are already stuck, your goal is to sort them without creating duplicate shipments or angry customers.
If the payment succeeded
If the gateway confirms payment succeeded, you can manually update the order status in WooCommerce.
For physical products, that usually means changing the order to Processing. For virtual or downloadable products, Completed may be appropriate depending on your store setup.
Add a private order note with the payment confirmation details, such as the gateway name, transaction reference, date, and who verified it. Do not paste sensitive card data into the order notes.
Then check whether WooCommerce sends the correct customer email after the status change. If your customer already received a confusing failed payment email, send a short manual clarification.
If the payment failed
If the gateway says the payment failed, do not mark the order as paid.
You can send the customer a payment link if WooCommerce provides one for that order, or ask them to place the order again. Which option is better depends on your store, inventory, coupons, and shipping rules.
If the order contains limited-stock products, check stock levels before asking the customer to retry.
If there is no payment record
If the gateway has no matching transaction, the order was likely abandoned before payment.
You can leave it pending for a reasonable time, cancel it manually, or let WooCommerce cancel it based on your inventory hold settings.
Do not chase every abandoned checkout manually unless the order is large or from an important customer. Some pending orders are just normal e-commerce noise.
If you cannot tell what happened
If the gateway record is unclear, contact the gateway’s support through the official support channel.
Give them the order amount, time, customer email, and any transaction reference shown in WooCommerce. Avoid sending unnecessary personal information.
Until you know whether the payment succeeded, keep the WooCommerce order pending or on hold. Do not fulfill it as paid.
How to test whether the fix worked
After changing settings, test checkout carefully.
Create a low-cost test product or use the gateway’s sandbox mode if your payment provider supports it. Follow the official gateway documentation for current test card numbers, sandbox setup, and webhook testing.
A proper test should confirm:
- The customer can reach checkout.
- The payment form loads correctly.
- The order is created only once.
- The payment appears in the gateway dashboard.
- The WooCommerce order changes to the expected status.
- The customer receives the correct email.
- The store owner receives the correct order notification.
- Stock is reduced correctly.
- The thank-you page displays correctly.
Do not test only the happy path. Try a failed payment, an abandoned payment, and a successful payment if your gateway allows safe testing.
For a more detailed process, see How to Test Your WooCommerce Checkout Flow.
What not to do
Some “quick fixes” make the situation worse.
- Do not bulk change all pending orders to Processing. Some of them may be unpaid.
- Do not disable fraud checks just to reduce failed payments. That can invite chargebacks and bad orders.
- Do not delete pending orders before checking payment records. You may lose useful evidence.
- Do not test major checkout changes on a live store during busy hours. Use staging where possible.
- Do not assume order emails prove payment status. Email delivery and payment capture are separate systems.
- Do not paste full card details into WooCommerce notes or support tickets. You do not need them, and you should not store them.
Prevention checklist
Once the immediate problem is fixed, spend a little time preventing the next one.
- Keep WooCommerce and payment gateway plugins updated.
- Test checkout after major plugin, theme, caching, or hosting changes.
- Use a staging site before risky updates.
- Make sure webhooks point to the live site, not an old domain or staging copy.
- Confirm checkout, cart, and account pages are excluded from full-page caching.
- Keep SSL active and check for mixed content after migrations.
- Monitor WooCommerce logs after changing payment settings.
- Review pending orders regularly, especially after promotions or busy sales periods.
- Make sure order notification emails are reliably delivered.
- Keep backups before updating WooCommerce, payment plugins, or checkout-related extensions.
If your store takes real revenue every day, do not treat checkout as a “set it and forget it” feature. Payment plugins, gateway APIs, fraud rules, browser changes, and security tools all evolve.
When to bring in help
You can handle the simple cases yourself: abandoned orders, obvious failed payments, or one-off customer mistakes.
Bring in help when paid orders stay pending repeatedly, webhooks are failing, checkout breaks after updates, or you are not comfortable testing payment flows on a live store.
Ambrite provides WooCommerce maintenance for Canadian WordPress stores. Growth and Complete maintenance plans are built for WooCommerce stores, with WooCommerce health checks covering plugin compatibility and payment gateways. Complete also adds cart and checkout testing after major updates.
If hosting is part of the problem, Ambrite also offers Canadian cloud web hosting with LiteSpeed, NVMe SSD storage, SSL, backups, and WordPress staging included on every plan.
For one-off help, you can also contact Ambrite with the order symptoms, payment gateway name, recent changes, and whether customers were actually charged. That information makes troubleshooting much faster.
The short version
A WooCommerce order stuck as pending is not automatically a crisis. But if the customer paid and WooCommerce did not update, something in the payment confirmation chain needs attention.
Start with the gateway dashboard. Then check order notes, logs, webhook settings, SSL, caching, plugin conflicts, and scheduled actions.
Fix the root cause before manually changing lots of orders. Pending orders are easy to clean up once you know whether the money actually moved.
This article was written with the help of AI and reviewed by Ambrite. Pricing, features, and technical details may change, so always verify with official sources before making decisions.
Photo by Leeloo The First on Pexels
Was this article useful?
Related Articles
Setting up Moneris on your WooCommerce store feels like wrestling with government paperwork,...
Running a Canadian e-commerce store means dealing with Canada Post shipping rates, and if...
Your WooCommerce store is hemorrhaging money. Every second it takes to load costs you...
Your WooCommerce store crashed yesterday. The database is corrupted. Your last backup? Three...
Your WooCommerce store just notified you about a new update. Should you click that update...
