Создайте локальный заказ
До запроса сохраните уникальный client_order_id, количество, срок и получателя. Ограничение уникальности в базе защитит от параллельного создания одной операции. Это технический пример, а не клиентский кейс.
Получите точную котировку
GET /prices/quote должен соответствовать фактическому заказу. Сохраните quote_id, сумму и expires_at. Используйте целые SUN или точный десятичный тип. При изменении параметров запросите новую котировку.
Подпишите отправляемые байты
Храните ключи на сервере. Сериализуйте JSON один раз и подпишите именно отправляемое тело по спецификации. Исключите секреты и заголовки авторизации из журналов.
Сохраните ключ идемпотентности
Кроме client_order_id, POST /orders требует Idempotency-Key из 8–128 видимых ASCII-символов. Сохраните ключ и точное тело до отправки. При повторе неопределённого запроса оставьте их прежними, но обновите timestamp, nonce и подпись. Меняйте просроченную котировку только после выяснения результата предыдущего запроса. Правила Webhook приведены в публичном Skill; активация адреса не имеет Webhook и требует опроса.
Проверяйте неопределённый результат
После тайм-аута POST /orders вызовите GET /orders?client_order_id={client_order_id}. Отслеживайте существующий заказ. При допустимом повторе сохраняйте идентификатор и параметры; конфликт идемпотентности требует проверки.
Не путайте принятие с доставкой
Сохраняйте платформенный номер и переходы статуса. Обновляйте исполнение по конечному результату и свидетельству доставки, а не только HTTP-успеху. Сохраняйте ошибки и состояния проверки для операторов.
Проверяйте уведомления
Верифицируйте подпись Webhook по контракту и исключайте повторы по ID события. Подтверждайте приём после надёжного сохранения или обработки. При расхождении состояний выполняйте сверку через запрос заказа.
Ограничивайте повторы
Используйте тайм-ауты, ограниченную экспоненциальную задержку и бюджет повторов. Записывайте номера и безопасные коды ошибок. До запуска проверьте недостаток баланса, просроченную котировку, дубликаты, тайм-аут после принятия и неверную подпись. Формат запросов задаёт публичный контракт.
Ресурсы для разработчиков
Открытая спецификация и серверный пример клиента. Читать можно без входа; для API нужен активированный аккаунт продавца.
https://api.tronow.io/openapi/v1
| HTTP | API |
|---|---|
GET | /prices/quote |
POST | /orders |
GET | /orders |
GET | /orders/{order_id} |
POST | /address-activations |
GET | /address-activations |
GET | /address-activations/{activation_id} |
GET | /account/balance |