Payments stuck in Pending status after the customer has entered their details and clicked Pay are almost always caused by missing or misconfigured webhooks. This guide gives you a step-by-step diagnostic checklist.

Step 1 — Check Your Credentials

The most common mistake is entering credentials from the wrong environment (test keys in live mode or vice versa).

  1. Go to SmartPay → Settings → Payment Gateways.
  2. Check that Test Mode matches the credentials entered:
    • Test Mode ON → Test credentials should be filled in.
    • Test Mode OFF → Live credentials should be filled in.
  3. Retype or re-paste the credentials to eliminate a copy-paste error.

Step 2 — Verify Webhook Configuration

Payment gateways confirm payments via webhooks. If your site cannot receive them, payments stay Pending.

Stripe

  1. Log in to your Stripe Dashboard → Developers → Webhooks.
  2. Confirm an endpoint exists with URL https://yoursite.com/?smartpay-listener=stripe.
  3. Click the endpoint and check the Recent Deliveries tab. Were any webhooks delivered? If you see delivery attempts with a non-200 response code, your site returned an error.
  4. Confirm the Webhook Signing Secret in SmartPay matches the one shown in the endpoint details.

PayPal

  1. Log in to your PayPal account → Account Settings → Notifications → Instant Payment Notifications.
  2. Confirm IPN is enabled and the notification URL is your site's URL.
  3. SmartPay handles IPN automatically at /?smartpay-listener=paypal. Confirm this URL is accessible publicly.

Step 3 — Check Test Mode

In Test Mode, real card numbers will not work and no real payment is processed. Confirm you are using the correct test credentials and test card numbers.

For Stripe test mode, use card 4242 4242 4242 4242 with any future expiry.

Step 4 — Check the Debug Log

  1. Enable define('SMARTPAY_DEBUG', true); in wp-config.php.
  2. Attempt a payment.
  3. Go to SmartPay → Support → Debug Log and look for ERROR entries related to the payment.

The log often shows the exact error message returned by the gateway, which tells you what went wrong.

Step 5 — Confirm Your Site Is Publicly Accessible

If your site is on a local development server (localhost, .local domains, Ngrok-style tunnels), gateways cannot send webhooks to it. Payments will always stay Pending on local environments unless you use a webhook forwarding tool.

For local development use the Test Payment gateway — it never needs webhooks and always completes immediately.

Step 6 — Check for Plugin Conflicts

Some security plugins (Wordfence, iThemes Security) block webhook requests that look like external POST requests with no session cookie. Add your gateway's IP range to the firewall whitelist, or add the webhook URL as an exception.

Confirming Payment in the Gateway Dashboard

If SmartPay shows Pending but you want to confirm whether the payment was actually charged:

  • Stripe: Check Payments in your Stripe Dashboard. If the charge shows as Succeeded in Stripe but Pending in SmartPay, it's a webhook issue.
  • PayPal: Check your PayPal transaction history. Completed PayPal transactions that are Pending in SmartPay indicate an IPN delivery failure.
Important: Never issue a refund for a payment based solely on SmartPay showing Pending. Check the gateway dashboard first — the charge may have succeeded and the customer was billed.