This post will help you troubleshoot common issues that can appear at checkout when using Paid Memberships Pro with Stripe. These tips apply if you’re seeing any of the following:
- There are JavaScript errors on the page. Please contact the webmaster.
- Please complete all required fields. (Even though you did fill out all fields.)
- Class
'Stripe\PaymentMethod'not found - A 500 error or timeout at checkout
- Membership not assigned after a successful payment
Table of contents
- Why is this happening?
- Make sure your Stripe connect is valid.
- Make sure that other plugins or themes are not causing JavaScript issues at checkout.
- Make sure all files are loading over HTTPS/SSL properly.
- Make sure you don’t have conflicting PMPro Add Ons or gists.
- Make sure other plugins aren’t loading an older version of the Stripe API library.
- Make sure other plugins are not loading a version of Stripe’s JavaScript everywhere.
- Make sure webhooks are set up and working.
- Getting 500 error?
- Need more help?
Why is this happening?
In almost all cases, what is happening is that the Stripe JavaScript code is unable to “talk” through the Stripe API to validate the user’s credit card and process the checkout.
The reason you sometimes get the “complete all required fields” error is that we weren’t able to catch the real error with the Stripe integration and so tried to submit the form without the updated credit card token that Paid Memberships Pro is expecting for Stripe checkouts. So to PMPro, it looks like some fields were left empty. But really JavaScript broke down and so those hidden fields were never updated.
In some other cases, another plugin is loading a different version of the Stripe API library before Paid Memberships Pro does. To avoid issues, PMPro will try to use the version of the Stripe API that is already loaded, but if that version doesn’t support a feature that PMPro is using, it will throw an error.
So, how can you fix this? Here are the things to look into to fix this issue.
Make sure your Stripe connect is valid.
The most common cause of checkout failures is a misconfigured gateway connection.
To use Stripe Connect (recommended), navigate to Memberships > Settings > Payment Gateway and confirm that your account shows as connected. If it doesn’t, click Connect with Stripe to re-authenticate.
If you’re using API keys: Double-check that your Publishable Key and Secret Key have no extra spaces or characters. Make sure Gateway Environment is set to Live/Production — unless you’re intentionally testing with a Stripe test account.
Make sure that other plugins or themes are not causing JavaScript issues at checkout.
Open your browser’s developer tools on the checkout page and look at the Console tab for errors (Chrome: `Ctrl+Shift+J` / `Cmd+Option+J`). Red errors often point directly to the plugin, theme, or file causing the conflict.
Common culprits:
- A theme loading scripts that conflict with Stripe’s JS
- A caching or minification plugin that has combined and broken scripts
- A security plugin blocking external script sources like `js.stripe.com`
Make sure all files are loading over HTTPS/SSL properly.
If your checkout page is loaded over HTTPS but tries to load a source file over HTTP, your browser may stop that file from loading. If it’s a JavaScript file that a plugin is expecting to be loaded, errors can occur which will keep Stripe from working. You can find these errors using the Chrome JavaScript console (Ctrl+Shift+J).
Enabling the “Extra HTTPS URL Filter” option on the payment settings will clean up some of these issues. If not, you can use the WordPress HTTPS plugin, just be sure to set the “Force SSL” setting in the PMPro payment settings to “No” and to check the “Force SSL” option on the PMPro checkout and update billing pages so that plugin knows to control HTTPs for those pages.
If you are still having issues, you sometimes will have to edit the plugin or theme to use https:// in the URLs being loaded or wrap URLs using the site_url() function in WordPress.
Make sure you don’t have conflicting PMPro Add Ons or gists.
A common scenario: a required User Field is added to a section of the form that’s hidden for logged-in users. The field isn’t shown, but it’s still required — so the form can’t submit.
To fix this, either:
- Move the field to a section that’s always visible, or
- Conditionally mark the field as not required when the user is already logged in
Make sure other plugins aren’t loading an older version of the Stripe API library.
To confirm this, temporarily deactivate other plugins one by one (especially any that deal with payments, WooCommerce Stripe, donations, etc.) and test checkout after each deactivation. When the error disappears, you’ve found the conflict.
The fix is usually to update the other plugin. If an update isn’t available and you can’t disable it, you’ll need help from that plugin’s developer to resolve the library conflict.
Make sure other plugins are not loading a version of Stripe’s JavaScript everywhere.
Paid Memberships Pro is very careful to only load the stripe.js file on frontend pages used by our plugin that require the code. There are other plugins you may be using that enqueue the Stripe JavaScript on all pages in your site. If another plugin has loaded a version of the Stripe JavaScript on the Membership Checkout page, you will get an error and checkout will not function.
To debug this, you can inspect the source of the Membership Checkout page (and Membership Billing page) to see if there are multiple stripe.js-like files in the page’s “Resources”.
Alternatively, here is a code recipe that will check all enqueued JS files on the PMPro pages and dequeue anything with the term “stripe” in the named file except the PMPro file. This is a nuclear approach to resolve the issue and only necessary in cases where the other plugin author would not update their code or you cannot resolve the issue any other way.
You can also target and remove Stripe code that is being globally loaded by a specific plugin. The recipe below targets and removes the Stripe files loaded by the Charitable WordPress plugin. If you are using another plugin and find that they are loading Stripe on all pages in your site, you’ll need to find out the function name in their plugin to properly update and use the recipe below.
Make sure webhooks are set up and working.
If checkout appears to succeed (you see a confirmation screen or Stripe shows the charge) but the membership is never assigned, the issue is almost always a webhook problem.
Navigate to Memberships > Settings > Payment Gateway > Stripe and scroll down to the Stripe Webhook panel. You’ll see:
- Webhook Status: This should say “Your webhook is enabled.” If not, click Create Webhook or Rebuild Webhook.
- Webhook History: This shows whether recent webhook events are being received. A “Last sent [date]” status means Stripe sent the event but your site didn’t receive it.
Common reasons webhooks fail:
- A security plugin is blocking the webhook URL
- Cloudflare or a CDN firewall is blocking Stripe’s IPs
- The webhook URL isn’t publicly accessible (e.g., site is in maintenance mode or behind HTTP auth)
You can verify your webhook URL is accessible by copying it from the Stripe settings panel and pasting it into a new browser tab. You should see a short plain-text response — if you see a login page, an error, or a blank page, something is blocking it. For a full webhook troubleshooting walkthrough, see: How to Read Stripe Webhook Information (and Fix Missing Events)
Getting 500 error?
A 500 error or timeout at checkout usually means Stripe can’t communicate with your server, or your server can’t complete the request.
Things to check:
- Security plugins (Wordfence, iThemes Security, etc.): Make sure they’re not blocking outbound requests to Stripe’s API or blocking inbound webhook requests
- Hosting firewall: Ask your host to confirm that connections to `api.stripe.com` are allowed
- Cloudflare: if you’re using Cloudflare’s WAF or firewall rules, make sure Stripe’s IP ranges are whitelisted
Need more help?
If you are still having trouble, our team can help. Open a support ticket and include:
- The exact error message you’re seeing
- Your PMPro version and active plugin list
- Whether the issue affects all users or specific ones
- Any relevant browser console errors
Join our free community of membership site creators.
PMPro offers a community Slack space for members, and you’re invited. Learn more about the community’s free benefits and get a link to join Slack now.
Get Support From Our Team of Experts
For more help with this PMPro feature, check out our Support Page with three ways to get support as a free or premium member.

