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

Используйте ключ `egn_test_…`. Тестовые платежи полностью повторяют боевой поток: страница оплаты, QR, смена статусов, вебхуки, возвраты. Деньги при этом не списываются.

## Что стоит за test-режимом

| Настройка EGN Pay | `provider` в `/api/v1/me` | Поведение |
|---|---|---|
| Задан тестовый терминал Т-Банка (`…DEMO`) | `tbank` | Платёж создаётся в Т-Банке. Оплату эмулирует метод `SbpPayTest`, статус приходит обычным уведомлением банка |
| Тестовый терминал не задан | `emulator` | Т-Банк не вызывается. QR содержит фиктивную ссылку НСПК, статус меняется сразу |

## Симуляция оплаты

На странице тестового платежа есть блок «Тестовый платёж» с кнопками:

- **Симулировать оплату** — платёж станет `succeeded`, придёт `payment.succeeded`.
- **Отказ** — платёж станет `failed`, придёт `payment.failed`.

То же самое через API, например в автотестах:

```bash
curl -X POST https://pay.egnetwork.ru/api/public/payments/pay_…/simulate \
  -H "Content-Type: application/json" \
  -d '{"outcome":"success"}'     # success | rejected | expired
```

Для live-платежей метод вернёт `403 live_payment`.

## Чек-лист перед запуском

- [ ] Платёж создаётся, `payment_url` открывается
- [ ] Вебхук доходит, подпись проверяется, ответ `2xx`
- [ ] Повторный вебхук не выдаёт товар второй раз
- [ ] Повторный `POST /payments` с тем же `order_id` не создаёт дубль
- [ ] Страница `return_url` проверяет статус через API, а не по параметру `status`
- [ ] `payment.expired` и `payment.failed` корректно закрывают заказ
- [ ] Возврат (`/refund`) отражается у вас в системе
- [ ] Заменили `egn_test_` на `egn_live_`
