stripe

package
v1.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 2, 2025 License: MIT Imports: 18 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type CartLineItem

type CartLineItem struct {
	PriceID     string            `json:"priceId"`
	Resource    string            `json:"resource,omitempty"` // Optional: backend resource ID for indexing
	Quantity    int64             `json:"quantity"`
	Description string            `json:"description,omitempty"`
	Metadata    map[string]string `json:"metadata,omitempty"`
}

CartLineItem represents a single item in the cart with quantity.

type CartService

type CartService struct {
	// contains filtered or unexported fields
}

CartService handles multi-item Stripe checkout sessions. This is a separate service that extends (not modifies) the base Stripe client.

func NewCartService

func NewCartService(cfg stripeConfig, store storage.Store, notifier callbacks.Notifier, coupons CouponRepository, metricsCollector *metrics.Metrics) *CartService

NewCartService creates a cart service for multi-item checkouts.

func (*CartService) CreateCartCheckoutSession

func (c *CartService) CreateCartCheckoutSession(ctx context.Context, req CreateCartSessionRequest) (*stripeapi.CheckoutSession, error)

CreateCartCheckoutSession creates a Stripe checkout session with multiple line items. This is separate from the existing CreateCheckoutSession to avoid breaking existing code.

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client wraps stripe-go operations used by the server.

func NewClient

func NewClient(cfg config.StripeConfig, store storage.Store, notifier callbacks.Notifier, coupons CouponRepository, metricsCollector *metrics.Metrics) *Client

NewClient sets up stripe-go with the provided credentials.

func (*Client) CancelSubscription

func (c *Client) CancelSubscription(ctx context.Context, stripeSubID string, atPeriodEnd bool) error

CancelSubscription cancels a Stripe subscription.

func (*Client) CreateBillingPortalSession

func (c *Client) CreateBillingPortalSession(ctx context.Context, customerID, returnURL string) (*stripeapi.BillingPortalSession, error)

CreateBillingPortalSession creates a Stripe billing portal session for self-service.

func (*Client) CreateCheckoutSession

func (c *Client) CreateCheckoutSession(ctx context.Context, req CreateSessionRequest) (*stripeapi.CheckoutSession, error)

CreateCheckoutSession builds a Stripe Checkout session and persists minimal metadata.

func (*Client) CreateSubscriptionCheckout

func (c *Client) CreateSubscriptionCheckout(ctx context.Context, req CreateSubscriptionRequest) (*stripeapi.CheckoutSession, error)

CreateSubscriptionCheckout creates a Stripe Checkout session for a subscription.

func (*Client) GetSubscription

func (c *Client) GetSubscription(ctx context.Context, stripeSubID string) (*stripeapi.Subscription, error)

GetSubscription retrieves a Stripe subscription.

func (*Client) HandleCompletion

func (c *Client) HandleCompletion(ctx context.Context, event WebhookEvent) error

HandleCompletion handles webhook completion and triggers payment succeeded callback.

func (*Client) HandleSubscriptionWebhook

func (c *Client) HandleSubscriptionWebhook(ctx context.Context, event *SubscriptionWebhookEvent, subRepo SubscriptionRepository) error

HandleSubscriptionWebhook processes subscription webhook events and updates storage.

func (*Client) ParseSubscriptionWebhook

func (c *Client) ParseSubscriptionWebhook(payload []byte, eventType string) (*SubscriptionWebhookEvent, error)

ParseSubscriptionWebhook parses subscription-related webhook events.

func (*Client) ParseWebhook

func (c *Client) ParseWebhook(ctx context.Context, payload []byte, signature string) (WebhookEvent, error)

ParseWebhook validates event signatures and normalises the payload.

func (*Client) PreviewProration

func (c *Client) PreviewProration(ctx context.Context, subscriptionID, newPriceID string) (*ProrationPreview, error)

PreviewProration calculates the proration amount for a plan change without applying it.

func (*Client) ReactivateSubscription

func (c *Client) ReactivateSubscription(ctx context.Context, stripeSubID string) (*stripeapi.Subscription, error)

ReactivateSubscription reactivates a cancelled Stripe subscription (if still within period).

func (*Client) UpdateSubscription

func (c *Client) UpdateSubscription(ctx context.Context, req UpdateSubscriptionRequest) (*UpdateSubscriptionResult, error)

UpdateSubscription updates a Stripe subscription (for plan changes/upgrades/downgrades).

type CouponRepository

