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

Пройдите его, прежде чем принимать реальные платежи. Каждый пункт закрывает известный способ потерять деньги.

## Ключи и доступ

- [ ] Ключ API хранится в менеджере секретов и используется только на сервере. Его нет в браузере, мобильном приложении, репозитории и логах.
- [ ] Секрет вебхуков хранится так же и отдельно от ключа API.
- [ ] Продукт обращается к API только по `https://`: по `http://` ключ ушёл бы открытым текстом ещё до перенаправления — см. [аутентификацию](https://stons.io/docs/authentication.md#сеть).

## Вебхуки

- [ ] Подпись проверяется по сырому телу запроса, до разбора JSON.
- [ ] Подписи сравниваются за постоянное время.
- [ ] Вебхуки с `X-Timestamp`, отличающимся от текущего времени больше чем на 5 минут, отклоняются.
- [ ] Решение отдать товар принимается по ответу API, а не по телу вебхука.
- [ ] Повторная доставка того же события не приводит к повторной выдаче товара.
- [ ] Обработчик отвечает `2xx` за секунды, а тяжёлую работу выполняет асинхронно.

## Платежи

- [ ] Товар отдаётся только после подтверждения платежа, а не при первом появлении транзакции.
- [ ] Продукт определил, что делает при недоплате, переплате и платеже после дедлайна.
- [ ] Суммы обрабатываются как строки или целые числа в минимальных единицах, никогда как числа с плавающей точкой.
- [ ] Число знаков после запятой берётся для конкретного актива: у USDT в BNB Chain их 18, а не 6.
- [ ] Каждый заказ создаёт инвойс со своим `order_id`, а повтор запроса после таймаута использует тот же `order_id`.

## Отображение

- [ ] Адрес показывается пользователю целиком, без сокращений, вместе с сетью и активом.
- [ ] Пользователь предупреждён, что перевод в другой сети или другого токена не зачисляется автоматически.

## Выплаты

- [ ] Адреса для выплат вносятся в вайтлист заранее: новый адрес становится доступен через 24 часа.
- [ ] Адрес для выплаты берётся из вайтлиста и никогда — из истории транзакций.
- [ ] Каждая выплата создаётся со своим `reference`, а повтор использует тот же `reference`.

## Проверка

- [ ] Весь сценарий — создание инвойса, оплата, вебхук и проверка статуса через API — пройден на небольшой сумме до приёма реальных платежей. Разработчикам самого сервиса для этого есть локальное окружение и тестовые сети.
