What this problem looks like
The official WooCommerce Stripe plugin uses Payment Intents and may show Apple Pay or Google Pay buttons. Each requires domain verification in Stripe and HTTPS on your store.
Orders stuck on pending after a successful charge almost always mean webhooks never reached your site or the signing secret is wrong.
Payment Element does not render
Open browser console on checkout. Content Security Policy, ad blockers, or minified JavaScript can block js.stripe.com. Disable JS combine in cache plugins and whitelist Stripe domains in CSP headers.
- Invalid publishable key for the current mode.
- Checkout not using HTTPS.
- Another plugin loading an old Stripe.js version.
Webhook configuration
Stripe sends charge.succeeded and payment_intent.succeeded events. The endpoint URL must be reachable and return 200 quickly. Security plugins blocking REST routes are a common UK hosting issue.
Example endpoint path (varies by plugin version):
https://yourshop.co.uk/wp-json/wc-stripe/v1/webhook
SCA and 3D Secure in the UK and EU
Strong Customer Authentication requires extra steps for many cards. Failed SCA shows as a decline in Stripe logs, not a WooCommerce bug. Test with Stripe test cards that trigger authentication challenges.
Express checkout and wallet buttons
Apple Pay requires domain verification in Stripe and Safari testing. Google Pay needs compatible browsers and correct merchant settings. Disable express buttons temporarily if standard card checkout works but wallets fail.
Currency and capture settings
Stripe account default currency must support your WooCommerce currency. Authorize-only modes leave orders on-hold until capture in Stripe dashboard or admin. Align capture settings with how you fulfil orders.
When to stop DIY and hire help
Stripe plus subscriptions, deposits, or multi-currency plugins needs careful integration. BugShield resolves webhook failures and checkout JavaScript conflicts on Stripe-powered UK shops.