Как принимать USDT в TRON через API
Подключите свой кошелёк TRON к странице оплаты, создайте платёж на точную сумму USDT и выполняйте заказы после проверенного вебхука.
Как проходит платёж
Клиент отправляет USDT в TRON напрямую на ваш кошелёк. Сервер создаёт страницу оплаты через Dedyx. Dedyx проверяет перевод и отправляет событие PAID с подписью; приложение решает, как выполнить заказ.
Процесс интеграции: Создание → Оплата → Проверка → Вебхук. Открытая страница оплаты или скриншот не подтверждают платёж.
1. Подготовьте аккаунт и кошелёк
Запросить доступ к бете : укажите проект, сценарий оплаты, ожидаемую суточную нагрузку и контакт для интеграции. Сохраните API-ключ и отдельный секрет ротации на сервере. Проверяйте даты беты, общую и суточную квоты через GET /api/v1/merchant/limits.
Используйте свой адрес TRON. Не передавайте Dedyx приватный ключ, seed-фразу или вход на биржу. Кошелёк клиента должен поддерживать USDT TRC-20 и оплачивать собственную комиссию сети TRON.
2. Сначала настройте вебхук
curl -X PUT https://api.dedyx.com/api/v1/merchant/webhook \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://your-company.example/webhooks/dedyx"}'Используйте публичный HTTPS-адрес на порту 443. Безопасно сохраните полные signing_key и key_id из первого ответа; секрет показывается один раз. Приёмник должен проверять исходное тело до разбора JSON и обрабатывать повторы. См. условия вебхуков.
3. Создайте и сохраните заказ
curl -X POST https://api.dedyx.com/api/v1/payments \
-H "X-API-Key: YOUR_API_KEY" \
-H "Idempotency-Key: order-1024-v1" \
-H "Content-Type: application/json" \
-d '{"merchant_wallet":"YOUR_TRON_ADDRESS","amount":"49.00","description":"Order #1024"}'Сохраните поля запроса и ключ идемпотентности до отправки. Привяжите payment_id, expected_amount и payment_url к своему заказу. При таймауте повторяйте тот же запрос с тем же ключом; не создавайте новый ключ. Стандартное хранение повторов — 24 часа. После его истечения или неопределённого окончательного результата сначала сверяйте состояние, затем создавайте другой заказ.
4. Передайте клиенту страницу оплаты
Перенаправьте на полученный payment_url. Добавьте ?lang=ru для явного русского языка; иначе страница выберет поддерживаемый язык. Клиент отправляет ровно отображённую сумму USDT в TRON (TRC-20) до указанного срока. Сетевая комиссия оплачивается отдельно от суммы, которая должна поступить получателю.
Одновременные заказы на одном адресе кошелька должны иметь разные точные суммы. Незавершённый заказ PENDING/CHECKING/REVIEW резервирует сумму на адресе. Каждый заказ требует одного полного точного перевода; частичные переводы не суммируются. Повторное использование суммы имеет ограничения сопоставления, описанные в Платежи.
5. Проверьте и выполните один раз
Проверьте X-Dedyx-Signature, время и ID ключа по исходным байтам запроса, затем сравните ID в заголовке с payload.event_id. Сопоставьте payment_id с сохранённым заказом, требуйте PAID и точно сравните сумму. При необходимости прочитайте защищённый details для проверки кошелька и идентификаторов перевода.
Атомарно сохраняйте ID события вместе с бизнес-действием заказа в своей базе. Повторная доставка должна возвращать 2xx без повторного выполнения. Если нужно вызвать другой сервис, в той же транзакции поставьте идемпотентную задачу доставки в очередь, а не вызывайте сервис внутри транзакции. Пример транзакции PostgreSQL.
Исключения перед запуском
Недостаточная, избыточная сумма и несколько частичных переводов не считаются одним точным платежом. Истёкшие и отменённые заказы не становятся PAID автоматически при обнаружении перевода. Своевременный перевод, найденный после окончательного истечения, требует сверки. Возвраты и поддержка клиентов остаются у продавца.
Проверьте таймауты, 429/503, недоступность приёмника, повторы, истечение / отмену и восстановление после перезапуска. Обработка ошибок и Вопросы и ответы описывает эти случаи.