问题描述
我正在与react node.js进行条带集成
创建订阅而不进行试用时,我没有任何问题,并且所有用例都非常简单。
但是,我正在尝试创建免费试用版本而不收集信用卡详细信息,稍后试用期过后,我想收集信用卡详细信息
服务器端:创建不带付款方式的试用订阅:
const subscription = await stripe.subscriptions.create({
customer: customer.id,items: [{ price: priceId }],trial_end: expiredAt.unix(),expand: ['latest_invoice.payment_intent'],});
ClientSide:稍后试用期结束时,我想收集信用卡详细信息(paymentMethod),检查是否由于失败或3ds而需要用户采取措施,并通过更新客户的默认付款方式来更新订阅:
const updateCustomerDefaultPaymentMethod = await stripe.customers.update(
customerId,{
invoice_settings: {
default_payment_method: req.body.paymentMethodId,},}
);
我该如何更新订阅以执行PaymentIntent或向用户收费,并与状态为“ in_complete”的客户端相同的订阅对象返回客户端(与创建不带trial_period的订阅时相同)? 目前,在运行代码时,我一直保持status ='active'状态,因为第一张发票的状态为'payed',价格为'0 $'。
解决方法
在免费试用的情况下,创建订阅不会产生初始付款,Stripe会在后台自动为您创建SetupIntent。此SetupIntent用于收集客户的付款方式时使用。因此,在any point during the trial,客户需要返回到您的应用程序以输入其信用卡详细信息,然后您可以使用SetupIntent将其保存:
一旦设置了付款方式并将其保存为客户(作为default payment method for invoices),它将在试用期结束时用于支付订阅的第一张发票。 first payment after a trial is considered an off-session payment(最后一个常见问题解答),因此,如果该付款失败,Stripe将尝试使用常规的smart retries and dunning功能来重新收取付款。
简而言之,您需要使用创建(并附加到订阅)的SetupIntent来保存用户的付款信息。