Laravel не применяет купон, используя Billing / Cashier

Я пытаюсь применить купон к подписке пользователя при создании.

Для этого я использую следующий код:

$user = Auth::user();
if(!empty($request->coupon)){
$user->subscription('monthly')->withCoupon($request->coupon)->create($request->stripeToken);
} else {
$user->subscription('monthly')->create($request->stripeToken);
}

Я проверил значение $request->coupon и он содержит мой купон. Купон существует и находится в полосе (это проверено программно, поэтому я знаю, что купон в порядке).

Подписка создается внутри Stripe, но выставляется счет на полную сумму, без учета купона.

Купон находится в тестовой среде, как и веб-сайт — транзакция проходит и в тестовой среде.

1

Решение

Проверка, установлено ли свойство объекта с помощью empty Функция не будет иметь желаемого эффекта, потому что класс должен иметь __isset магический метод, определенный для empty работать на недоступных свойствах.

Что в сторону, Http\Illuminate\Request класс использует __get для доступа к входным параметрам, что означает, что __isset не будет даже работать в этом случае, потому что coupon свойство не определено внутри класса. Таким образом, ваше состояние почти наверняка else блок с вашим текущим кодом (даже если у вас есть coupon входной параметр присутствует).

Вот почему метод has существует, чтобы определить, содержит ли запрос непустое значение для элемента ввода. Так что используйте это вместо:

if ($request->has('coupon'))
2

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

Других решений пока нет …

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