# Песочница

Песочница — отдельное окружение, где интеграцию можно проверить целиком, не двигая
деньги. API, подпись, лимиты и ошибки там такие же, как в бою.

| | Песочница |
| --- | --- |
| API | `{{base_url}}` песочницы — выдаётся вместе с доступом |
| Кабинет | `{{cabinet_url}}` песочницы |
| Токен | начинается с `nl_test_` |
| Подпись запросов | обязательна, как в бою |

!!! info "Раздел дописывается"
    Песочница сейчас доделывается. Ниже — как она будет работать. Места, которые ещё
    могут поменяться, отмечены **TBD**. Следите за [изменениями](changelog.md).

## Как устроена { #how-it-works }

1. **Тестовый проект.** В кабинете песочницы включите у проекта тестовый режим.
   Заявки такого проекта не проводят настоящих платежей. У тестовой заявки в ответе
   `is_test: true`.
2. **Тестовые реквизиты.** В ответ на создание заявки приходят тестовые реквизиты:
   тестовый номер телефона для СБП или тестовый номер карты. Переводить по ним ничего
   не нужно.
3. **Исход заявки задаёте вы.** Отметьте заявку оплаченной или отменённой — из кабинета
   или вызовом API (**TBD**).
4. **Результат читайте через API.** Тестовые заявки автоматически callback не получают
   (**TBD**: способ получить callback по тестовой заявке ещё проектируется). Итоговый статус
   читайте через `GET /api/v1/payments/{id}`; формат тела callback-а и его подпись проверяйте
   на [проверочном примере](callbacks.md#test-vector).

## Задать исход заявки { #outcome }

!!! warning "TBD: API эмуляции исхода"
    Метод API, которым можно задать исход тестовой заявки, ещё проектируется. Пока
    используйте кнопки в карточке заявки в кабинете песочницы. Когда метод появится,
    здесь будут запрос, ответ и примеры на всех языках.

| Что хотите проверить | Что сделать |
| --- | --- |
| Успешная оплата | Отметить заявку оплаченной → статус `completed` |
| Отказ или отмена | Отменить заявку → статус `canceled` |
| Истёкший срок | Создать заявку и не трогать её дольше срока заявки проекта (по умолчанию 15 минут) → `canceled` |
| Идемпотентность | Отправить тот же запрос дважды → `201`, затем `200` с той же заявкой |
| Конфликт номера | Тот же `merchant_payment_id` с другой суммой → `409 payment_idempotency_conflict` |
| Повтор nonce | Отправить один и тот же подписанный запрос дважды → `409 request_replayed` |
| Неверная подпись | Изменить тело после подписи → `401 signature_invalid` |

## Что отличается от боя { #differences }

- Деньги не двигаются, реквизиты ненастоящие.
- Тестовые заявки не получают callback автоматически и отмечены `is_test: true`.
  У песочницы свой `{{base_url}}` и токен `nl_test_`.
- Токен, ключ подписи и секрет callback-ов у песочницы свои. Для боя выпустите новые.
- Адрес API другой: держите его в настройке — см. [Окружения](index.md#environments).