Photo by rupixen.com on Unsplash

Connecting Stripe with AWS Serverless holy grail: Cognito, Lambda and DynamoDB

Ana Rossetto
Marzee
Published in
3 min readJul 12, 2023

--

This article was written by one of my colleagues: Adrian Dinis.

Payment gateways are the lifeline of any business, and it doesn’t take much to understand why; healthy businesses generate revenue by providing products and/or services to customers. These revenue streams cannot exist without a reliable and secure gateway that abstracts away all the pains of processing payment transactions.

When it comes to payments, a couple of services come to mind: Paypal, Stripe, Amazon Pay and Square (honourable mentions to Adyen and Braintree). We chose Stripe because it has a wonderful developer experience, the documentation is very clear, and its libraries are easy to use and integrate.

If you’ve read some of our blogposts in the past, you’ll know that here at Marzee, we make great use of the Serverless model; the “Impulso” project, like many others, is powered by the AWS Serverless holy grail: Cognito, Lambda and DynamoDB, which map to Authentication, Compute and Storage, respectively, having this model in mind, we needed a payment gateway that could easily integrate with it, Stripe proved to fulfil that role very well.

There are three parts to this problem:

  • Integrating Stripe into our authentication/authorization system
  • Syncing the latest payment/billing information from Stripe
  • Providing billing management to users

In Stripe’s API, the most important resource is the “Customer”, we had to fit this into AWS Cognito’s lifecycle to create a 1:1 mapping, luckily Cognito has this thing called “Triggers” that allow you to hook custom code (Lambda functions) to different events, this was a lifesaver because it meant that we could create and associate a Stripe “Customer” as soon as a user registered, thus solving part one of the problems which is identity, from now on whenever a user is logged in we can be certain that there is an attribute of that user we can use to identify him within Stripe’s system.

Next, we move on to authorization, the second part of the problem; this is one of the most crucial aspects for this platform in specific, as this is a subscription-based system, so we need to make sure users don’t get access to paid features if their subscriptions expire, and of course, guarantee that they do get access for as long as their subscription is active, I think we can all agree that there’s nothing worse in terms of user experience as a buggy system that works well enough to take your money… but not to provide you with the services you paid for, the horror!

Luckily, Stripe has got our back; all we need to do is create a special endpoint on our side, and then we let Stripe know of its existence; this is commonly known as a “webhook” (or “web callback”) from that point forward every time some important event happens within Stripe’s system we get notified, isn’t that great? The event could be a new subscription, a failed subscription renewal, a chargeback, and many more types, depending on what you’re trying to achieve, the possibilities are endless.

Last but not least, after a user registers, they most certainly need a portal to manage their payment details and initiate the billing cycle if they desire to, and let me tell you, we were delighted to find out that not only does Stripe provide a ready to use and customizable hosted UI but also makes it a breeze to setup, and that’s how we saved ourselves multiple hours designing and implementing a billing UI, which ultimately made the project cheaper for our client, textbook example of a win-win situation.

In the end, we were thrilled with the technical solution. It’s amazing how much value we added to the “Impulso” project by leveraging Stripe, especially considering that this integration wasn’t part of the original design when we started the project; it was genuinely surprising how straightforward it was to integrate with the existing system.

Originally posted on Marzee’s blog: https://marzee.co/blog/connecting-stripe-with-aws

--

--

Ana Rossetto
Marzee
Editor for

Head of Business at Marzee. I talk about sales in tech.