Two major issues with s2member Pro since recent upgrade

Ever since the latest s2member version was rolled out, we’ve experienced these two major issues:

  1. Invalid parameters to Stripe; please contact the site owner (this happens on random customer orders - not all of them thank God). But it’s enough that we’ve lost quite a lot in revenue lately - especially Black Friday when customers were unable to complete the order.

  2. Duplicate charges + subscription creation - every now and then, a customer will be double charged and have two identical subscriptions created in Stripe. If we cancel one of them, it sends an EOT to s2member and we have to manually correct it. Customers have to be refunded the duplicate charge and are unhappy.

Can you please look into these issues? It looks like other people are experiencing the same problem so we know it’s not our setup causing the problem.


1 Like

Hi Donovan.

Thank you for the feedback. Yes, I have seen another report on that. Working on it. I’m sorry I haven’t been able to release an improvement yet, but it’s coming along.

You can go back to the previous release and keep using the modal in the meantime, if that works for you. It won’t support SCA, but depending on where you are and your business, it may not be an issue. Just letting you know in case that’s an option for you.

When you get the duplicates, what did the customer do that would cause it? it’s not something that happens on its own, so I’d like to know what actions would trigger that duplicate in your case. Any additional details will be very helpful.

Thanks! :slight_smile:

1 Like

The invalid parameters message, from my tests, seems to happen only when the submitted card fails or is invalid for some reason, so it’s a payment that didn’t and wouldn’t go through anyway. The problem there is that then the person doesn’t know he can try another card.

Working on this to improve it, to get the more descriptive message from Stripe instead of this generic one.

Hi. Any progress on this?

Is there an s2member update planned soon?

The cancellation issue with duplicate payments is only happening with Stripe for me and it’s happening every time a customer upgrades their subscription. This may be an issue with Stripe or the way s2member communicates with Stripe. I noticed that they updated their API around the same time I started noticing this happening. Stripe now stacks the subscriptions without canceling the first even though the cancellation is recorded in Stripe’s logs.

I am facing a similar problem with Stripe:

User starts as “free member” -> purchases “level 1” with monthly subscription -> upgrades to “level 2” which is onetime/non recurring

What happens now: the “level 1”-subscription is not terminanted in Stripe, the User pays for TWO memberships now… :frowning:

I am also having an issue with Stripe. When the first payment fails, it stacks the value up on to a subsequent payment. So e.g. my subscription is 25 per year, first one fails and second succeeds and customer is charged 50.
It is causing a headache for me and for my customers and does not look professional.

OK I believe I have figured out what is happening with stacked payments. The customers account balance is being updated in the first failure, but when it fails and a repeat payment attempted, the account balance is then increased by another same amount.
I’m guessing S2Member is asking for payment for account balance.

Here’s a release candidate that addresses the invalid parameters problem.

Thanks for the new details for the duplicate charges.

So you’re using a Billing Modification pro-form? Can I see the shortcodes for your pro-forms?

This one seems different from the others. Those are for subscription changes that leave the previous one active. Yours seems to be a failed signup that made the charge, and is charged again on successful signup, correct?

Can you give me the steps to reproduce the duplicate charges? Is it with a failed payment, or a failed registration? Does it happen every time for you or only sometimes? And can I see the page where you have the pro-form?

Thanks! I look forward to your replies :slight_smile:


I have had to downgrade to a previous version of S2Member to stop the issue. It didn’t happen every time but it happened on more than one occasion.

The issue appears to be that the first payment fails, Stripe reports back reason for fail as “cancellation_reason”: “failed_invoice”


Has these issues been addressed in the latest update? I’m still using an older version currently so don’t want to update if they aren’t fixed.

Hi James.

The duplicate charges is not addressed in the last release. The invalid parameters error is.

Hi Christian,

Thanks for the update. I will hold off updating for now as it was causing quite an issue with managing my site. Not having any problems with the previous version.

