我正在实现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?
答案 0 :(得分:1)
根据 api,任何少于 48 小时的日期都是无效的。
我们解决这个问题的方法是创建这个函数。原谅 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),
},
...
)