无法在Laravel Cashier 4.2中设置订阅试用版,以便客户不会立即收取费用

时间:2015-12-04 23:24:38

标签: php laravel-4 stripe-payments laravel-cashier

我目前正在使用带有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中配置的试用期,您必须在订阅后手动设置试用结束日期”,但到那时,订阅已经创建,因此已经收费......

3 个答案:

答案 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;
    }
}

Laravel Cashier Docs

  

要创建订阅,请首先检索可计费模型的实例,该实例通常是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"));