If PayPal has captured money but WooCommerce has no confirmation, compare the PayPal transaction with every notification path configured by the active integration. Modern integrations may use webhooks while older flows can still involve IPN; the repair depends on which mechanism owns the status change.
Confirm capture, currency and merchant account
Match transaction ID, amount, currency and merchant account to the WooCommerce order. A payment in another account or environment can look like a missing callback.
Check the notification endpoint history
Read webhook/IPN delivery status, HTTP response and retry history in PayPal. Confirm the URL points to the current production host and correct plugin endpoint.
Inspect WooCommerce order notes and logs
Find the last state WooCommerce recorded. Signature/authentication errors, unknown order IDs and duplicate notifications usually leave different traces.
Reconcile instead of forcing a status
If PayPal is definitively captured, use the gateway/plugin reconciliation path or a controlled WooCommerce API update with evidence. Do not create another charge.
Test refund/capture behaviour too
A repair is incomplete if new payments work but refunds, cancellations or delayed notifications remain broken.
Use safe payment tracing and the pending-order guide to align provider state with WooCommerce.
Manual reconciliation needs a written threshold
Define when support may intervene: for example, provider shows captured, amount/currency match, the WooCommerce order exists and no automated retry is still pending. Record who reconciled it and why. This prevents a second operator from later refunding or capturing the same transaction because the original decision was invisible.