I'm trying to ascertain the best way to go about subscription modifications during a billing cycle. Let's assume we have a monthly billing cycle for users. User A is currently charged $20 per month. The user add's additional services during the billing cycle increasing that charge to $40 per month. They did so half way through the billing cycle therefore an upgrade fee of $10 should be taken now as the services will commissioned now. If relevant this would be done using the Stripe API but it's more a matter of optimising the procedure.
What is the best way to go about this?
1. Take a payment now with the saved card details
Directly charge for the upgrade fee now calculating the number of days away from the normal billing cycle to now. Modify the subscription to reflect the new fee of $40 for when the next subscription payment is due. Pro: payment for the difference between now and the next billing cycle has been taken. Con: That amount could potentially be so small if say 2 days away from the billing cycle that the payment would fall below the minimum threshold / the fees render the payment negative.
2. Create a new subscription that reflects only the changes
The user now has two subscriptions each of $20 with different billing cycles utilising the same card details. Pro: all was correctly paid for before the services were commissioned. Con: the user now has potentially multiple subscriptions particularly if they continue adding multiple services.
Other
Any other suggestions.
Side note
In order to streamline the user experience our original idea was to use the first option above but the user may add multiple services at the same time. In the interest of keeping everything simple we intended to take a payment for each modification they made but this could potential invalid their saved card if they made a dozen simultaneous purchases. We therefore conclude it would be to group all changes they intend to make before submitting.
Hopefully there is a fairly standard way to go about. Best,
You should refer to this doc for upgrading or downgrading a subscription.
Set proration_behavior
to always_invoice
to immediately generate a invoice for your customer to pay the difference. Alternatively, leave it to the default value create_prorations
and bill the customer the difference in the next billing cycle. I guess this is the behaviour that you want to achieve?
You should try both and see which one works best for your business. About the payment failures, Stripe will automatically perform payment retries if the initial payment fails, read this doc for more.