Documentation
¶
Index ¶
- type CartLineItem
- type CartService
- type Client
- func (c *Client) CancelSubscription(ctx context.Context, stripeSubID string, atPeriodEnd bool) error
- func (c *Client) CreateBillingPortalSession(ctx context.Context, customerID, returnURL string) (*stripeapi.BillingPortalSession, error)
- func (c *Client) CreateCheckoutSession(ctx context.Context, req CreateSessionRequest) (*stripeapi.CheckoutSession, error)
- func (c *Client) CreateSubscriptionCheckout(ctx context.Context, req CreateSubscriptionRequest) (*stripeapi.CheckoutSession, error)
- func (c *Client) GetSubscription(ctx context.Context, stripeSubID string) (*stripeapi.Subscription, error)
- func (c *Client) HandleCompletion(ctx context.Context, event WebhookEvent) error
- func (c *Client) HandleSubscriptionWebhook(ctx context.Context, event *SubscriptionWebhookEvent, ...) error
- func (c *Client) ParseSubscriptionWebhook(payload []byte, eventType string) (*SubscriptionWebhookEvent, error)
- func (c *Client) ParseWebhook(ctx context.Context, payload []byte, signature string) (WebhookEvent, error)
- func (c *Client) PreviewProration(ctx context.Context, subscriptionID, newPriceID string) (*ProrationPreview, error)
- func (c *Client) ReactivateSubscription(ctx context.Context, stripeSubID string) (*stripeapi.Subscription, error)
- func (c *Client) UpdateSubscription(ctx context.Context, req UpdateSubscriptionRequest) (*UpdateSubscriptionResult, error)
- type CouponRepository
- type CreateCartSessionRequest
- type CreateSessionRequest
- type CreateSubscriptionRequest
- type ProrationPreview
- type SubscriptionRepository
- type SubscriptionWebhookEvent
- type UpdateSubscriptionRequest
- type UpdateSubscriptionResult
- type WebhookEvent
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 ¶
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.