Я пытаюсь применить купон к подписке пользователя при создании.
Для этого я использую следующий код:
$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, но выставляется счет на полную сумму, без учета купона.
Купон находится в тестовой среде, как и веб-сайт — транзакция проходит и в тестовой среде.
Проверка, установлено ли свойство объекта с помощью empty
Функция не будет иметь желаемого эффекта, потому что класс должен иметь __isset
магический метод, определенный для empty
работать на недоступных свойствах.
Что в сторону, Http\Illuminate\Request
класс использует __get
для доступа к входным параметрам, что означает, что __isset
не будет даже работать в этом случае, потому что coupon
свойство не определено внутри класса. Таким образом, ваше состояние почти наверняка else
блок с вашим текущим кодом (даже если у вас есть coupon
входной параметр присутствует).
Вот почему метод has
существует, чтобы определить, содержит ли запрос непустое значение для элемента ввода. Так что используйте это вместо:
if ($request->has('coupon'))
Других решений пока нет …