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

如何在Stripe结账页面同时支持订阅模式与一次性支付产品?

在Stripe结账会话中同时支持订阅与一次性支付的实现方案

你需要在同一Stripe结账页面中混合订阅型产品和一次性附加项,核心是利用Stripe Checkout的subscription模式支持混合订阅/一次性价格的特性,具体实现有两种可行方式:

方式一:通过Line Items混合订阅与一次性Price

这种方式适合有固定附加项的场景,需要先为一次性附加项创建**类型为one_time**的Price对象(可在Stripe后台或通过API创建),然后将其加入结账会话的line_items列表即可。

修改后的代码示例

// 初始化订阅产品的line item
const lineItems = [
    {
        price: priceId, // 99美元的订阅Price ID
        quantity: 1,
    }
];

// 根据用户选择,添加一次性附加项的line item
if (userSelectedAddOn) { // 这里替换为你判断用户是否选择附加项的逻辑
    lineItems.push({
        price: oneTimeAddOnPriceId, // 10美元的一次性Price ID
        quantity: 1,
    });
}

// 构建结账会话对象
const sessionObj = {
    mode: "subscription",
    line_items: lineItems,
    subscription_data: {
        metadata
    },
    metadata,
    success_url: `${Meteor.settings.private.PUBLIC_SITE_URL}/contact-us`,
    cancel_url: `${Meteor.settings.private.PUBLIC_SITE_URL}/payment-failure`,
    payment_method_types: ["card"]
}

const stripeRes = await stripe.checkout.sessions.create(sessionObj);

方式二:通过订阅数据动态添加一次性费用

如果不需要提前创建一次性Price对象,可以通过subscription_data.add_invoice_items动态生成一次性收费项,适合需要动态计算金额的场景。

修改后的代码示例

const sessionObj = {
    mode: "subscription",
    line_items: [
        {
            price: priceId, // 99美元的订阅Price ID
            quantity: 1,
        }
    ],
    subscription_data: {
        metadata,
        // 动态添加10美元的一次性附加项
        add_invoice_items: [
            {
                price_data: {
                    currency: "usd",
                    unit_amount: 1000, // 金额单位为分,对应10美元
                    product_data: {
                        name: "10美元充值附加项" // 附加项名称,会显示在结账页面
                    }
                },
                quantity: 1
            }
        ]
    },
    metadata,
    success_url: `${Meteor.settings.private.PUBLIC_SITE_URL}/contact-us`,
    cancel_url: `${Meteor.settings.private.PUBLIC_SITE_URL}/payment-failure`,
    payment_method_types: ["card"]
}

const stripeRes = await stripe.checkout.sessions.create(sessionObj);

关键说明

  • Stripe会自动区分两种收费类型:订阅型Price会生成定期循环的订阅,一次性Price/附加项仅在首次结账时收取,不会进入后续订阅周期。
  • 结账页面会清晰展示订阅金额和一次性金额的明细,用户可以明确看到费用构成。

内容的提问来源于stack exchange,提问作者Srushti Shah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:40:40