type CouponRepository interface {
	IncrementUsage(ctx context.Context, code string) error
}

CouponRepository defines the minimal interface needed for coupon tracking.

type CreateCartSessionRequest

type CreateCartSessionRequest struct {
	Items          []CartLineItem    `json:"items"`
	CustomerEmail  string            `json:"customerEmail,omitempty"`
	Metadata       map[string]string `json:"metadata,omitempty"`
	SuccessURL     string            `json:"successUrl,omitempty"`
	CancelURL      string            `json:"cancelUrl,omitempty"`
	CouponCode     string            `json:"couponCode,omitempty"`     // NEW: Coupon code applied
	StripeCouponID string            `json:"stripeCouponId,omitempty"` // NEW: Optional Stripe coupon ID
	OriginalAmount int64             `json:"originalAmount,omitempty"` // NEW: Original total before discount
	DiscountAmount int64             `json:"discountAmount,omitempty"` // NEW: Total discount applied
}

CreateCartSessionRequest captures multi-item checkout metadata.

type CreateSessionRequest

type CreateSessionRequest struct {
	ResourceID     string
	AmountCents    int64
	Currency       string
	PriceID        string
	CustomerEmail  string
	Metadata       map[string]string
	SuccessURL     string
	CancelURL      string
	Description    string
	CouponCode     string // NEW: Coupon code applied (for metadata tracking)
	OriginalAmount int64  // NEW: Original price before discount (for metadata tracking)
	DiscountAmount int64  // NEW: Discount amount applied (for metadata tracking)
	StripeCouponID string // NEW: Optional Stripe coupon ID (if synced to Stripe)
}

CreateSessionRequest captures checkout metadata.

type CreateSubscriptionRequest

type CreateSubscriptionRequest struct {
	ProductID     string
	PriceID       string // Stripe recurring price ID
	CustomerEmail string
	Metadata      map[string]string
	SuccessURL    string
	CancelURL     string
	TrialDays     int
}

CreateSubscriptionRequest contains parameters for creating a subscription checkout.

type ProrationPreview

type ProrationPreview struct {
	ProrationAmount int64     // Amount in smallest currency unit (cents for USD)
	Currency        string    // Currency code (e.g., "usd")
	EffectiveDate   time.Time // When the change would take effect
	InvoiceTotal    int64     // Total invoice amount after proration
}

ProrationPreview contains the preview of proration for a plan change.

type SubscriptionRepository

type SubscriptionRepository interface {
	GetByStripeSubscriptionID(ctx context.Context, stripeSubID string) (subscriptions.Subscription, error)
	Create(ctx context.Context, sub subscriptions.Subscription) error
	Update(ctx context.Context, sub subscriptions.Subscription) error
	UpdateStatus(ctx context.Context, id string, status subscriptions.Status) error
	ExtendPeriod(ctx context.Context, id string, newStart, newEnd time.Time) error
}

SubscriptionRepository provides access to subscription storage.

type SubscriptionWebhookEvent

type SubscriptionWebhookEvent struct {
	Type                 string
	StripeSubscriptionID string
	StripeCustomerID     string
	ProductID            string
	Status               string
	CurrentPeriodStart   time.Time
	CurrentPeriodEnd     time.Time
	CancelAtPeriodEnd    bool
	CancelledAt          *time.Time
	Metadata             map[string]string
	// Plan change fields
	PriceID         string // Current price ID
	BillingPeriod   string // e.g., "month", "year"
	BillingInterval int    // Interval count
}

SubscriptionWebhookEvent represents a parsed subscription webhook event.

type UpdateSubscriptionRequest

type UpdateSubscriptionRequest struct {
	SubscriptionID    string
	NewPriceID        string // New price ID for plan change
	ProrationBehavior string // "create_prorations", "none", "always_invoice"
	Metadata          map[string]string
}

UpdateSubscriptionRequest contains parameters for updating a Stripe subscription.

type UpdateSubscriptionResult

type UpdateSubscriptionResult struct {
	Subscription    *stripeapi.Subscription
	ProrationAmount int64 // Proration amount in cents (positive = charge, negative = credit)
	EffectiveDate   int64 // Unix timestamp of when change takes effect
}

UpdateSubscriptionResult contains the result of a subscription update.

type WebhookEvent

type WebhookEvent struct {
	Type        string
	SessionID   string
	ResourceID  string
	Customer    string
	Metadata    map[string]string
	AmountTotal int64
	Currency    string
}

WebhookEvent wraps the subset of event types we care about.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL