# Настройка Stripe

## Описание

Интеграция Stripe для обработки платежей за заказы. Используется Stripe Checkout для безопасной обработки платежей.

## Установка

### 1. Установка пакета Stripe PHP SDK

```bash
composer require stripe/stripe-php
```

### 2. Настройка переменных окружения

Добавьте следующие переменные в ваш `.env` файл:

```env
# Stripe API ключи
STRIPE_KEY=pk_test_...  # Публичный ключ (Publishable Key)
STRIPE_SECRET=sk_test_...  # Секретный ключ (Secret Key)
STRIPE_WEBHOOK_SECRET=whsec_...  # Секрет webhook (Webhook Signing Secret)

# URL фронтенда для редиректов после оплаты
FRONTEND_URL=https://kartulirest.de
```

### 3. Получение Stripe ключей

1. Зарегистрируйтесь на [Stripe](https://stripe.com/)
2. Перейдите в **Developers** → **API keys**
3. Скопируйте **Publishable key** в `STRIPE_KEY`
4. Скопируйте **Secret key** в `STRIPE_SECRET`

### 4. Настройка Webhook

1. В Stripe Dashboard перейдите в **Developers** → **Webhooks**
2. Нажмите **Add endpoint**
3. Укажите URL: `https://kartulirest.de/api/stripe/webhook`
4. Выберите события для прослушивания:
   - `checkout.session.completed`
   - `payment_intent.succeeded`
   - `payment_intent.payment_failed`
5. После создания webhook скопируйте **Signing secret** в `STRIPE_WEBHOOK_SECRET`

## Использование

### Создание заказа с оплатой

При создании заказа через `POST /api/orders` автоматически создается Stripe Checkout Session:

```json
{
  "success": true,
  "data": {
    "order": {...},
    "stripe_session_id": "cs_test_...",
    "checkout_url": "https://checkout.stripe.com/..."
  }
}
```

Клиент перенаправляется на `checkout_url` для оплаты.

### Обработка webhook

Webhook обрабатывает следующие события:

- **checkout.session.completed** - Успешное завершение оплаты
- **payment_intent.succeeded** - Успешный платеж
- **payment_intent.payment_failed** - Неудачный платеж

При получении события статус заказа обновляется автоматически:
- `payment_status` → `paid` (при успехе)
- `payment_status` → `failed` (при неудаче)
- `stripe_payment_intent_id` сохраняется в заказе

## Маршруты

### POST /api/orders
Создание заказа с Stripe Checkout Session

### POST /api/stripe/webhook
Обработка webhook от Stripe (без CSRF защиты)

## Безопасность

- Webhook маршрут исключен из CSRF проверки в `VerifyCsrfToken`
- Проверка подписи webhook через `Stripe-Signature` header
- Все Stripe ключи хранятся в `.env` файле
- Используется HTTPS для всех запросов

## Тестирование

### Тестовые карты Stripe

- **Успешная оплата**: `4242 4242 4242 4242`
- **Неудачная оплата**: `4000 0000 0000 0002`
- **3D Secure**: `4000 0025 0000 3155`

### Тестирование webhook локально

Используйте [Stripe CLI](https://stripe.com/docs/stripe-cli) для пересылки webhook на локальный сервер:

```bash
stripe listen --forward-to localhost:8000/api/stripe/webhook
```

## Production

### Переход на Production ключи

1. В Stripe Dashboard переключитесь на **Live mode**
2. Скопируйте Production ключи в `.env`:
   - `STRIPE_KEY` (pk_live_...)
   - `STRIPE_SECRET` (sk_live_...)
   - `STRIPE_WEBHOOK_SECRET` (whsec_...)
3. Обновите webhook endpoint на Production URL
4. Протестируйте создание заказа и обработку webhook

## Troubleshooting

### Webhook не получает события

1. Проверьте, что webhook endpoint доступен из интернета
2. Убедитесь, что `STRIPE_WEBHOOK_SECRET` правильный
3. Проверьте логи Laravel: `storage/logs/laravel.log`
4. В Stripe Dashboard проверьте статус webhook и последние события

### Ошибка при создании Checkout Session

1. Проверьте, что `STRIPE_SECRET` правильный
2. Убедитесь, что сумма больше 0
3. Проверьте формат валюты (должна быть 'eur')
4. Проверьте логи Laravel для деталей ошибки

### Заказ создан, но оплата не обработана

1. Проверьте, что webhook настроен правильно
2. Убедитесь, что события выбраны в Stripe Dashboard
3. Проверьте логи webhook в Stripe Dashboard
4. Проверьте логи Laravel для ошибок обработки

