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
相关产品推荐
相关产品推荐

