Laravel Cashier在每个月的最后一天进行Stripe结束试用并开始订阅

Dja*_*ave 4 laravel stripe-payments

我正在尝试使用Stripe和Laravel以及Laravel Cashier根据当月的最后一天为用户创建订阅.所以,我只是设定了该月最后一天的试用结束日期,以阻止它们立即收费:

$user = Auth::user();

$user->trial_ends_at = Carbon::now()->lastOfMonth();
$user->save();
$user->subscription(Input::get('subscription'))->create(Input::get('stripeToken'), [
    'email' => $user->email
]);

return Redirect::to('/profile');
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,Stripe和Laravel忽略了这一点,并且在我的数据库和Stripe admin中,我将试用结束日期设置为Stripe默认值(从今天起40天).如果我尝试在没有试用的Stripe帐户上进行设置,它会立即向测试用户收费.

我究竟做错了什么?

如果我注释掉该$user->subscription...行,它会在数据库中保留正确的时间.

Dja*_*ave 5

经过相当多的混乱之后,我使用Cashier来创建订阅.接下来,我可以使用它来使用带有Stripe API的客户ID来调整试用结束日期.

开头不需要这个位,因为Cashier会用Stripe中的试用版覆盖它.

// $user->trial_ends_at = Carbon::now()->lastOfMonth();
// $user->save();
Run Code Online (Sandbox Code Playgroud)

使用Cashier设置订阅.有一个试用版,所以卡不收费.

$user->subscription(Input::get('subscription'))->create(Input::get('stripeToken'), [
    'email' => $user->email
]);
Run Code Online (Sandbox Code Playgroud)

现在,使用Stripe API来获取我们刚创建的客户及其订阅

$cu = Stripe_Customer::retrieve($user->stripe_id);
$subscription = $cu->subscriptions->retrieve($user->stripe_subscription);
Run Code Online (Sandbox Code Playgroud)

现在,只有现在,我们可以修改日期(除非我做错了/错过了一招)

$subscription->trial_end = Carbon::now()->lastOfMonth()->timestamp;
$subscription->save();
Run Code Online (Sandbox Code Playgroud)

现在,我们还需要更新数据库表

$user->trial_ends_at = Carbon::now()->lastOfMonth();
$user->save();
Run Code Online (Sandbox Code Playgroud)

所以,所有在一起:

    $user = Auth::user();

    $user->subscription(Input::get('subscription'))->create(Input::get('stripeToken'), [
        'email' => $user->email,
    ]);

    $cu = Stripe_Customer::retrieve($user->stripe_id);
    $subscription = $cu->subscriptions->retrieve($user->stripe_subscription);
    $subscription->trial_end = Carbon::now()->lastOfMonth()->timestamp;
    $subscription->save();

    $user->trial_ends_at = Carbon::now()->lastOfMonth();
    $user->save();
Run Code Online (Sandbox Code Playgroud)