This post will help to troubleshoot a few common issues that can crop up at checkout when using Paid Memberships Pro with Stripe. Specifically, these troubleshooting and debugging tips will help if you receive one of the following errors at checkout:
- Please complete all required fields. (Even though you did fill out all fields.)
Table of contents
- Why is this happening?
- Make sure that your payment settings are correct.
- 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.
- Getting 500 error?
- Need more help?
Why is this happening?
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 that your payment settings are correct.
In particular, make sure that the “secret key” and “publishable key” don’t have any extra whitespace or strange characters in front or back. And make sure that the “gateway environment” is set to “Live/Production” unless you are using a Stripe test account.
Make sure all files are loading over HTTPS/SSL properly.
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.
In particular the “complete all required fields” error can come up if say you are using the Capture Name and Address for Free Levels Add On, but have the “Show Billing Address” setting set to “No” for Stripe.
The setting will hide the address field, but the addon will still be expecting it. (Note: We did release version .3 of this addon to address a post PMPro v1.8 issue when using this addon with PayPal. Be sure to upgrade if you are using this addon.)
Another situation that can come up is if you have a field added using the Register Helper Add On that is added to the “after_password” area or another area that isn’t present when a logged in user is checking out. The field won’t be shown at checkout, but the code will still “require” it. You can make sure your required fields are added in a way that they will always be visible at checkout (use the checkout_boxes area) or add code like this to any field that shouldn’t be required for existing members logged in.
Make sure other plugins aren’t loading an older version of the Stripe API library.
If another plugin has loaded a version of the Stripe API library that doesn’t support the features PMPro is trying to use, you may get an error about a missing class or method and checkouts won’t work.
To debug this, you can update the loadStripeLibrary method of the Stripe Gateway Class in PMPro to output the location of the file that is already loading the Stripe library. Here is an alternative version of that method to drop in temporarily:
Once you know what other plugin is causing the conflict, you can disable it if it’s not needed or attempt to fix the conflict. If there is an update for the other plugin, that might fix the issue. If it still persists, you need to tell the other plugin to NOT load their version of the library on the PMPro checkout page. The code for this would be different for every plugin, but here is a gist that simply tells PMPro to load the Stripe API Library as early as possible. This will usually fix this issue. In some cases, it will also break the other plugin that is using Stripe and you will need to debug and fix that.
Paid Memberships Pro is very careful to only load the
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.
Getting 500 error?
Stripe needs to be able to communicate with your server for everything to work correctly.
So if you’re getting a timeout or even a 500 error, it could be that you’re accidentally blocking Stripe’s webhook. So here’s what you can look at.
If a security plugin, make sure it’s not blocking any connections from Stripe. Check with your hosting provider to ensure they allow Stripe without blocking their IPs.
If you’re running a service like Cloudflare, you might need to add an allow rule to the firewall with Stripe’s IPs.
Need more help?
If you are still having trouble, we can help you in our member support forums. Sign up for a PMPro Membership, then post a new thread to the member forums stating the issue.