2014-11-01 2 views
0

Я пытался интегрировать платежную систему для подписки с использованием Laravel Cashier.Laravel Cashier для синхронизации платежей до первого числа следующего месяца

Я установил свой RegistrationController, чтобы он работал, сколько дней до первого дня следующего месяца.

$user->trial_ends_at = Carbon::now()->addDays($datediff); Использование

При создании пользователя он устанавливает пробную дату окончания первого числа следующего месяца.

Отсюда я хочу использовать метод $user->onTrial() для создания фактической подписки.

Обращаем ваше внимание: Несмотря на то, что пользователь создан, клиент не создан в Stripe, так как подписка еще не создана.

Мои вопросы:

В регистрационной форме данные карты принимаются таким образом, пользователи могут подписаться и создать свой способ оплаты. Это включает в себя полосу, подтверждающую карточку и отправку маркера.

Может ли этот токен быть сохранен и использован позднее?

Предполагая, что я смогу использовать этот токен позже, чтобы создать реальную подписку в кассе, я должен проверить, закончилась ли процедура пользователей, используя метод onTrial.

подписки создается с помощью этого:

$user->subscription($subscription_plan)->create($stripeToken); 

Где лучше добавить код выше, так что пользователь подписан и расчетный период начинается в конце судебного процесса?

Это совсем не упоминается в документации, поэтому мне просто интересно, создаю ли я новый контроллер, чтобы фактически начать подписку, где вызывать функцию и как ее запустить, поскольку каждая попытка пользователя заканчивается ,

Edit:

Would что-то подобное можно с помощью очередей?

http://laravel.com/docs/4.2/queues

$start_subscription = Carbon::now()->addDays($datediff); 

Queue::later($start_subscription, '[email protected]', 
array('stripeToken' => $stripeToken, 'details' => $otherDetails)); 

, а затем запустить метод подписки для каждого пользователя в заданное время.

ответ

1

Я заметил некоторые проблемы с созданием клиента Stripe одновременно с подпиской. В итоге у меня появилось много дополнительных клиентов внутри Stripe, потому что, если клиент создан, но у подписки есть ошибка, он не связывает их в Cashier, но клиент подключен в Stripe.

Итак, чтобы отделить два, я создал вспомогательный метод в модели User. Это позволит мне создать клиента без создания подписки. Затем я могу создать подписку позднее.

Я думаю, что это касается вашей проблемы.

метода Helper в модели пользователя:

/** 
    * Method to create stripe customer without subscription 
    */ 
    public function createStripeCustomer($token, $properties) { 
     $gateway = $this->subscription(); 
     $customer = $gateway->createStripeCustomer($token, $properties); 
     $gateway->updateLocalStripeData($customer); 
    } 

    public function getStripeCustomer() { 
     $gateway = $this->subscription(); 
     return $gateway->getStripeCustomer(); 
    } 

Затем в моем контроллере API, где я обрабатывать подписки:

if (!$user->getStripeId()) { 
     $user->createStripeCustomer($inputs['token'], ['email' => $user->email]); 

     //this can be done at a much later time, the customer is already stored. 
     $user->subscription($inputs['plan'])->create(null, [], $user->getStripeCustomer()); 

     Flash::success("Subscription Success!"); 

    } elseif (!$user->getStripeSubscription()) { 
     $user->subscription($inputs['plan'])->create($inputs['token'], [], $user->getStripeCustomer()); 

     Flash::success("Subscription Success!"); 
    } 
+0

Ничего себе это выглядит интересно. Я стараюсь действовать в выходные и буду одобрять, если это решит мою проблему. –

1

Что касается маркера Stripe, вы захотите использовать его в течение нескольких мгновений своего создания. Ожидается, что этого не будет дольше.

Что касается ваших других вопросов, я не человек Laravel, поэтому я не мог говорить с этим, но функция strtotime() PHP выполняет множество строк и возвращает метку времени.Так что если вы всегда хотели иметь начало выставления счетов в полдень первого числа следующего месяца, вы бы установить метку времени:

strtotime('first day of next month 12:00'); 

Надежда, что помогает, Ларри

PS Я работаю по поддержке в нашивки.

+0

Приветствия для выяснения истечения маркеров. Это помогло мне решить путь вперед. Моя функция установки даты окончания тестирования по существу делает то, что вы написали выше, однако это может быть недостижимо с использованием Cashier, если это так. Не могли бы вы сказать, что я должен начинать с нуля и интегрироваться с полосой только с помощью stripe.js и не использовать предварительно построенный пакет? –

+0

Мне трудно сказать. Я не использовал Laravel или Cashier, поэтому я не знаю, насколько хорош или гибкий Кассир. Но если вы уже находитесь на пути Кассира, моя склонность - сначала попытаться сделать эту работу. –

Смежные вопросы