我目前正在使用带有Stripe的Laravel Cashier(4.2)。我目前使用的Stripe API版本是2014-06-17。在创建订阅时,我已尝试以各种方式设置试用结束日期。我尝试过这段代码的各种变体:
$company->trial_ends_at = Carbon::now()->addDays(14);
// Also tried this variation of the trial date
// $trialEndDateUnixTimestamp = strtotime(Carbon::parse($company->trial_ends_at));
$company->subscription('annual')
->create($creditCardToken, ['description'=>$company->company_name, 'email'=>Auth::user()->email], null);
$company->trial_ends_at = Carbon::now()->addDays(14);;
$company->save();
当我查看发送到Stripe的请求时,trial_end
始终为null
。任何想法都表示赞赏。
官方Laravel Cashier documentation声明如下:
$user->subscription('monthly') ->withCoupon('code') ->create($creditCardToken);
订阅方法将自动创建Stripe订阅,以及使用Stripe客户ID和其他相关结算信息更新您的数据库。如果您的计划在Stripe中配置了试用版,则还会在用户记录上自动设置试用结束日期。
如果您的计划的试用期未在Stripe中配置,则必须在订阅后手动设置试用结束日期:
$user->trial_ends_at = Carbon::now()->addDays(14);
$user->save();
试用日期的手动设置似乎不起作用。我尝试了官方文档概述的方法,并且用户总是立即收费,因为由于某种原因,试用期没有应用。
我越看文档,我认为它越不支持试用期,如果它不在Stripe方面。关键行是:“如果您的计划有一个未在Stripe中配置的试用期,您必须在订阅后手动设置试用结束日期”,但到那时,订阅已经创建,因此已经收费......
答案 0 :(得分:2)
纯粹的偶然,我遇到了this issue posted in the Laravel Cashier repository。
问题的回答者说:
由于某些原因不在文档中,但您可以这样做:
$user->subscription($plan) ->trialFor($user->trial_ends_at) ->create($creditCardToken, ['email' => $user->email, 'description' => $user->name ]);
这解决了我的问题,因为它创建了订阅,但如果他们有免费试用,则不会立即向用户收费。我可以通过查看Stripe仪表板并查看试用字段已应用于订阅来验证这一点。
答案 1 :(得分:1)
据我所知,您必须在订阅客户后设置试用结束时间。
像这样:
void LLL::insertSorted(int r) {
node * cur = head;
node * prev = NULL;
while((cur != NULL) && (r > cur->data)){//find the location to insert
prev = cur;
cur = cur->next;
}
node *new_node = new node;
new_node->data = r;
new_node->next = cur;
if(prev == NULL){//new first one
head = new_node;
}else{
prev->next = new_node;
}
}
要创建订阅,请首先检索可计费模型的实例,该实例通常是App \ User的实例。检索模型实例后,您可以使用订阅方法来管理模型的订阅:
$trialEndDateUnixTimestamp = strtotime(Carbon::parse($company->trial_ends_at)); $customer->subscription('annual') ->create(NULL, $customer); $customer->trial_ends_at = $trialEndDateUnixTimestamp; $cusomer->save();
$user = User::find(1);
create方法将自动创建Stripe订阅,并使用Stripe客户ID和其他相关结算信息更新您的数据库。如果您的计划在Stripe中配置了试用版,则还会在用户记录上自动设置试用结束日期。
如果您要实施试用期,但完全在应用程序中管理试用而不是在Stripe中定义试验,则必须手动设置试用结束日期:
$user->subscription('monthly')->create($creditCardToken);
$user->trial_ends_at = Carbon::now()->addDays(14);
答案 2 :(得分:1)
$company->trial_ends_at = date('Y-m-d', strtotime("+14 days"));