使用 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 测试订阅试用期的主要内容,如果未能解决你的问题,请参考以下文章