Laravel 收银员:新用户的一般试用不会显示在 Stripe 仪表板中

Laravel Cashier: generic trials for new users do not show in Stripe dashboard

我有一个注册端点,我可以在其中创建一个新用户并将其设置为通用试用期(无需输入信用卡信息):

public function register(Request $request) {
    //... other not important things for this

    $user = new User([
        'name' => $request->get('name'),
        'email' => $request->get('email'),
        // other fields not important...
        'trial_ends_at' => now()->addDays(1),
    ]);

    $user->createAsStripeCustomer(); // not sure if needed
    $user->save();
    return response()->json($user, 201);
}

在数据库中,我可以看到我使用以下字段和值创建了一个用户:trial_ends_at: 2020-09-21 05:20:47。此外,在“客户”下我可以看到新注册的用户电子邮件:

但是,在 Stripe 仪表板中,它表示新试验为零:

我还有一个 customer.subscription.updated webhook,它不是 运行 当我期待它时(当试用结束时),所以我在想是什么导致 Stripe 无法检测到新的试用也是最终导致 webhook 不触发的原因。

为什么 Stripe 不“接受”/不知道新试用?

在 Laravel 方面,用户似乎正在试用($user->onTrial() returns 正确),但在 Stripe 仪表板上,同一用户似乎没有正在试用(没有新的试用显示,请参见上面的屏幕截图)。

Stripe 没有“通用试用”的概念(试用未附加到特定订阅计划),只有 Laravel Cashier 有这个概念(使用 trial_ends_at 字段) .

我创建了一个计划订阅,而不是一般试用,为 paymentMethod 传入 null,还包括 trial_period_days 选项。这使我们无需先为该用户备案付款方式即可创建试用版。

这是执行此操作的代码:

$trialDays = 30;
$planId = "<your stripe price id>";
$user->createAsStripeCustomer();
$user->newSubscription('<name of subscription>', $planId)
    ->create(null, [
        'email' => $user->email
    ], ['trial_period_days' => $trialDays]);

此外,在创建用户时,请记住仍然包含 trial_ends_at 字段,以便我们数据库中的内容与 Stripe 中的内容相匹配:

$trialEndsAt = now()->addDays($trialDays);
$user = new User([
    //...
    'trial_ends_at' => $trialEndsAt
]);
$user->save();

用户现在将在 Stripe 仪表板中处于试用期,使用 $user->onTrial() 将 return 为真,因为 trial_ends_at 字段中的日期时间大于当前日期时间.