使用 Stripe 测试订阅试用期

Posted

技术标签:

【中文标题】使用 Stripe 测试订阅试用期【英文标题】:Testing subscription trial periods with Stripe 【发布时间】:2020-01-30 22:34:42 【问题描述】:

我正在实现 Stripe 的客户端/服务器集成,我想模拟用户的试用结束。

根据文档https://stripe.com/docs/billing/testing#trials:

这里有一个快速的解决方案:使用 trial_end 值仅在未来几分钟内。

以下是我创建 Stripe Session 的方法:

$session_configuration = [
    'payment_method_types' => ['card'],
    'customer' => $stripeIdCustomer,
    'subscription_data' => [
        'items' => [[
        'plan' => $planId,
        ]],
        'trial_end'=>  time() + 60 * 1
    ],
    'success_url' => $success_url,
    'cancel_url' => $cancel_url,
];

$session = Session::create($session_configuration);

但是,我得到了一个 InvalidRequestException :

trial_end 日期必须在未来至少 2 天

当我处于测试模式时,我该怎么办?另外,在这种情况下要注意哪些相关的 WebHook ?

【问题讨论】:

您是否尝试过创建订阅,然后对其进行修改?此限制似乎仅适用于 Checkout 会话。 【参考方案1】:

根据api,任何小于48小时的日期都是无效的。

https://stripe.com/docs/api/checkout/sessions/create#create_checkout_session-subscription_data-trial_end

我们解决这个问题的方法是创建这个函数。原谅 javascript,但我相信你可以让它工作。

    const includeTrialIfElligible = (trialEndsAtUtc) => 
      if (!trialEndsAtUtc || isPast(trialEndsAtUtc)) 
        return
      
      const daysTillTrialEnd = differenceInCalendarDays(trialEndsAtUtc, new Date())

      // ex. if the trial period is ending in 1 hour, the user will 
      // get one trial period day and will get charged the "next day" or in one hour.
      if (daysTillTrialEnd <= 2) 
        return 
          trial_period_days: daysTillTrialEnd,
        
      
     
      return 
        trial_end: trialEndsAtUtc,
      
    

然后我们在订阅数据中传播响应并实现我们想要的行为。

   const session = await stripe.checkout.sessions.create(
      
        mode: 'subscription',
        ...
        subscription_data: 
          application_fee_percent: DEFAULT_PLATFORM_FEE_PERCENTAGE,
          ...includeTrialIfElligible(trialEndsAtUtc),
        ,
        ...
    )

【讨论】:

您好 Ben,欢迎来到 SO。不幸的是,这是一个老问题,从那时起我做了很多不同的事情,这就是为什么我现在无法验证你的答案。如果其他用户验证它,我很乐意接受它。

以上是关于使用 Stripe 测试订阅试用期的主要内容,如果未能解决你的问题,请参考以下文章

如何处理重新订阅带有试用期的 Stripe 计划?

试用期满后将信用卡(在应用内)添加到现有的 Stripe 订阅

Stripe API 订阅

Stripe:如何更新通过订阅结帐会话创建的发票?

带有订阅和试用期的条纹支付元素

将 SCA 实施到 Stripe 实施中