At Medherd, we create a platform for medical practitioners and businesses to stay ahead of what's going on in the digital health space. Keeping them updated and providing a collaborative environment to discover and review products and most importantly share ideas.
In doing that, we aim to get paid. This post is a guide on how we handle payments at Medherd using Stripe in a robust and secure manner, and we hope this can help you navigate the large Stripe documentation.
Medherd is built Serverlessly on Google Cloud Platform, with Cloud Functions at the heart of our architecture. All the endpoints used in our payment setup are created with Cloud Functions.
First, we had to decide on how our "Plans" would be structured.
A product can have one price. This is the most common implementation you'll find in SAAS payment structures. This is also what we use at Medherd.
A product can also have multiple prices. A use case for this would be a product with an annual, monthly and weekly variation.
Stripe allows you to create 2 types of plans.
Recurring Plans (Subscription) - These are subscription based plans, used to collect payment on a weekly, monthly or annual basis depending on your billing structure
One-Time Plans - These are plans that are to be paid for at once. Similar to products sold on an e-commerce platform.
This is the first and most important step. When a user creates an account on our platform, we create a customer account for the user on Stripe, making use of the Customers API.
Ideally, for every user on our platform, there is a customer account on Stripe.
Using the SetupIntents API, we create an "intent" to "setup" a user for a recurring billing. After the intent has been setup, we can collect payment details using the Stripe client-side SDK, and then create the subscriptions on our platform.
Using the PaymentIntents API (similar to the SetupIntents API), we create an "intent" to receive "payments", and then complete this process using the
confirmCardPayment method directly on the client device, making use of the client-side SDK.
Stripe Webhooks allow us to respond to events we care about. This is done on the Stripe dashboard.
We create an endpoint which we add to Stripe, and select the events we would like to be notified of.
Using this approach, we stay ahead of everything going on with payments and are able to respond to activities that have occurred on Stripe, such as
This enables us to be act accordingly to activities that have occurred in our platform, such as recording a transaction in our database, notifing the user through email or in-app or in terrible situations retry the billing process.
We also have more uses which are not covered thoroughly in this post, but are pretty simple to implement.
This guide also doubles as a personal documentation to know how we have implemented payments. Expect this to be updated as time goes on.
You can also checkout the following Stripe tutorials to see how Stripe suggests to make use of the API.