В настоящее время я использую Laravel Cashier (4.2) с Stripe. Текущая версия 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 заявляет следующее:
$user->subscription('monthly')
->withCoupon('code')
->create($creditCardToken);Метод подписки автоматически создаст подписку Stripe, а также обновит вашу базу данных с помощью идентификатора клиента Stripe и другой соответствующей платежной информации. Если в вашем плане настроена пробная версия в Stripe, дата окончания пробной версии также будет автоматически указана в записи пользователя.
Если у вашего плана есть пробный период, который не настроен в Stripe, вы должны установить дату окончания пробного периода вручную после подписки:
$user->trial_ends_at = Carbon::now()->addDays(14);
$user->save();
Ручная установка даты пробного периода, похоже, не работает. Я попробовал метод, описанный в официальных документах, и с пользователя всегда взимается плата, потому что по какой-то причине пробный период не применяется.
Чем больше я смотрю на документацию, тем больше я думаю, что она даже не поддерживает пробные периоды, если она не на стороне Stripe. Ключевые строки: «Если у вашего плана есть пробный период, который не настроен в Stripe, вы должны установить дату окончания пробного периода вручную после подписки», но к этому моменту подписка уже была создана, и, таким образом, плата уже была произведена ….
По чистой случайности я наткнулся этот вопрос размещен в репозитории Laravel Cashier.
Ответчик вопроса сказал это:
По какой-то причине не в документации, но вы можете сделать:
$user->subscription($plan)
->trialFor($user->trial_ends_at)
->create($creditCardToken, ['email' => $user->email,
'description' => $user->name
]);
Это решает мой вопрос, так как создает подписку, но не взимает плату с пользователя сразу, если у него есть бесплатная пробная версия. Я могу убедиться в этом, посмотрев на приборную панель Stripe и увидев, что пробное поле было применено к подписке.
Из того, что я могу сказать, вы должны установить время окончания пробного периода после подписки клиента.
Вот так:
$trialEndDateUnixTimestamp = strtotime(Carbon::parse($company->trial_ends_at));
$customer->subscription('annual')
->create(NULL, $customer);
$customer->trial_ends_at = $trialEndDateUnixTimestamp;
$cusomer->save();
Чтобы создать подписку, сначала получите экземпляр вашей оплачиваемой модели, которая обычно будет экземпляром App \ User. После того как вы получили экземпляр модели, вы можете использовать метод подписки для управления подпиской модели:
$user = User::find(1);
$user->subscription('monthly')->create($creditCardToken);
Метод create автоматически создает подписку Stripe, а также обновляет вашу базу данных с помощью идентификатора клиента Stripe и другой соответствующей платежной информации. Если в вашем плане настроена пробная версия в Stripe, дата окончания пробной версии также будет автоматически указана в записи пользователя.
Если вы хотите реализовать пробные периоды, но полностью управляете пробными версиями в своем приложении, а не определяете их в Stripe, вы должны вручную установить дату окончания пробного периода:
$user->trial_ends_at = Carbon::now()->addDays(14);
$user->save();
$company->trial_ends_at = date('Y-m-d', strtotime("+14 days"));