条纹将PaymentMethod添加到试用订阅中,然后再验证信用卡

问题描述

我正在与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来保存用户的付款信息。