Обработка отклонённой транзакции пользователем
Отличишь отказ пользователя (код 300) от других ошибок sendTransaction и корректно обновишь UI.
Отказ — нормальный исход
Пользователь часто закрывает кошелёк или жмёт Reject. В TON Connect это не «падение сети», а ответ протокола: USER_REJECTS_ERROR, код 300. UI должен показать спокойный статус («Отменено»), а не красный «Error».
Никогда не предполагай, что после sendTransaction транзакция точно ушла в сеть.
Разбираем ошибку Reject
Коды протокола, с которыми сталкиваешься чаще всего:
| Код | Имя | Что делать в UI |
|---|---|---|
| 300 | USER_REJECTS_ERROR | «Отменено», без ретрая по кругу |
| 1 | BAD_REQUEST_ERROR | Проверь messages / validUntil / адрес |
| 400 | METHOD_NOT_SUPPORTED | Кошелёк не умеет метод — другой кошелёк или упростить запрос |
Как это работает
sendTransaction возвращает Promise: resolve → пользователь подтвердил и кошелёк отдал boc; reject → отказ или ошибка.
UserRejectsError / code === 300 — сознательный отказ, не баг твоего кода.
После Reject не помечай заказ как оплаченный и не списывай баланс в своём бэкенде — on-chain подтверждения нет.
Частые ошибки
Показываешь Reject как «ошибка сервера» → пользователь думает, что сломалось приложение. Отделяй 300 от остальных кодов.
Сразу открываешь модалку снова после Reject → выглядит как спам. Дай кнопку «Повторить» по желанию пользователя.
Считаешь отсутствие boc успехом → успех только resolve Promise (и дальше — проверка в сети, если критично для бизнеса).
Что дальше
- Отправка транзакции через TON Connect — формат request
- Отключение сессии и повторное подключение — сброс сессии после смены аккаунта
- Ошибка: TON Connect — Wallet not connected — отдельный кейс до вызова send
Материалы gramdocs.tech носят образовательный характер и не являются финансовой, юридической или инвестиционной рекомендацией. Работа с блокчейном TON и токеном Gram связана с рисками потери средств. Правовая информация