The money left the customer, but the order never caught up
Payment gateway faults are the most stressful kind of store problem, because they involve someone else’s money. A customer messages to say they were charged and got no confirmation. The order shows “Pending payment” even though the gateway dashboard says the payment succeeded. Or the payment window opens, the customer enters their UPI ID or card, and it fails with a message that tells nobody anything useful.
These faults sit between two systems: your WooCommerce store and the gateway’s servers. Each side can look fine on its own, which is why they are easy to misread. This page sits under our overview of WordPress errors and fixes and covers the payment step specifically. If customers cannot even reach the payment step, because Place order does nothing or shipping options are missing, our checkout troubleshooting page is the better starting point.
How a gateway payment actually travels
Most of the confusion goes away once you know the route. With Razorpay, PayU, Cashfree, CCAvenue, PayPal, Stripe and most others, a WooCommerce payment goes roughly like this:
- The customer places the order. WooCommerce creates it with the status Pending payment.
- The gateway plugin sends the customer to the gateway’s payment page or opens a payment window on your site.
- The customer pays. The gateway records the payment on its side.
- The gateway tells your store the result, either by sending the customer back to a return URL, by calling your site directly in the background (a webhook or notification), or both.
- The plugin checks that message, marks the order Processing or Completed, reduces stock and WooCommerce sends the emails.
Step four is where most problems live. If the customer closes the tab before the redirect and the background notification never reaches your site, the gateway shows a captured payment while your store still thinks the customer has not paid. Nothing is technically “broken” on either screen. The message between them was lost.
Common symptoms and what they usually mean
Paid in the gateway, Pending payment in WooCommerce
The notification from the gateway did not arrive or was rejected. Typical reasons: the webhook URL in the gateway dashboard points to an old domain or to http instead of https, the webhook secret in the plugin does not match the one in the dashboard, or a firewall, security plugin or CDN is blocking the gateway’s server from reaching your site. A site that moved hosts or changed its address recently is a strong suspect, and our post on errors that appear after a migration explains why so many settings point at the old address afterwards.
Every payment fails immediately
Often a key problem. Test keys entered in live mode or the reverse, keys regenerated in the dashboard but never updated in the plugin, or an account that the gateway has not fully activated yet. Gateways also reject payments for reasons on their side, such as a payment method not enabled for your account. The gateway dashboard usually shows a reason for each failed attempt, and it is worth reading before changing anything on the website.
The payment window does not open
When the button to pay does nothing, a script has usually failed to load. Script optimisation in a caching plugin, a content security rule, or a theme conflict can all cause it. This one overlaps with checkout faults, and the browser console normally shows the error.
Errors after a WooCommerce update
Gateway plugins have to keep up with WooCommerce. An outdated plugin may stop working after a WooCommerce update, or the other way round. Stores that switched on High-Performance Order Storage (under WooCommerce, then Settings, then Advanced, then Features) should check that the gateway plugin is listed as compatible. When an update is involved, the approach in our page on a site that broke after an update applies here too.
Server connection errors
The store also has to talk to the gateway, for example to create the order on the gateway’s side or to process a refund. If the server’s outgoing connections fail, you may see cURL errors in WooCommerce’s logs. Our post on cURL errors in WordPress explains the common ones, which usually come down to outdated certificates on the server, a firewall or a timeout.
Duplicate orders or double charges
A customer who does not see confirmation often tries again. You then get two orders, sometimes two payments. The fix is to find out why the first confirmation did not arrive, then refund the duplicate through the gateway dashboard or the plugin, depending on what your plugin supports.
What you can check before calling anyone
Take a backup of the site and database first and keep a copy off the server. Then look, without changing anything yet:
- Compare both sides. Pick one affected order. Find the same payment in the gateway dashboard by amount, time or order number. Note what each side says.
- Check the order notes. Open the order in WooCommerce. Gateway plugins usually add notes when they receive a response. No note at all suggests the message never arrived.
- Read the plugin’s log. Many gateway plugins have a debug or logging option in their settings. Logs appear under WooCommerce, then Status, then Logs.
- Confirm the mode and keys. Is the plugin in test or live mode, and do the keys match the dashboard you are looking at?
- Check the webhook address. In the gateway dashboard, compare the webhook URL with your current domain, including https and www.
- Ask your host. If you recently changed security settings or added a firewall or CDN, ask whether requests from outside are being blocked.
Do not mark unpaid orders as Processing by hand until you have confirmed each payment in the gateway dashboard. It is easy to ship an order that was never paid.
How we handle gateway faults
Message us on WhatsApp or through the contact form with the gateway name, a screenshot of one affected order and, if you can, the matching entry from the gateway dashboard. After a first look we reply with our honest reading of where the payment is getting lost and a realistic starting point. Money arriving without matching orders is something we handle as urgent.
We take a backup before touching anything. Then we trace one real payment end to end: the order on your store, the record on the gateway side, the notification settings and the logs in between. Where possible we reproduce the problem on a staging copy using the gateway’s test mode, so no real customer is charged while we work. Once the cause is fixed, we run test payments and at least one small live payment you agree to, then confirm the order status, stock and emails all update. If order emails are part of the problem, we treat that separately, because it often has nothing to do with the gateway. That is what our email delivery fix page covers.
Afterwards we list any orders that may still need checking by hand, so you can match them against the gateway dashboard. We do not have access to your gateway’s money and we do not make refunds for you unless you ask us to and give us that access. Store owners outside India are welcome too: the team works on Indian time, and payment for our work can be made by PayPal or Wise.
This sits alongside our general WordPress bug fixing service. If you want someone to watch the store regularly rather than only when it breaks, see our WooCommerce support for store owners.
Choosing or changing a gateway
Sometimes the honest answer is that the gateway plugin has been poorly maintained, or the gateway itself does not suit the store. Choosing one is a different question from fixing one. If you are weighing options, our guide to picking a payment gateway as a small business in India compares the common choices, and setting up a gateway from scratch explains the steps. We can help you switch, but we will tell you first whether the current one can simply be fixed.