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

Stripe订阅支付与续订的Node/NestJS API实现问题咨询

Stripe订阅支付相关问题解答

创建订阅后是否需要手动发起支付?

当你用stripe.subscriptions.create()创建订阅时,如果客户已在Stripe系统中保存有效支付方式(如信用卡),Stripe会自动尝试收取第一期费用,无需手动发起支付。但如果客户未保存支付方式,订阅会处于incomplete状态,此时需要引导客户完成支付。


1. 如何通过Node API为客户发起支付?

针对订阅处于incomplete状态的情况,可通过以下两种方式处理:

方式一:创建支付链接(适合引导客户跳转支付)

const paymentLink = await stripe.paymentLinks.create({
  line_items: [{
    price: plan.plan_id,
    quantity: 1,
  }],
  customer: user.stripe_account_id,
  subscription_data: {
    items: [{ price: plan.plan_id }],
  },
});

将生成的paymentLink.url返回给前端,引导客户跳转完成支付,支付成功后订阅会自动转为active状态。

方式二:创建支付意向(适合前端集成Stripe Elements)

若前端使用Stripe Elements收集支付信息,可创建关联订阅的支付意向:

// 获取订阅最新状态
const subscription = await stripe.subscriptions.retrieve(subscriptionId);
// 创建支付意向,关联订阅未付金额
const paymentIntent = await stripe.paymentIntents.create({
  amount: subscription.latest_invoice.amount_due,
  currency: 'usd', // 替换为你的业务货币代码
  customer: user.stripe_account_id,
  payment_method_types: ['card'],
  setup_future_usage: 'off_session', // 保存支付方式用于后续自动扣费
  metadata: {
    subscription_id: subscriptionId,
  },
});
// 返回client_secret给前端,通过Stripe Elements完成支付
return { clientSecret: paymentIntent.client_secret };

前端完成支付后,订阅会自动激活。


2. 订阅到期后如何续订并发起支付?

Stripe订阅默认是自动续订的,只要客户支付方式有效,到期后Stripe会自动扣取下一期费用,订阅保持active状态,无需手动干预。

若订阅因支付失败变为past_due状态,可触发重试支付:

// 重试订阅的最新未付发票
const invoice = await stripe.invoices.retrieve(subscription.latest_invoice);
await stripe.invoices.pay(invoice.id);

如果需要手动创建新的续订订阅(如客户主动选择续订),直接调用subscriptions.create()即可,参数与首次创建一致:

const newSubscription = await stripe.subscriptions.create({
  customer: user.stripe_account_id,
  items: [{ price: plan.plan_id }],
  payment_behavior: 'default_incomplete', // 可选,客户无支付方式时进入待完成状态
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:07:10