Back to Blog
Tutorial

Building a Subscription Billing System

A comprehensive guide to implementing subscription billing with Stripe, including webhooks, trials, and plan management.

Mike Johnson

Mike Johnson

Jan 10, 202412 min read
Building a Subscription Billing System

Introduction

Subscription billing is the backbone of most SaaS businesses. In this guide, we'll build a complete billing system using Stripe.

Prerequisites

  • Stripe account

  • Next.js application

  • Database for storing subscription data
  • Setting Up Stripe

    Install the Stripe SDK

    ``bash
    npm install stripe @stripe/stripe-js
    `

    Configure Environment Variables

    `bash
    STRIPE_SECRET_KEY=sk_test_...
    STRIPE_PUBLISHABLE_KEY=pk_test_...
    STRIPE_WEBHOOK_SECRET=whsec_...
    `

    Creating Products and Prices

    Set up your pricing in the Stripe Dashboard or via API:

    `typescript
    const product = await stripe.products.create({
    name: 'Pro Plan',
    description: 'Full access to all features',
    });

    const price = await stripe.prices.create({
    product: product.id,
    unit_amount: 4900, // $49.00
    currency: 'usd',
    recurring: { interval: 'month' },
    });
    `

    Implementing Checkout

    Create a checkout session to handle subscriptions:

    `typescript
    const session = await stripe.checkout.sessions.create({
    mode: 'subscription',
    payment_method_types: ['card'],
    line_items: [{ price: priceId, quantity: 1 }],
    success_url:
    ${origin}/success?session_id={CHECKOUT_SESSION_ID},
    cancel_url:
    ${origin}/pricing,
    });
    `

    Handling Webhooks

    Webhooks are crucial for keeping your database in sync:

    `typescript
    switch (event.type) {
    case 'customer.subscription.created':
    // Handle new subscription
    break;
    case 'customer.subscription.updated':
    // Handle subscription changes
    break;
    case 'invoice.payment_failed':
    // Handle failed payments
    break;
    }
    ``

    Conclusion

    A robust billing system requires careful attention to edge cases and proper webhook handling.

    Stripe
    Billing
    Subscriptions
    Payments
    Mike Johnson

    Written by

    Mike Johnson

    Sharing insights on building modern SaaS applications.