You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 14:36:17