Как добавить купон в * Stripe подписку * с помощью Laravel Cashier после того, как подписка уже создана

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

Вот что я попробовал:

 $company = Auth::user()->company;
$customer = $company->subscription()->getStripeCustomer(); // returns a StripeGateway object
$customer->subscription->applyCoupon($input['coupon_code']);

Вот сообщение об ошибке:

"Call to undefined method Stripe_Subscription::updateSubscription()"

Я могу использовать applyCoupon() Метод для клиента в целом, но не фактическая подписка … Идеи приветствуются.

В документации Stripe показано только, как удалить скидку из подписки:
Дисконтный объект. Единственная другая информация, которую я смог найти в их документации:

Купоны и скидки

Если вы хотите предоставлять скидки определенным клиентам, вы можете создать коды купонов в Личном кабинете. У купонов есть процент скидки и продолжительность, поэтому вы можете создать купоны, например, 10% пожизненную скидку или 50% скидку на один месяц и т. Д. К купонам также могут быть прикреплены даты истечения срока действия, после чего они не могут быть использованы. Вот пример добавления скидки к подписке пользователя. В этом случае мы уже создали купон с именем 50OFF1MONTH:

curl https://api.stripe.com/v1/customers/cus_4fdAW5ftNQow1a \
-u sk_test_4LOIhlh19aUz8yFBLwMIxnBY: \
-d coupon=50OFF1MONTH

Тем не менее, это не очень полезно. Еще раз, документация Laravel немного элегантна, и в ней отсутствует какая-либо информация по этой теме.

Интересно, нужно ли мне просто заново создать объект подписки с новым купоном … Но это не идеально, потому что для этого нужен карточный токен.

Обновление 1

Я могу подтвердить, что это действительно применяет купон к подписка сам

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

Тем не менее, еще раз вопрос заключается в том, как можно добавить купон после факта.

4

Решение

Не похоже, что то, что я пытаюсь сделать, возможно, поэтому я нашел другой способ. Все, что я делаю, это меняю существующий план на текущий и использую withCoupon метод. Похоже, что это применяет купон к подписке и, похоже, не взимает плату с пользователя и не меняет его платежный период, но я могу ошибаться …

$company->subscription($company->stripe_plan)
->withCoupon($input['coupon_code'])
->swap();
3

Другие решения

Добавление купона в существующую подписку.
Вы также можете использовать метод кассира, как показано ниже:

try {
$user->applyCoupon('coupon_code');
return redirect()->back()->withMessage('Coupon Applied');
} catch (Exception $e) {
return back()->withError($e->getMessage());
}

При применении купона лучше всего обернуть его в блок try / catch, потому что если пользователь введет недействительный купон, Stripe вернет исключение с указанием причины сбоя.

0

По вопросам рекламы [email protected]