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:
-
Create Checkout Session:
POST /api/create-checkout-session -
Retrieve Subscription Details:
GET /api/subscriptions/:id -
Retrieve Usage:
GET /api/subscriptions/:id/usage -
Update Subscription (e.g., change plan):
POST /api/subscriptions/:id/update -
Cancel Subscription:
POST /api/subscriptions/:id/cancel -
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.