package lib import ( "encoding/json" "os" "github.com/stripe/stripe-go/v78" "github.com/stripe/stripe-go/v78/checkout/session" "github.com/stripe/stripe-go/v78/webhook" ) func init() { stripe.Key = os.Getenv("STRIPE_SECRET_KEY") } type Stripe_Line_Item struct { Name string Amount int64 Quantity int64 } func Create_Checkout_Session(line_items []Stripe_Line_Item, success_url, cancel_url string) (*stripe.CheckoutSession, error) { params := &stripe.CheckoutSessionParams{ PaymentMethodTypes: stripe.StringSlice([]string{"card"}), Mode: stripe.String(string(stripe.CheckoutSessionModePayment)), SuccessURL: stripe.String(success_url), CancelURL: stripe.String(cancel_url), ShippingAddressCollection: &stripe.CheckoutSessionShippingAddressCollectionParams{ AllowedCountries: stripe.StringSlice([]string{"US"}), }, } for _, item := range line_items { params.LineItems = append(params.LineItems, &stripe.CheckoutSessionLineItemParams{ PriceData: &stripe.CheckoutSessionLineItemPriceDataParams{ Currency: stripe.String("usd"), ProductData: &stripe.CheckoutSessionLineItemPriceDataProductDataParams{ Name: stripe.String(item.Name), }, UnitAmount: stripe.Int64(item.Amount), }, Quantity: stripe.Int64(item.Quantity), }) } return session.New(params) } func Verify_Webhook(payload []byte, sig_header string) (map[string]interface{}, error) { webhook_secret := os.Getenv("STRIPE_WEBHOOK_SECRET") if webhook_secret == "" { var event map[string]interface{} if err := json.Unmarshal(payload, &event); err != nil { return nil, err } return event, nil } event, err := webhook.ConstructEvent(payload, sig_header, webhook_secret) if err != nil { return nil, err } var result map[string]interface{} if err := json.Unmarshal(event.Data.Raw, &result); err != nil { return nil, err } return map[string]interface{}{ "type": event.Type, "data": map[string]interface{}{ "object": result, }, }, nil }