Go结合Stripe API:实现多商品传入Checkout Session
改造方案:通过for循环传入多个商品到Stripe Checkout Session
你可以先初始化一个空的[]*stripe.CheckoutSessionLineItemParams切片,然后遍历从SQLite查到的购物车列表,逐个生成对应的商品参数并添加到切片中,最终赋值给LineItems字段。
改造后的完整代码如下:
var cart []models.Cart Db.Where("user_id = ?", user_id).Find(&cart) // 初始化空的LineItems切片 lineItems := []*stripe.CheckoutSessionLineItemParams{} // 遍历购物车中的每个商品 for _, cartItem := range cart { item := &stripe.CheckoutSessionLineItemParams{ PriceData: &stripe.CheckoutSessionLineItemPriceDataParams{ Currency: stripe.String("usd"), ProductData: &stripe.CheckoutSessionLineItemPriceDataProductDataParams{ Name: stripe.String(cartItem.Product_title), }, // Stripe使用最小货币单位,所以乘以100转换为分 UnitAmount: stripe.Int64(cartItem.Product_price * 100), }, // 若购物车模型有数量字段,可替换为cartItem.Quantity Quantity: stripe.Int64(1), } lineItems = append(lineItems, item) } params := &stripe.CheckoutSessionParams{ Mode: stripe.String(string(stripe.CheckoutSessionModePayment)), // 将生成的多商品切片赋值给LineItems LineItems: lineItems, SuccessURL: stripe.String("http://localhost:3000/member/order/success"), CancelURL: stripe.String("http://localhost:3000/member/order/cancel"), }
关键说明
- 用
range遍历cart数组,避免原代码中仅取cart[0]的单商品限制 - 如果你的
models.Cart包含商品数量字段,可将固定的Quantity: stripe.Int64(1)替换为对应字段值,实现按实际购物车数量下单 - 确保
Product_price为数值类型,乘以100后能正确转换为Stripe要求的最小货币单位(如美元对应分)
内容的提问来源于stack exchange,提问作者Damian
相关产品推荐
相关产品推荐

