package pay import ( "github.com/stripe/stripe-go/v75" "github.com/stripe/stripe-go/v75/checkout/session" "github.com/stripe/stripe-go/v75/paymentintent" "github.com/stripe/stripe-go/v75/refund" "github.com/zeromicro/go-zero/core/logx" ) type Stripe struct { Key string `json:"key"` PayType string `json:"pay_type"` } // 生成退款 func (stripePay *Stripe) PayRefund(req *PayRefundReq) (res *PayRefundRes, err error) { stripe.Key = stripePay.Key params := &stripe.RefundParams{PaymentIntent: stripe.String(req.TradeNo)} _, err = refund.New(params) if err != nil { logx.Error(err) } return res, err } // 生成预付款 func (stripePay *Stripe) GeneratePrepayment(req *GeneratePrepaymentReq) (res *GeneratePrepaymentRes, err error) { var productData stripe.CheckoutSessionLineItemPriceDataProductDataParams // productData.Metadata = map[string]string{"order_id": "33333333333333"} if req.ProductName != "" { productData.Name = stripe.String(req.ProductName) } if req.ProductDescription != "" { productData.Description = stripe.String(req.ProductDescription) } if len(req.ProductImages) > 0 { productData.Images = req.ProductImages } // var images = make([]*string, 1) // var image string = "https://img2.woyaogexing.com/2023/07/25/133132a32b9f79cfad84965a4bea57e0.jpg" // images[0] = stripe.String(image) // productData.Images = images stripe.Key = stripePay.Key var resultPayment resultPayment switch stripePay.PayType { case "session": // session 方式 params := &stripe.CheckoutSessionParams{ PaymentIntentData: &stripe.CheckoutSessionPaymentIntentDataParams{Metadata: req.Metadata}, // Params: stripe.Params{Metadata: map[string]string{"order_id": "1111111111111"}}, PaymentMethodTypes: stripe.StringSlice([]string{ "card", // "ideal", }), LineItems: []*stripe.CheckoutSessionLineItemParams{ { PriceData: &stripe.CheckoutSessionLineItemPriceDataParams{ Currency: stripe.String(req.Currency), ProductData: &productData, UnitAmount: stripe.Int64(req.Amount), }, Quantity: stripe.Int64(req.Quantity), }, }, Mode: stripe.String(string(stripe.CheckoutSessionModePayment)), SuccessURL: stripe.String(req.SuccessURL), CancelURL: stripe.String(req.CancelURL), } resCheckoutSession, err := session.New(params) if err != nil { return nil, err } resultPayment.Url = resCheckoutSession.URL resultPayment.SessionId = resCheckoutSession.ID case "intent": // 密钥方式 params := &stripe.PaymentIntentParams{ Amount: stripe.Int64(req.Amount), Currency: stripe.String(string(req.Currency)), PaymentMethodTypes: stripe.StringSlice([]string{ "card", // "ideal", }), } for key, item := range req.Metadata { params.AddMetadata(key, item) } resPaymentintent, err := paymentintent.New(params) if err != nil { return nil, err } resultPayment.TradeNo = resPaymentintent.ID resultPayment.ClientSecret = resPaymentintent.ClientSecret default: } return &GeneratePrepaymentRes{ URL: resultPayment.Url, SessionId: resultPayment.SessionId, TradeNo: resultPayment.TradeNo, ClientSecret: resultPayment.ClientSecret, }, err } type resultPayment struct { Url string `json:"url"` // 生成预付款链接 SessionId string `json:"session_id"` TradeNo string `json:"trade_no"` ClientSecret string `json:"client_secret"` }