не проходит оплата в telegram боте на aiogram python

Я использую aiogram версией 2.25... У меня не проходит оплата после ввода данных карт и нажатия кнопку оплаты. Телеграм просто крутит загрузку и потом выводит ошибку что лимит запроса исчерпан.

вот сам код

import asyncio
from aiogram import Bot, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
import config
from keyboards.Markup import Markup_keyboards
from aiogram.types import ContentTypes
from aiogram.dispatcher import Dispatcher


async def start_bot():
    storage = MemoryStorage()
    bot = Bot(token=config.BOT_TOKEN)
    dp = Dispatcher(bot, storage=storage)
    pre_checkout_q = types.PreCheckoutQuery
    dp.message_handler(commands = ['start'])(lambda message: send_welcome(message, bot))
    dp.pre_checkout_query_handler(lambda pre_checkout_q: pre_checkout_query(pre_checkout_q, bot))
    dp.message_handler(content_types = types.ContentTypes.SUCCESSFUL_PAYMENT)(lambda message: successful_payment_1(message, bot))

    try:
        await dp.start_polling()
    finally:
        await bot.session.close()


async def send_welcome(message: types.Message, bot):
    welcome_message = "Дарова, я бот для ани"
    await bot.send_message(message.chat.id, welcome_message, reply_markup=Markup_keyboards.main_menu_for_admin,
                           parse_mode='Markdown')
    await bot.send_invoice(message.from_user.id,
                           title="Оплата корзины",
                           description="Описание вашей корзины",
                           provider_token=config.PAYMENT_TOKEN,
                           currency='rub',
                           prices=[
                               types.LabeledPrice(
                                   label="Оплата корзины",
                                   amount=120 * 100
                               )
                           ],
                           max_tip_amount=50000,
                           suggested_tip_amounts=[10000, 15000, 20000, 30000],
                           start_parameter='pay',
                           payload='pay_marathon')


async def pre_checkout_query(pre_checkout_q: types.PreCheckoutQuery, bot: Bot):
    try:
        await bot.answer_pre_checkout_query(pre_checkout_q.id, ok=True)
    except Exception as e:
        print(f"Pre-checkout query error: {e}")


async def successful_payment_1(message: types.Message, bot: Bot):
    user_id = message.from_user.id
    payment_info = message.successful_payment.to_python()
    start_parameter = message.successful_payment.invoice_payload
    print(payment_info)

    # Добавляем ответ пользователю о успешной оплате
    success_message = "Спасибо за оплату! Ваш заказ успешно обработан."
    await bot.send_message(user_id, success_message)



if __name__ == '__main__':
    asyncio.run(start_bot())

все данные токенов указаны правильно


Ответы (1 шт):

Автор решения: Константин

вместо

dp.pre_checkout_query_handler(lambda pre_checkout_q: pre_checkout_query(pre_checkout_q, bot))
dp.message_handler(content_types = types.ContentTypes.SUCCESSFUL_PAYMENT)(lambda message: successful_payment_1(message, bot))

надо использовать:

dp.register_pre_checkout_query_handler(lambda pre_checkout_q=types.PreCheckoutQuery: pre_checkout_query(pre_checkout_q, bot))
dp.register_message_handler(lambda message: successful_payment_1(message, bot),content_types = types.ContentTypes.SUCCESSFUL_PAYMENT)
→ Ссылка