Stripe Subscription Cancellation at renewal causes early EOT demotion

For Stripe subscriptions, when renewal time hits, the draft invoice is created 1 hour before payment is done.

Sometimes a user cancels during that 1 hour:

In this case what happened was that the payment goes through half an hour after they had cancelled. This is unexpected for the user. What was even more unexpected was that the user was demoted as though they had successfully cancelled before payment, just five minutes after the payment:
“Demoted by s2Member: Mon Sep 14, 2020 2:00 pm UTC”
The timeline looks like this:
12:54 - Invoice drafted
13:34 - User cancels subscription
13:55 - Invoice is paid
14:00 - User is demoted.

I think this may be an edge case that is not being handled properly.

Here is another case where the same thing happened:

Draft invoice is created, user cancels, invoice is paid, user still gets demoted.

It’s a double whammy of being charged another month after cancelling, then not even getting the benefit of the extra month.

wow, that’s really edge case… Thanks for catching it!

So the invoice got drafted by Stripe because the charge time was about to come up in the subscription, user cancels the subscription, but now the invoice is charged while the subscription is ended. Is that correct?

I will have to see if Stripe lets me see if the user has an invoice already created for the subscription being cancelled, so it can be removed too…

Thank you for your attention on this issue!

So the invoice got drafted by Stripe because the charge time was about to come up in the subscription, user cancels the subscription, but now the invoice is charged while the subscription is ended. Is that correct?

Yes, that is correct.

I don’t know if this is helpful, but this item in the Stripe docs talks about how subscription renewal creates a draft invoice one hour before paying the invoice: https://stripe.com/docs/billing/invoices/subscription#subscription-renewal

1 Like

Correct. That’s exactly what’s happening.

What is incorrect from Stripe, in my opinion, is that having cancelled the subscription, doesn’t prevent the invoice from getting charged. I may bring it up with the Stripe developers, but in the meantime I will see if I can just make s2 removed it with the cancellation.

Like you said, very unusual scenario, so not urgent to address, but still worth preventing.

@clavaque Thank you for looking into this, I hope you can find a solution! Although only small percentage are affected, when it happens it is high impact because of how bad it feels from the client’s perspective.

1 Like

Here is another case:

A similar, but different case.

Unlike the other cases, the customer canceled the subscription AFTER the 1 hour window. The first payment attempt failed. Even though the subscription was cancelled, the invoice was not voided, and more payment attempts were made. Similar to the other cases, the EOT still happened even though payment was pending.

I got another case like the above, where someone cancels AFTER the 1 hour window, and AFTER the first payment attempt fails. Even though the subscription was cancelled, the invoice was not voided, and more payment attempts were made. Similar to the other cases, the EOT still happened even though payment was pending.

In this case, a subsequent payment attempt succeeded. So the customer is charged for another cycle, even though they already cancelled. And they don’t even get the benefit of access for the paid-for, unwanted, cycle because of the EOT

Thank you so much for the updates with extra info. I’m looking into this and hope to get back to you with more insight soon. :slight_smile:

Thank you Cristian!

1 Like