Common payment failures

Webhooks, sandbox/live mixups, currency mismatch, and paid-but-not-premium. Reseller enable is a separate toggle.

Common payment failures

Paid at the provider, not premium on the site

Almost always webhooks / IPN:

  • URL not registered
  • Wrong signing secret
  • Firewall / HTTPS problem reaching your VPS
  • Sandbox payment with live webhook (or the reverse)

Check the provider's delivery log and Admin → Payment transactions.

Sandbox / live mixup

Test keys with sandbox off, or live keys with sandbox on. Align the toggle with the keys (Paddle, Authorize.net, NOWPayments, Lemon test mode, Coinbase test mode).

Currency mismatch

Site Currency not enabled on the merchant account, or plan prices in a different currency than checkout.

Double charges / retries

Customer refreshed checkout; provider retried. Reconcile in the provider dashboard and your transactions list - do not refund twice blindly.

Reseller top-up missing a gateway

Enable for reseller is separate from the main enable toggle (reseller defaults on when unset).

Gateway-specific traps

  • Paddle: client-side token pasted as API key; Default payment link not /premium/paddle
  • Lemon Squeezy: product ID instead of variant ID
  • NOWPayments: return URL without IPN
  • WebMoney: bad LMI_HASH / prerequest amount mismatch
  • Authorize.net: missing public client key / Accept.js domain
  • BTCPay: coins not enabled on the store

Related