@ubirust

Как использовать aiogram + flask (or only aiogram) для обработок платежей в боте телеграм?

У меня есть бот в телеграм, написан он на python (использует библиотеку aiogram), работает на webhook. Мне нужно обрабатывать платежи на платную подписку в бот (использую в качестве платежки - yoomoney).

Понятно как можно это сделать на Flask: через его метод request ловить http уведомления, которые присылаются от yoomoney (в yoomoney можно указать url для уведомлений, куда должны приходить статусы платежей по типу "payment.succeeded")
63eb4860285f2693553769.png

Короче говоря на Flask норм удается проверить статус платежа. Суть в том, что бот написан на aiogram и запуск бота осуществляется по команде:
if __name__ == '__main__':
    try:
        start_webhook(
            dispatcher=dp,
            webhook_path=WEBHOOK_PATH,
            on_startup=on_startup,
            on_shutdown=on_shutdown,
            skip_updates=True,
            host=WEBAPP_HOST,
            port=WEBAPP_PORT
        )
    except (KeyboardInterrupt, SystemExit):
        logger.error("Bot stopped!")


И если просто в этом коде прописать запуск приложения на flask, чтобы прослушивать ответы от yoomoney, то будет выполняться ЛИБО команды(самого бота) от aiogram ЛИБО запуск flask, в зависимости от того, что будет стоять первым в коде.

По факту не получается одновременно использовать flask и aiogram без многопоточности. Можно ли как то без flask в aiogram отслеживать то, что приходят на мой сервер с другого сервера (yoomoney)? Либо как грамотнее использовать связку aiogram + flask ?
  • Вопрос задан
  • 2232 просмотра
Решения вопроса 1
drygdryg
@drygdryg
Python-разработчик
Flask — синхронный WSGI-фреймворк: в нём используется блокирующий ввод-вывод (I/O). aiogram — асинхронный фреймворк: в нём используется asyncio для неблокирующего I/O. Когда вы запускаете Flask-приложение (например, с помощью сервера Werkzeug), вы, говоря простыми словами, блокируете ввод-вывод асинхронному веб-серверу aiohttp, который используется "под капотом" aiogram для обработки входящих webhook-запросов.
Вы можете запускать Flask-приложение в отдельном процессе (это лучше, чем в отдельном потоке), либо использовать для своего веб-хука сервер aiohttp вместо Flask c тем же aiohttp-приложением, которое использует aiogram, просто добавив в него нужные маршруты и хэндлеры. Пример такого совмещения с aiogram v3: https://github.com/aiogram/aiogram/blob/dev-3.x/ex...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы