使用Stripe测试订阅试用期

时间:2019-10-01 15:30:43

标签: php stripe-payments

我正在实现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?

1 个答案:

答案 0 :(得分: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),
        },
        ...
    )