Техническое задание
Telegram-бот для продажи цифрового товара через платежный шлюз и API поставщика
Технологии
Python 3.11+
Aiogram 3.x
FastAPI
SQLite
Aiosqlite
Webhook для платежей
.env для конфигурации
1. БАЗА ДАННЫХ
Таблица users:
user_id (Telegram ID)
username
balance_uah
referer_id
registration_date
Таблица orders:
order_id
user_id
game_username
game_user_id
quantity
price
status
created_at
Статусы заказов:
Pending
Queued
Queued_Deferred
Completed
Error
Cancelled
Таблица payments:
payment_id
user_id
amount
status
created_at
Статусы:
Таблица settings:
product_rate
referral_reward
2. ПОЛЬЗОВАТЕЛЬСКАЯ ЧАСТЬ
Главное меню
Кнопки:
👤 Профиль
💰 Пополнить баланс
📦 Купить товар
📈 Актуальный курс
🛟 Поддержка
Профиль
Пользователю показывается:
Пример:
ID: 123456789
Username: XXXX_XX
Баланс: 500 грн
Приглашено друзей: 12
Ваша реферальная ссылка: ссылка
3. РЕФЕРАЛЬНАЯ СИСТЕМА
При переходе по реферальной ссылке:
бот сохраняет referer_id.
После успешного пополнения баланса приглашенным пользователем:
4. ПОПОЛНЕНИЕ БАЛАНСА (СВЯЗАНО С WEBHOOK)
Пользователь нажимает:
💰 Пополнить баланс
Бот запрашивает сумму.
Пользователь вводит сумму.
Далее:
Создается запись в payments.
Генерируется уникальный payment_id.
Через WayForPay, Monobank и т.д. создается инвойс.
Пользователь получает кнопку:
Оплатить
После успешной оплаты:
Платежный шлюз отправляет webhook.
Бот проверяет цифровую подпись.
Находит payment_id.
Проверяет, что платеж еще не обрабатывался.
Изменяет статус на success.
Зачисляет деньги на balance_uah.
Начисляет реферальный бонус (при необходимости).
Отправляет пользователю сообщение:
"Баланс успешно пополнен на ХХ грн."
5. ПОКУПКА ТОВАРА
Пользователь нажимает:
📦 Купить товар
ШАГ 1
Бот запрашивает количество.
Пользователь вводит количество.
ШАГ 2
Бот рассчитывает стоимость:
стоимость = количество × текущий курс
Показывает:
количество
курс
итоговую цену
Кнопка:
Продолжить
ШАГ 3
Проверка баланса.
Если balance_uah недостаточный:
Бот предлагает пополнить баланс.
Если достаточный:
Списывает средства.
ШАГ 4
Бот берет Username.
ШАГ 5
Бот автоматически подставляет введенный Username в форму заказа поставщика.
Пользователь вводит только:
ШАГ 6
Бот показывает пользователю итоговую информацию:
Никнейм:
GamePass ID:
Количество:
Стоимость:
Кнопка: Подтвердить заказ
ШАГ 7
После подтверждения:
Создается запись в orders.
Данные отправляются поставщику через API.
Сохраняется order_id поставщика.
ШАГ 8
Поставщик через webhook изменяет статус заказа.
Возможные статусы:
Pending
Queued
Queued_Deferred
Completed
Error
Cancelled
При каждом изменении статуса:
При статусе Completed:
"Ваш заказ успешно выполнен."
При статусе Error или Cancelled предлагается обратиться в поддержку
6. АКТУАЛЬНЫЙ КУРС
Кнопка:
📈 Актуальный курс
Показывает текущую стоимость единицы товара.
Пример:
1 единица = 1 грн
Кнопка:
Купить
7. ПОДДЕРЖКА
Кнопка:
🛟 Поддержка
Отображает:
8. АДМИН-ПАНЕЛЬ
Команда:
/admin
Доступ только для ADMIN_ID.
Статистика
Показать:
Рассылка
Админ вводит текст.
Бот отправляет сообщение всем пользователям.
Должен быть защита от FloodWait.
Изменить курс
Админ вводит новый курс.
Значение сохраняется в settings.
Новый курс сразу используется во всех расчетах.
Выдать баланс
Админ вводит:
Бот начисляет средства на balance_uah.
Записывается лог операции.
9. БЕЗОПАСНОСТЬ
Проверка подписи webhook платежей.
Защита от двойного зачисления платежа.
Защита от повторной обработки одного заказа.
Проверка ADMIN_ID перед открытием админки.
Все секреты хранить в .env.
Дополнительные требования
- Код должен быть структурирован по папкам
- Использование .env для конфигурации
- Асинхронный код
- Комментарии в коде
- Инструкция по запуску
- Возможность запуска на VPS Linux
От исполнителя прошу
- Ориентировочную стоимость.
- Ориентировочные сроки.
- Какие платежные системы уже интегрировали ранее.