My answers below :
- How do you handle those people whose card declines or who don’t pay, etc?
Using Stripe billing portal, you define in the Stripe dashboard the rules that will apply. In case of payment failure, you define the number of retries, than the moment when the subscription will be definitively aborted/canceled. You can also shutdown the subscription as soon as a payment fails, if I’m correct.
Stripe webhooks will send you all this information, also available in the Stripe dashboard. So you can either manage the problem within your app, or from the Stripe dashboard.
In case of payment card expiration, the subscriber will be notified by Stripe, so that he can update his payment info.
- How do you handle those people who cancel their plan?
When subscribers cancel they plan, you have 2 options : unsubscribe the subscriber asap and refund (it’s automatic if I’m correct), or unsubscribe the subscribe (ie stop the subscribed service) at the end of the billing cycle. I’ve chosen the second option, so I don’t manage refund for the unsubscribed period of the billing cycle. When the subscriber cancel, I receive a first webhook event, and at the end of the billing cycle I receive another webhook event (and in my bubble app, I remove this subscriber of the active subscribers).
- How do you handle free trials if you do them? Is that something that can be done through Stripe or on Bubble?
In the first version of my app, I manage the trial period in the Stripe dashboard. For each plan, you can define a trial period after which the subscriber pay if he didn’t canceled.
But now, I’m managing the trial period in the Bubble app : I let the new subscriber access the app services for 1 month (I set a field in the User datatype for the trial period and end of trial period). If the customer subscribe during the trial period, I clean the “trial” field in my DB and the subscription, subscription updates billing cycle are then managed by Stripe (+webhooks to keep my app notified). If the customer doesn’t subscribe, a Workflow clean in the DB the “trial” fields for this customer at the end of the trial period, and the user has then no more access to the paid services.
Using the Stripe billing portal make the subscriptions and billing things very easy to manage. You can count on Stripe to do the job, instead of trying to implement the logic by yourself in your app.
In your app, the important part of the Stripe webhooks implementation, to track all important events you need. For subscriptions and billing, you provide 2 buttons with easy workflows, one for subscriptions (one button for each of your plans), and one button to redirect the customer to the Stripe billing portal.
I also use Stripe Connect for checkout. And same thing, Stripe manage payment infos and so on, so that I don’t have to manage and keep financial / critical data in my DB. No worry be happy and make money, Stripe manage what you need and don’t want to implement on your own