Start free trial

PayPal not working on WooCommerce checkout: causes and fixes

PayPal missing at checkout, buttons not loading, payments failing or orders stuck on Pending payment? Find the cause and fix it, step by step.

  • 7 min read
  • 6 steps
  • Updated

This guide is for the free WooCommerce PayPal Payments plugin, the official way to take PayPal in WooCommerce. Most PayPal problems fall into five groups. Pick the one you’re seeing.

What goes wrong with PayPal?

Pick what you or your customers see. We’ll point you to the right steps.

Choose a stage above.

PayPal doesn’t appear at checkout

  • PayPal Payments isn’t connected to your PayPal account
  • It’s connected in sandbox (test) mode on a live shop
  • Your store’s currency isn’t one PayPal accepts

Check it’s connected Missing payment method guide

The PayPal buttons don’t show or stay blank

  • Script optimisation or caching delays PayPal’s script
  • A security header or ad blocker blocks paypal.com
  • A JavaScript error from another plugin

Buttons not loading

The customer sees an error and can’t pay

  • PayPal or the bank declined it
  • A currency your PayPal account isn’t set to accept
  • The checkout was left open too long

What the message means Read the PayPal log

The customer paid, but the order stays on Pending payment

  • PayPal’s confirmation (webhook) can’t reach your store
  • A firewall or security plugin blocks it
  • The site address changed after PayPal was connected

Fix the webhooks

Pay Later, cards, Apple Pay or Google Pay don’t show

  • Not offered in your country, currency or for that order amount
  • Not switched on in PayPal Payments’ settings
  • Your PayPal account isn’t approved for it yet

Extra payment options

Check PayPal is connected

Go to WooCommerceSettingsPayments. If PayPal shows Action needed and a Complete setup button, it isn’t connected to a PayPal account yet, so it can’t appear at checkout.

WooCommerce payment providers list with PayPal marked Action needed and a Complete setup button
PayPal installed but not set up. Screenshot from our test store.

Press Complete setup. PayPal Payments opens its welcome screen; Activate PayPal Payments walks you through signing in to your PayPal business account.

PayPal Payments welcome screen with the Activate PayPal Payments button
The screen before PayPal is connected. Screenshot from our test store.

PayPal buttons don’t load

The buttons come from PayPal’s own script (www.paypal.com/sdk/js). If that script is delayed, combined with others or blocked, the space for the buttons stays empty.

  • Exclude the cart and checkout pages from “delay JavaScript”, “combine” and “minify” settings in your optimisation or caching plugin.
  • Clear every cache: plugin, host and CDN.
  • If you or a security plugin set a Content Security Policy, it must allow PayPal’s domains.
  • Test in a private window with ad blockers off: some block PayPal for that shopper only.

The browser console on the checkout page (F12 → Console) shows a red error naming the plugin or the blocked PayPal address.

ElementsConsoleNetworkExample
JQMIGRATE: Migrate is installed, version 3.4.1
✕ Uncaught TypeError: Cannot read properties of undefined (reading 'mount')
  at checkout.js:212 /wp-content/plugins/example-payments/assets/checkout.js
[Violation] 'load' handler took 182ms

What PayPal’s error messages mean

These are the messages PayPal Payments shows shoppers. The real reason is in the PayPal log (next step).

MessageWhat it meansWhat to do
Something went wrong. Please try again or choose another payment source.A general error; the log has the detail.Read the PayPal log for that time.
Payment provider declined the payment, please use a different payment method.PayPal refused the payment, often its own risk checks.Usually nothing on your side. Many at once: check your PayPal account for limits or notices.
Your payment could not be processed because your bank declined this transaction.The customer’s bank said no.Nothing on your side; the customer can use another card.
Payment session expired. Please try again.The payment was started too long ago.Fine once in a while. If it’s frequent, make sure the checkout page isn’t cached.
The payee has not yet set up appropriate receiving preferences for their account.The payment is in a currency your PayPal account isn’t set to accept.In your PayPal account’s payment settings, allow payments in that currency.

Read the PayPal log

In PayPal Payments’ settings, open the Troubleshooting section and switch on Logging. Then make a test payment (or wait for the next failure) and look under WooCommerceStatusLogs for the woocommerce-paypal-payments log. Find the time of the failed payment: PayPal’s reply there names the real reason.

Orders stuck on Pending payment

After a payment, PayPal sends a message to your store (a webhook) to confirm it. If that message can’t get through, the customer has paid but the order can stay on Pending payment. PayPal Payments receives these messages at this address on your site:

PayPal webhook address (use your own domain)
https://yourstore.com/wp-json/paypal/v1/incoming
  • In PayPal Payments’ Troubleshooting section, the Webhooks list shows what your store is subscribed to.
  • Simulate webhooks sends a test message and tells you whether it arrived.
  • Resubscribe webhooks sets them up again. Use it after moving to a new domain or switching to https.
  • If the test doesn’t arrive, allow that address in your firewall or security plugin, and check the site isn’t in maintenance mode.

For orders that are already paid but still pending, follow our steps to fix a paid order safely.

Pay Later, cards, Apple Pay and Google Pay

These options only appear when all of the below are true, so a missing button doesn’t always mean a fault.

Know next time, before your customers do

PayPal problems often start with something else changing: an optimisation plugin update, a new firewall rule, a domain move. Customers rarely report a missing PayPal button; they leave or pay another way.

Cart Lookout places a real test order on your store every 2 hours and after every update, then deletes it. Your customers don’t see it and no emails go out. If checkout fails twice in a row, you get an email with the step that broke, a screenshot and the change made just before it.

Cart Lookout store page listing recent plugin updates, each followed by a passing test order
Example: a store page with demo data. Every update is followed by a test order.
See how it works From $15/month · 14-day free trial

Still stuck? Email hello@cartlookout.com and a developer will take a look. More fix guides