Create methods to create a Stripe customer and subscribe to a plan
This commit is contained in:
parent
0b35136d3f
commit
fd1d1808f0
6
go.mod
6
go.mod
@ -3,13 +3,11 @@ module myapp
|
|||||||
go 1.22.5
|
go 1.22.5
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
github.com/alexedwards/scs/v2 v2.8.0
|
||||||
github.com/go-chi/chi/v5 v5.1.0
|
github.com/go-chi/chi/v5 v5.1.0
|
||||||
github.com/go-chi/cors v1.2.1
|
github.com/go-chi/cors v1.2.1
|
||||||
github.com/go-sql-driver/mysql v1.8.1
|
github.com/go-sql-driver/mysql v1.8.1
|
||||||
github.com/stripe/stripe-go/v79 v79.6.0
|
github.com/stripe/stripe-go/v79 v79.6.0
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require filippo.io/edwards25519 v1.1.0 // indirect
|
||||||
filippo.io/edwards25519 v1.1.0 // indirect
|
|
||||||
github.com/alexedwards/scs/v2 v2.8.0 // indirect
|
|
||||||
)
|
|
||||||
|
@ -2,8 +2,10 @@ package cards
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/stripe/stripe-go/v79"
|
"github.com/stripe/stripe-go/v79"
|
||||||
|
"github.com/stripe/stripe-go/v79/customer"
|
||||||
"github.com/stripe/stripe-go/v79/paymentintent"
|
"github.com/stripe/stripe-go/v79/paymentintent"
|
||||||
"github.com/stripe/stripe-go/v79/paymentmethod"
|
"github.com/stripe/stripe-go/v79/paymentmethod"
|
||||||
|
"github.com/stripe/stripe-go/v79/subscription"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Card struct {
|
type Card struct {
|
||||||
@ -71,6 +73,51 @@ func (c *Card) RetrievePaymentIntent(id string) (*stripe.PaymentIntent, error) {
|
|||||||
return pi, nil
|
return pi, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Card) SubscribeToPlan(
|
||||||
|
cust *stripe.Customer,
|
||||||
|
plan, email, last4, cardType string,
|
||||||
|
) (string, error) {
|
||||||
|
stripeCustomerID := cust.ID
|
||||||
|
items := []*stripe.SubscriptionItemsParams{
|
||||||
|
{Plan: stripe.String(plan)},
|
||||||
|
}
|
||||||
|
|
||||||
|
params := &stripe.SubscriptionParams{
|
||||||
|
Customer: stripe.String(stripeCustomerID),
|
||||||
|
Items: items,
|
||||||
|
}
|
||||||
|
|
||||||
|
params.AddMetadata("last_four", last4)
|
||||||
|
params.AddMetadata("card_type", cardType)
|
||||||
|
params.AddExpand("latest_invoice.payment_intent")
|
||||||
|
subscription, err := subscription.New(params)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return subscription.ID, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Card) CreateCustomer(pm, email string) (*stripe.Customer, string, error) {
|
||||||
|
stripe.Key = c.Secret
|
||||||
|
customerParams := &stripe.CustomerParams{
|
||||||
|
PaymentMethod: stripe.String(pm),
|
||||||
|
Email: stripe.String(email),
|
||||||
|
InvoiceSettings: &stripe.CustomerInvoiceSettingsParams{
|
||||||
|
DefaultPaymentMethod: stripe.String(pm),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
cust, err := customer.New(customerParams)
|
||||||
|
if err != nil {
|
||||||
|
msg := ""
|
||||||
|
if stripeErr, ok := err.(*stripe.Error); ok {
|
||||||
|
msg = cardErrorMessage(stripeErr.Code)
|
||||||
|
}
|
||||||
|
return nil, msg, err
|
||||||
|
}
|
||||||
|
return cust, "", nil
|
||||||
|
}
|
||||||
|
|
||||||
func cardErrorMessage(code stripe.ErrorCode) string {
|
func cardErrorMessage(code stripe.ErrorCode) string {
|
||||||
msg := ""
|
msg := ""
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user