Замена подписки на другой расчетный период с помощью Laravel Cashier вызывает немедленную оплату

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

Это можно сделать с помощью следующего кода:

$company->subscription('annual')
        ->withCoupon($couponCode)
        ->swapAndInvoice(1); // 1 is the quantity

Это работает, однако я заметил, что он немедленно выставляет счета и взимает плату с пользователя в один и тот же момент, что сразу же закрывает счет. Это означает, что веб-перехватчики не могут изменить счет, чтобы добавить такие позиции, как налог.

Я даже изменил swapAndInvoice, чтобы сделать так, чтобы оплата не производилась сразу, чтобы у счета был обычный период изменения ~ 1 часа, который Stripe допускает для счетов. Однако он по-прежнему заряжает пользователя сразу. Я думаю, это из-за перехода с ежемесячного выставления счетов на годовой. Но не уверен.

//Stripe_Invoice::create(['customer' => $customer->id], $this->getStripeKey())->pay();
Stripe_Invoice::create(['customer' => $customer->id], $this->getStripeKey());

Любые идеи приветствуются.

В собственной документации Stripe говорится следующее:

Когда клиент меняет план подписки в середине расчетного периода, происходит следующее:

Если новый план имеет другую частоту выставления счетов по сравнению со старым планом (например, ежемесячно или ежегодно, от активного до пробного, от бесплатного до активного и т. Д.)

Первый полный период нового плана начинается немедленно (или после пробного периода, по желанию), и с клиента взимается плата за первый период за вычетом остатка на счете.


person Marcel Gruber    schedule 10.12.2015    source источник


Ответы (1)


Что вы можете сделать, так это создать элементы счета, которые вам нужны, прежде чем обновление подписки для перехода на новый план (автоматически созданный счет будет включать все ожидающие счета элементы).

В качестве альтернативы вы можете обновить подписку с очень коротким пробным периодом (т.е. установить trial_end как через несколько секунд в будущее). По окончании пробного периода будет создан новый счет, но он не будет закрыт немедленно - он будет рассматриваться как повторяющийся платеж, и счет будет оставаться открытым в течение ~ одного часа, прежде чем будет предпринята попытка оплаты. Событие invoice.created будет отправлено на конечную точку вашего веб-перехватчика, и вы сможете добавить элементы счета. тогда тебе нужно.

Пример кода не предоставлен, так как я не знаком с Laravel Cashier, извините!

person Ywain    schedule 10.12.2015
comment
Ваша первая идея, безусловно, хорошая, но я должен упомянуть, что существует также возможность того, что пользователь вводит купон при переключении, что добавляет еще один фактор сложности при подсчете итогов. Что касается альтернативы, я тоже пробовал это, но тогда она отделяет позицию пропорциональной части от биллинга по новому плану в двух разных счетах .. Это похоже на то, что каждое направление - это препятствие на пути! - person Marcel Gruber; 11.12.2015