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

使用Stripe实现订阅赠送功能遇技术问题求最优方案

问题描述

我正在用Stripe搭建一项每月X美元的服务,想实现用户向他人赠送Z个月服务的功能。Stripe的优势在于会自动通知订阅结束相关情况(如计费问题、订阅到期等),因此我无需在数据库中存储「到期时间」。

但实现赠送功能时遇到了问题:我使用Payment Links,尝试为被赠送用户手动创建订阅(以此保留现有订阅架构),代码如下:

subscription = await stripe.subscriptions.create({
      customer: stripeCustomer.id,
      items: [{ price: priceId, quantity }],
    });

结果出现错误,原因是我使用的priceId为单次支付类型,而非recurring(循环)类型——赠送者可选择支付2个月的费用赠予他人,错误信息如下:

API Handler Error Caught The price specified is set to `type=one_time` but this field only accepts prices with `type=recurring`

我曾想到一个临时方法:创建一个对应的循环价格ID,再设置30天后到期,但这显得很不规范。有没有借助Payment Links的更好方法?

最优实现方案

方案1:规范使用循环价格+订阅到期设置

你之前的思路可以优化成标准做法,完全符合Stripe的设计逻辑:

  • 为你的月付服务创建循环价格(recurring),周期设为monthly。
  • 创建订阅时,通过cancel_at参数指定到期时间(当前时间加上Z个月),订阅会自动在到期日取消,Stripe也会正常发送到期通知,完美匹配你依赖Stripe自动通知的需求:
const zMonthsLater = new Date();
zMonthsLater.setMonth(zMonthsLater.getMonth() + Z);

subscription = await stripe.subscriptions.create({
  customer: stripeCustomer.id,
  items: [{ price: recurringPriceId }], // 使用循环价格ID
  cancel_at: Math.floor(zMonthsLater.getTime() / 1000), // 转换为Unix时间戳
});
  • 赠送者端,用Payment Links售卖「Z个月赠送资格」的单次支付产品,用户完成支付后,触发上述订阅创建逻辑为被赠送人开通服务。

方案2:借助Payment Links创建预付费订阅(更贴合需求)

如果想直接用Payment Links简化赠送流程,可采用预付费订阅方案:

  1. 在Stripe后台为你的服务创建循环价格时,勾选「预付费(Prepaid)」选项,这样用户可以一次性支付多个周期的费用,订阅会自动延续对应时长,到期后自动取消。
  2. 为这个预付费价格生成Payment Links,允许用户选择购买的周期数(Z个月),或者直接创建多个固定周期的Payment Links(如2个月、3个月等)。
  3. 当赠送者通过Payment Links完成支付后,通过Stripe Webhook(如checkout.session.completed)获取支付信息,将订阅关联到被赠送用户的Stripe Customer账户——若被赠送人无账户,先创建账户,再通过subscription.update修改订阅的归属:
// 从Webhook事件中获取订阅ID
const subscriptionId = event.data.object.subscription;

// 更新订阅归属为被赠送用户
await stripe.subscriptions.update(
  subscriptionId,
  { customer: recipientStripeCustomer.id }
);

这种方式完全利用Stripe原生能力,无需手动计算到期时间,Stripe会自动管理订阅周期和通知,同时通过Payment Links简化了赠送者的支付流程。

方案3:单次支付+服务期授权(不推荐)

如果不想采用订阅架构,也可以用单次支付的Payment Links售卖「Z个月服务授权」,但需要在数据库中记录被赠送人的服务到期时间,这违背了你无需存储到期时间的初衷,因此不推荐。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 05:00:54