Skip to main content

Stripe Handling for Licenses

Subscription Creation

params := &stripe.CheckoutSessionParams{
Customer: stripe.String("cus_123"),
Mode: stripe.String(string(stripe.CheckoutSessionModeSubscription)),
LineItems: []*stripe.CheckoutSessionLineItemParams{
{
Price: stripe.String("price_123"),
Quantity: stripe.Int64(1),
},
},
SuccessURL: stripe.String("https://example.com/success?session_id={CHECKOUT_SESSION_ID}"),
CancelURL: stripe.String("https://example.com/cancel"),
}
session, err := checkoutsession.New(params)

Webhook Handling

  • Implement a webhook handler for checkout.session.completed
  • In the handler, update the subscription to add it to a group:
params := &stripe.SubscriptionParams{
BillingCycleAnchor: stripe.Int64(time.Now().AddDate(0, 1, 5).Unix()),
ProrationBehavior: stripe.String(string(stripe.SubscriptionProrationBehaviorNone)),
TransferData: &stripe.SubscriptionTransferDataParams{
SubscriptionGroup: stripe.String("sug_123"),
},
}
subscription, err := sub.Update(subscriptionID, params)

Metered Billing

Use Usage Records API to report usage

params := &stripe.UsageRecordParams{
SubscriptionItem: stripe.String("si_123"),
Quantity: stripe.Int64(10),
Timestamp: stripe.Int64(time.Now().Unix()),
}
usageRecord, err := usagerecord.New(params)

Invoice Grouping

Use Subscription Groups API to manage groups

params := &stripe.SubscriptionGroupParams{
Customer: stripe.String("cus_123"),
Subscription: stripe.String("sub_123"),
}
group, err := subscriptiongroup.New(params)

Retrieving Subscription and Usage Information

Use Subscriptions API and Subscription Items API

subscription, err := sub.Get("sub_123", nil)
subscriptionItem, err := subscriptionitem.Get("si_123", nil)

Other

API endpoints to provide to your frontend:

  1. Create Checkout Session: POST /api/create-checkout-session

  2. Retrieve Subscription Details: GET /api/subscriptions/:id

  3. Retrieve Usage: GET /api/subscriptions/:id/usage

  4. Update Subscription (e.g., change plan): POST /api/subscriptions/:id/update

  5. Cancel Subscription: POST /api/subscriptions/:id/cancel

  6. Retrieve Invoices: GET /api/invoices

Subscription details:

Plan name and price Billing cycle (monthly/yearly) Next billing date Status (active, past due, canceled) Usage information (for metered billing):

Current usage for the billing period Usage limit (if applicable) Estimated cost based on current usage Invoice history:

Invoice dates Total amounts Payment status Payment method information:

Last 4 digits of card Expiration date Upcoming invoice preview:

Estimated total for next billing cycle Remember to handle error cases, implement proper authentication and authorization, and follow Stripe's best practices for security.