3

我目前正在使用带有 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官方文档说明如下:

$user->subscription('monthly') ->withCoupon('code') ->create($creditCardToken);

订阅方法将自动创建 Stripe 订阅,并使用 Stripe 客户 ID 和其他相关计费信息更新您的数据库。如果您的计划在 Stripe 中配置了试用版,则试用结束日期也将自动设置在用户记录中。

如果您的计划具有未在 Stripe 中配置的试用期,您必须在订阅后手动设置试用结束日期:

$user->trial_ends_at = Carbon::now()->addDays(14);

$user->save();

试用日期的手动设置似乎不起作用。我尝试了官方文档概述的方法,并且由于某种原因未应用试用期,因此总是立即向用户收费。

我查看文档的次数越多,我就越认为如果它不在 Stripe 端,它甚至不支持试用期。关键是:“如果您的计划有未在 Stripe 中配置的试用期,您必须在订阅后手动设置试用结束日期”,但此时,订阅已经创建,因此费用已经被做成了……

4

3 回答 3

3

纯属偶然,我在 Laravel Cashier 存储库中发现了这个问题

问题的回答者是这样说的:

由于某种原因不在文档中,但您可以这样做:

$user->subscription($plan) ->trialFor($user->trial_ends_at) ->create($creditCardToken, ['email' => $user->email, 'description' => $user->name ]);

这解决了我的问题,因为它创建了订阅,但如果用户有免费试用版,则不会立即向他们收费。我可以通过查看 Stripe 仪表板并查看试用字段已应用于订阅来验证这一点。

于 2015-12-07T17:46:05.527 回答
2

据我所知,您必须在订阅客户后设置试用结束时间。

像这样:

$trialEndDateUnixTimestamp = strtotime(Carbon::parse($company->trial_ends_at));

$customer->subscription('annual')
         ->create(NULL, $customer);

$customer->trial_ends_at = $trialEndDateUnixTimestamp;

$cusomer->save();

Laravel 收银员文档

要创建订阅,首先检索计费模型的实例,通常是 App\User 的实例。获取模型实例后,您可以使用订阅方法来管理模型的订阅:

$user = User::find(1);

$user->subscription('monthly')->create($creditCardToken);

create 方法将自动创建 Stripe 订阅,并使用 Stripe 客户 ID 和其他相关计费信息更新您的数据库。如果您的计划在 Stripe 中配置了试用版,则试用结束日期也将自动设置在用户记录中。

如果您想实施试用期,但完全在您的应用程序中管理试用,而不是在 Stripe 中定义它们,您必须手动设置试用结束日期:

$user->trial_ends_at = Carbon::now()->addDays(14);

$user->save();

于 2015-12-07T01:04:35.517 回答
1
$company->trial_ends_at = date('Y-m-d', strtotime("+14 days"));
于 2015-12-07T06:21:26.960 回答