Best regards

1 Like

v200301 addresses the subscription cancellation problem, so that should take care of @mfussell and @Mardermolch cases.

I still can’t reproduce the other ones, where the user is charged the same amount twice as @jiberson described, or double subscription creation as @donogameel reported.

I tried everything I could think of so far and with different test cards that will fail before using a good one, but I don’t get the duplicate successful charge yet. If you guys could give me a step-by-step to reproduce it, that’d be great.

I look forward to your updates. :slight_smile:

I am having the same “double subscription creation” as @donogameel has reported. Here are some extra details in case they help:

  1. Around 0.5% of new subscriptions are these duplicates.
  2. The duplicate is often created 30 seconds to one minute after the original. However, sometimes it takes a few minutes, longest I have seen was 15 minutes later a duplicate was added.
  3. It’s not always just one duplicate, sometimes it’s 3 or 4.
  4. Duplicates always share the same customer ID, and are created when the user registers on our site. We have a 30 day free trial configured, so what is happening is 1-4 subscriptions get created for a user within the span of a few minutes. At first they aren’t billed anything, but 30 days later all those subscriptions will become due.
  5. If the user cancels using the Pro Form we have configured, it will only cancel one of the subscriptions. The orphaned ones will persist, hidden away from everyone’s sight.

I am wondering if this is happening due to the user clicking “Refresh” while checking out/signing up. Or, perhaps the server timing out during that same time. We are using this shortcode for signup: [s2Member-Pro-Stripe-Form level="1" template="s2member/stripe-checkout-form.php" ccaps="" desc="" cc="USD" custom="" ta="0" tp="30" tt="D" ra="4.95" rp="1" rt="M" rr="1" coupon="" accept_coupons="0" default_country_code="US" captcha="0" success="" /] (Note: I removed the description and redirect success URL from this copy/paste) Perhaps either my server is timing out, or there is some difficulty in communication between my server and Stripe. Do you think one of these could be possiblities?

I have been examining the S2 code. In the three places that I see calls to wp_create_user(), it appears that the call to c_ws_plugin__s2member_pro_stripe_utilities::create_customer_subscription() precedes it. Thus, it makes sense to me that if the server encounters some error after creating the subscription, but before creating the user, that an orphaned subscription will be created. When the user refreshes a minute or two later, a new subscription would be created. Does this seem like a likely possibility to you?

If there is any more info I can give you, please ask! I am happy to help. Since this only affects 1 out of ~200 signups I am not sure exactly the steps needed to reproduce. But, it’s clearly an ongoing issue, even on the latest version of S2.

@clavaque I forgot to tag you in my last post. I responded with some more info on this glitch, as you requested. Is there anything else I can provide?

This is a decent-sized problem for us, due to the high volume of subscriptions we get. I suspect it’s a problem for others too, but goes undetected. In our case, only 1 in ~200 users are double-billed, and only a handful of those have noticed it. 95% of these people are evidently not checking their credit card statements, and some of them have been double-billed for many months.

I looked into trying to fix it myself. I was thinking there are two possible ways to fix:

  1. Have the s2Member Stripe Signup form query the Stripe API to see if there is already a subscription for this customerid and subscription, prior to creating a new one. Give that the Stripe CustomID should have just been created moments before, it’s safe to assume that any matching subscription was created by s2.
  2. Store a Stripe idempotent token during signup, and use this token when creating a subscription. This seems like it would be a handy feature for s2Member in general.

The problem I have is that any fix we craft would have to directly modify the plugin. I see no way to implement this using actions and filters. Obviously that’s a non-starter as we wish to continue receiving updates.

In the mean time, we are creating a spreadsheet to track these subscriptions and cancel them, hopefully before the customer notices. It’s powered by the Stripe CSV export feature. Unfortunately there is no easy way in the Stripe admin to query for users with a double subscription, so the spreadsheet is a must.

1 Like