Сидоров Данил
RU EN DE
Telegram

Приём оплаты в TON через Telegram-бота

Бот выставляет счёт со ссылкой на Tonkeeper и сам засчитывает оплату, когда перевод приходит в сеть

Обложка кейса «Приём оплаты в TON через Telegram-бота»

Задача

Нужно было принимать оплату в TON прямо в Telegram без ручной сверки переводов. Ключи от кошелька нельзя держать на сервере, а каждый платёж должен однозначно находить свой счёт.

Решение

Бот на python-telegram-bot ведёт диалог и пишет счета в PostgreSQL. Фоновая задача в том же процессе раз в 20 секунд читает переводы через toncenter, идёт от последней обработанной транзакции и сопоставляет перевод со счётом по комментарию. Все запросы к базе параметризованы.

Решённые задачи

  • Сделал счёт на любую сумму с уникальным комментарием через меню бота
  • Дал кнопку в Tonkeeper с заполненными адресом, суммой и комментарием
  • Сделал наблюдатель, который читает кошелёк продавца и сверяет переводы со счетами
  • Засчитываю оплату только при совпадении комментария и сумме не меньше счёта
  • Снимаю неоплаченные счета по истечении срока и предупреждаю покупателя
  • Храню суммы в нанотонах целыми числами, без дробей с плавающей точкой
  • Обошёлся без приватных ключей: сервису нужен только публичный адрес

Результат

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

Технологии

Pythonpython-telegram-botasyncioPostgreSQLasyncpgtoncenter API

Источники

Ссылки подтверждают цифры в кейсе

Расскажите о задаче

Telegram