Техническое задание: Замена платежной системы в 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/чек).
  • Анти‑дубль и проверка номера транзакции при активации.
  • Рассылка статусов пользователю.