Чек-лист перед продом
Пройдите его, прежде чем принимать реальные платежи. Каждый пункт закрывает известный способ потерять деньги.
Ключи и доступ
- Ключ API хранится в менеджере секретов и используется только на сервере. Его нет в браузере, мобильном приложении, репозитории и логах.
- Секрет вебхуков хранится так же и отдельно от ключа API.
- Продукт обращается к API только по
https://: поhttp://ключ ушёл бы открытым текстом ещё до перенаправления — см. аутентификацию.
Вебхуки
- Подпись проверяется по сырому телу запроса, до разбора JSON.
- Подписи сравниваются за постоянное время.
- Вебхуки с
X-Timestamp, отличающимся от текущего времени больше чем на 5 минут, отклоняются. - Решение отдать товар принимается по ответу API, а не по телу вебхука.
- Повторная доставка того же события не приводит к повторной выдаче товара.
- Обработчик отвечает
2xxза секунды, а тяжёлую работу выполняет асинхронно.
Платежи
- Товар отдаётся только после подтверждения платежа, а не при первом появлении транзакции.
- Продукт определил, что делает при недоплате, переплате и платеже после дедлайна.
- Суммы обрабатываются как строки или целые числа в минимальных единицах, никогда как числа с плавающей точкой.
- Число знаков после запятой берётся для конкретного актива: у USDT в BNB Chain их 18, а не 6.
- Каждый заказ создаёт инвойс со своим
order_id, а повтор запроса после таймаута использует тот жеorder_id.
Отображение
- Адрес показывается пользователю целиком, без сокращений, вместе с сетью и активом.
- Пользователь предупреждён, что перевод в другой сети или другого токена не зачисляется автоматически.
Выплаты
- Адреса для выплат вносятся в вайтлист заранее: новый адрес становится доступен через 24 часа.
- Адрес для выплаты берётся из вайтлиста и никогда — из истории транзакций.
- Каждая выплата создаётся со своим
reference, а повтор использует тот жеreference.
Проверка
- Весь сценарий — создание инвойса, оплата, вебхук и проверка статуса через API — пройден на небольшой сумме до приёма реальных платежей. Разработчикам самого сервиса для этого есть локальное окружение и тестовые сети.