Why WooCommerce Orders Stay 'Pending Payment' in SA (IPN Fix)

August 23, 2026

Every South African ecommerce store manager has encountered the "Ghost Order" syndrome: a buyer completes their payment on PayFast, Ozow, or Peach Payments, their bank deducts the money, but WooCommerce leaves the order status indefinitely on "Pending Payment" or automatically marks it as "Cancelled" after the 60-minute inventory hold expires.

This leaves your warehouse confused about whether to pack the parcel, your inventory counts inaccurate, and your customers emailing support asking why they haven't received an order confirmation.

Here is the exact technical reason this happens on South African hosting setups and how to fix it permanently.

What Causes Payment Gateways to Miss Order Confirmations in SA?

In modern ecommerce architecture, payment gateways do not rely on the customer's browser to tell your store that money was paid. Browsers can crash, mobile data connections drop mid-redirect on local networks (Vodacom, MTN, Telkom), or users close their tab the second their banking app shows a green checkmark.

Instead, the gateway uses an Instant Transaction Notification (ITN) or Instant Payment Notification (IPN). The payment processor sends an automated server-to-server HTTP request directly to your WooCommerce server.

When an order stays on "Pending Payment", it means your WordPress server failed to acknowledge this ITN callback with a

200 OK
response.


4 Reasons Your Server Rejects Payment Callbacks

1. The Security Plugin 403 Challenge

Plugins like Wordfence, All In One WP Security, or Cloudflare Bot Fight Mode frequently flag incoming server requests from IP addresses owned by PayFast or Ozow as automated bot attacks. When your server returns a

403 Forbidden
or a CAPTCHA challenge page to the gateway, the gateway assumes your server is offline.

2. Force HTTPS Redirect Loops

If your SSL certificate is configured improperly (for example, Cloudflare Flexible SSL instead of Full/Strict), incoming HTTP POST requests to

http://yourdomain.co.za/?wc-api=WC_Gateway_PayFast
get converted to
301 Moved Permanently
redirects to
https://
. Most gateway IPN daemons do not follow 301 redirects and drop payload data upon redirection.

3. Server Timeout from Heavy Third-Party Hooks

When WooCommerce receives a valid payment callback, it triggers several PHP hooks: stock reduction, customer email generation, PDF invoice creation, and courier integration. If your server is running on underpowered shared hosting, this chain of actions can exceed the gateway's 5-second timeout window.

4. Nonce / Cookie Verification Errors

Some aggressive page caching plugins (WP Rocket, LiteSpeed Cache, W3 Total Cache) mistakenly cache dynamic endpoint queries (

wc-api
,
wc-ajax
), preventing the fresh cryptographic validation of payment signatures.


How to Fix Stuck WooCommerce Payment Callbacks

Step 1: Check Your Gateway Log Files in WooCommerce

Navigate to WooCommerce -> Status -> Logs. In the top-right dropdown, select the log file matching your gateway (e.g.

payfast-2026-08-23.log
or
yoco-2026-08-23.log
) and click "View". Look for lines mentioning
ITN received
,
Signature verification failed
, or
Could not connect to host
.

Step 2: Add Firewall Exclusions for Gateway IPs and URIs

In your firewall plugin or Cloudflare dashboard, add an explicit rule allowing any incoming traffic where the request URI contains

wc-api
or where the user-agent matches known gateway listeners. Ensure security modules do not strip query parameters.

Step 3: Exclude Checkout & API Endpoints from Caching

In your caching plugin settings, add the following URL paths to the "Never Cache" / "Cache Exclusion" list:

  • /checkout/
  • /cart/
  • /my-account/
  • /?wc-api=*
  • /wc-api/*

Step 4: Ensure SSL Strict Configuration

Verify in your WordPress general settings that your WordPress Address (URL) and Site Address (URL) both explicitly start with

https://
. In Cloudflare, set your SSL/TLS encryption mode to Full (Strict).


Summary

When your payment gateways and ITN callbacks are properly wired, orders immediately transition to "Processing", inventory automatically deducts, and automated WhatsApp or email confirmations trigger without human intervention.

If you are dealing with persistent signature mismatch errors, broken checkout flows, or lost orders across your South African store, get an emergency fix to ensure you never lose a paying customer to a technical glitch.