WooCommerce Order Stuck Pending Payment After Successful Customer Payment: How to Fix It
Quick Answer
When a payment provider shows that a customer was charged successfully but the WooCommerce order remains stuck in Pending payment, the store has not received or processed the payment confirmation. Start by checking the Order notes panel in WooCommerce > Orders and reviewing the gateway transaction logs in WooCommerce > Status > Logs. Common causes include unconfigured or blocked webhooks/notification URLs, gateway authentication or credential mismatches, or a PHP fatal error on your site during the order status transition.

Understanding Order Statuses in WooCommerce
In WooCommerce, order statuses reflect exactly where a transaction sits within the checkout, payment, and fulfillment lifecycle:
- Pending payment: The order has been created and received, but payment has not yet been confirmed in WooCommerce.
- Processing: Payment has been successfully received, stock has been reduced, and the order is awaiting fulfillment. All orders require manual processing to reach Completed unless every product in the order is marked as both virtual and downloadable.
- On hold: The order is awaiting manual payment confirmation (such as Direct Bank Transfer / BACS) or delayed verification.
When an online gateway captures funds successfully, it sends a confirmation response, webhook, or Instant Payment Notification (IPN) back to your site, which triggers WooCommerce to move the order from Pending payment to Processing (or Completed for virtual/downloadable products). If that notification fails to arrive or cannot be processed, the order remains in Pending payment.
Before Making Any Status Changes
Warning: Never change an order status to Processing or Completed solely based on a customer message. Manually updating an unpaid order can trigger automated shipment or digital product delivery for uncaptured funds. Always verify the transaction ID, settlement amount, and captured state directly inside your payment gateway dashboard first.
Step 1: Check the Order Notes for Clues
Navigate to WooCommerce > Orders, select the stuck order, and inspect the Order notes box in the right column:
- Gateway Response Present: If notes show an authorization notice or gateway message without moving to Processing, a subsequent capture notification or background callback may have failed.
- No Payment Notes: If the order contains only creation notes, the payment provider never communicated the payment result to WooCommerce, or the connection timed out before reaching the store.
Step 2: Inspect Gateway and Site Error Logs
To inspect communication failures between your payment gateway and your site:
- Go to WooCommerce > Status > Logs.
- Use the log dropdown menu to select recent logs for your specific payment gateway (for example, Stripe, PayPal, or Square debug logs) and fatal error logs (
fatal-errors). - Look for HTTP
400client errors (often invalid notification URLs or malformed payloads),401/403authentication failures (invalid webhook secrets or credentials), or PHP fatal errors occurring at the timestamp of the transaction.
Step 3: Verify Gateway Webhooks and Notification URLs
Most modern payment extensions rely on asynchronous webhooks or IPNs to notify WooCommerce when a transaction completes off-site or completes asynchronous verification.
- Log in to your payment gateway portal (e.g., Stripe Dashboard, PayPal Developer Dashboard, or merchant portal) and review the Webhooks or Event Logs section.
- Verify that the webhook URL matches your store's live HTTPS endpoint as specified in your payment gateway plugin's documentation.
- Check the HTTP response status code sent back by your server. If the payment gateway recorded an HTTP status other than
200 OK(such as403 Forbidden,404 Not Found,500 Internal Server Error, or504 Gateway Timeout), WooCommerce could not process the notification.
If you are troubleshooting WooCommerce core outgoing webhooks rather than incoming payment gateway notifications, review our guide on WooCommerce Webhooks Automatically Disabled After Delivery Failures.
Step 4: Check for Plugin Conflicts and Staging Security Blocks
If the gateway records show that webhook delivery returned a 403 or 500 error:
- Security and Firewall Rules: Web Application Firewalls (WAFs) or security plugins might block automated POST requests to gateway notification endpoints. Inspect security logs to ensure legitimate gateway IP ranges and user-agents are permitted.
- Maintenance Mode & HTTP Basic Auth: Staging sites or stores behind password-protection plugins block incoming external webhook payloads.
- Plugin and Theme Conflicts: A custom script or third-party plugin hooking into WooCommerce status change hooks (such as
woocommerce_payment_completeorwoocommerce_order_status_changed) can crash the execution before the database status update finishes. Test plugins in a staging environment to isolate conflicts.
Step 5: Safely Reconcile Existing Orders
Once you identify and resolve the gateway communication issue, reconcile any historical orders that remain in Pending payment:
- Confirm the captured payment status and transaction ID inside your payment processor merchant portal.
- Open the affected order in WooCommerce > Orders.
- Change the order status dropdown to Processing (or the status appropriate for your store workflow) and click Update.
- Add a private note in the Order notes panel documenting the gateway transaction ID and verification date for auditing purposes.