Если ты думаешь, что Laravel Cashier — это «просто установил пакет и принимаешь деньги», то добро пожаловать в реальность. Деньги не любят простоты. Тут и Stripe со своими заморочками, и миграции, которые внезапно не те.

Laravel Cashier — пакет от Laravel для работы с платежами и подписками. На бумаге всё красиво: подписки, одноразовые платежи, работа со счетами. На деле — если у тебя не горело жопой от Stripe API, значит, ты ещё не успел настроить всё это в проде.

Установка: начало боли

composer require laravel/cashier

Звучит невинно. Но это только дверь в кроличью нору. Дальше Cashier требует, чтобы твоя таблица users имела специфические поля:

stripe_id
card_brand

и ещё несколько. Если у тебя кастомная модель юзера или БД не «по канону Laravel», готовься писать миграции руками.

Настройка: .env превращается в кладбище

CASHIER_DRIVER=stripe
STRIPE_KEY=your_stripe_key
STRIPE_SECRET=your_stripe_secret

С виду легко. Но готовься к сюрпризам: Stripe требует миллион настроек в личном кабинете или внезапно может не принять твой запрос, потому что «валюта не та» или еще что-то не совпадает.

User-модель: теперь он ещё и кассир

В User добавляем трейт Billable:

use Laravel\Cashier\Billable;

class User extends Authenticatable
{
    use Billable;
}

И думаешь: «Всё, можно брать деньги». Но нет. Теперь твоя модель юзера хранит пол-Stripe внутри себя, и ты превращаешься из программиста в бухгалтера с доступом к API.

Подписки: просто строка кода… ага

$user = User::find(1);
$user->newSubscription('default', 'premium')->create($creditCardToken);

Выглядит как магия. Но если токен кривой — привет, Stripe API error. Если у пользователя уже есть подписка — привет, дубли.

Вебхуки: та ещё свалка

Laravel Cashier даёт готовый контроллер, который умеет принимать события:

Route::post(
    'stripe/webhook',
    '\Laravel\Cashier\Http\Controllers\WebhookController@handleWebhook'
);

Звучит красиво. Но знай: вебхуки Stripe прилетают пачками, иногда вразнобой, и если ты не умеешь отлаживать это дело — утонешь в хаосе.

Тестирование: готовься материться

Cashier вроде как «всё обрабатывает». Но на тестах ты быстро поймёшь, что:

  • Stripe-тестовые карты ещё норм, но у них есть свои сценарии ошибок (просрочена, украдена, недостаточно средств).
  • Тестировать сложнее, чем реальную оплату: sandbox может вести себя не так, как прод.
  • В итоге ты пишешь тесты, а потом руками проверяешь в продакшне — потому что на бумаге всё не сходится.

Итог

Laravel Cashier — это не «поставил пакет и забыл». Это костыль с удобным интерфейсом, но под ним — та же самая боль со Stripe.

  • Хочешь подписки? Будь готов к вебхукам.
  • Хочешь платежи? Разберись в миграциях и токенах.
  • Хочешь спать спокойно? Забудь, пока сам всё не протестируешь в боевых условиях.

Cashier реально упрощает жизнь, но не избавляет от геморроя. Это как хороший шуруповёрт: инструмент удобный, но если руки из жопы — дырка будет кривой.