我尝试使用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');
但由于某种原因,Stripe和Laravel忽略了这一点,并且在我的数据库和Stripe admin中,我将试用结束日期设置为Stripe默认值(从今天起40天)。如果我尝试在没有试用的Stripe帐户上进行设置,它会立即向测试用户收费。
我做错了什么?
如果我注释掉$user->subscription...
行,它会在数据库中保留正确的时间。
答案 0 :(得分:5)
经过相当多的混乱之后,我使用Cashier来创建订阅。接下来,我可以使用它来使用带有Stripe API的客户ID来调整试用结束日期。
开头不需要这一点,因为Cashier只会用Stripe中的试用版覆盖它。
// $user->trial_ends_at = Carbon::now()->lastOfMonth();
// $user->save();
使用Cashier设置订阅。有一个试用版,所以卡不收费。
$user->subscription(Input::get('subscription'))->create(Input::get('stripeToken'), [
'email' => $user->email
]);
现在,使用Stripe API抓住我们刚创建的客户及其订阅
$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();
所以,一起:
$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();