Техническое задание: Замена платежной системы в Telegram боте на Python
Текущий статус проекта
Имеется рабочий Telegram-бот (Python / aiogram), который принимает оплату через другой платежный шлюз (через API/инвойсы). База логики подписок: пользователь оплачивает тариф (1, 3, 6, 12 месяцев), и бот автоматически продлевает подписку.
Новая задача
Заменить текущий механизм на систему, в которой:
- бот отображает пользователю фиксированные реквизиты (единые для всех);
- для каждой оплаты генерируется уникальная сумма (например 100.1 руб), имеющая срок действия 60 минут;
- пользователь вручную отправляет эту точную сумму на указанные реквизиты;
- бот автоматически ищет оплату по параметрам (сумма + сеть + реквизиты, возможно комментарий) и активирует подписку сразу после подтверждения получения транзакции.
Таким образом, вместо инвойсов или ПэйПэй (PayPal) бот работает по принципу «фиксированные реквизиты - смена тюнера (суммы) под каждую покупку».
Основные требования к реализации
1. Формирование уникальной суммы
- Для каждой транзакции генерируется уникальная сумма (2 знака после запятой, ± копейки, например ₽100.56 или ₽100.1).
- Сумма действительна только в течение 60 минут с момента выдачи пользователю.
- Ограничение повторов: пользователь не сможет запросить новую сумму ранее, чем через 60 минут после выданного ранее платёжного чека, чтобы исключить возможность оплаты старой или параллельной попытки.
2. Вывод пользовательского интерфейса
- Показ точных реквизитов и рассчитанной суммы.
- Лимит повторного запроса, если за 1 час такой запрос уже осуществлялся (чтобы не дублировать сумму в один кошелек).
3. Проверка входящих платежей
- Реализовать логику, которая раз в несколько минут проверяет по API кассы/платежной системы наличие входящего перевода с заданными параметрами (сумма, признак уникальности системы, адрес карты/счета).
- При подтверждении списания или получения средств:
4. Активация подписки
- Подписка активируется только после онлайн-конфирмации прошедшего платежа (сумма - 100%, получена целевым назначением, период 60 мин).
- Защита от повторного использования: одна и та же транзакция не учитывается дважды (проверка по её номеру и старой/чужой сети).
5. Сообщения и ограничение по времени
- Во время ожидания платежа:
⏳ Проверяем платёж, это может занять несколько минут
- При истечении лимита (60 мин):пользователю приходит:
⏱ Время оплаты истекло. Запросите новую сумму для оплаты
и выданная сумма аннулируется; далее бот отправляет свежий счет-запрос.
Технические заметки
- Язык платформы - Python, библиотека - aiogram.
- Логика верификации не является платежным шлюзом/CБП напрямую - требуется прикрепиться к средствам API реального банка/пэйчто‑то процессинга.
- Тэглайн работы: «Никакого генератора ccылок (invoice), пряная форма денег - по копейке/кц̸ одним кошельком (проверка входящего остатка или выплаты)».
Что нужно итогово
- Код на Питоне (aiogram), реализующий выше перечисленное.
- Обработка Таймаута 60 мин на сумму (фоновое кэширование id‑запросов UUID/чек).
- Анти‑дубль и проверка номера транзакции при активации.
- Рассылка статусов пользователю.