Как настроить оплату в Aiogram 3.4

from aiogram import Bot, Router
from aiogram.types import Message, LabeledPrice, PreCheckoutQuery, ContentType



router = Router()

bot = None  # Глобальная переменная для хранения bot
payments = None # Глобальная переменная для хранения оплаты


def set_bot(b: Bot):
    global bot
    bot = b  # Установите bot здесь

def payments_bot(p):
    global payments
    payments = p

PRICE = LabeledPrice(label="Подписка на 1 месяц", amount=500*100)  # в копейках (руб)

async def sub_bay(user_id):
    await bot.send_invoice(user_id,
                           title="Подписка на бота",
                           description="Активация подписки на бота на 1 месяц",
                           provider_token=payments,
                           currency="rub",
                           photo_url="https://www.aroged.com/wp-content/uploads/2022/06/Telegram-has-a-premium-subscription.jpg",
                           photo_width=416,
                           photo_height=234,
                           photo_size=416,
                           is_flexible=False,
                           prices=[PRICE],
                           start_parameter="one-month-subscription",
                           payload="test-invoice-payload")
    

# pre checkout  (must be answered in 10 seconds)
@router.pre_checkout_query_handler(lambda query: True)
async def pre_checkout_query(pre_checkout_q: PreCheckoutQuery):
    await bot.answer_pre_checkout_query(pre_checkout_q.id, ok=True)


# successful payment
@router.message(content_types=ContentType.SUCCESSFUL_PAYMENT)
async def successful_payment(message: Message):
    print("SUCCESSFUL PAYMENT:")
    payment_info = message.successful_payment.to_python()
    for k, v in payment_info.items():
        print(f"{k} = {v}")

    await bot.send_message(message.chat.id,
        f"Платеж на сумму {message.successful_payment.total_amount // 100} {message.successful_payment.currency} прошел успешно!!!")

Error

Traceback (most recent call last):
  File "/root/bot/bot.py", line 9, in <module>
    from handlers import user_commands, msg_user
  File "/root/bot/handlers/__init__.py", line 1, in <module>
    from . import user_commands
  File "/root/bot/handlers/user_commands.py", line 9, in <module>
    from subscribe import hour_sub, sub
  File "/root/bot/subscribe/sub.py", line 39, in <module>
    @router.pre_checkout_query_handler(lambda query: True)
AttributeError: 'Router' object has no attribute 'pre_checkout_query_handler'

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

Автор решения: Andrey comp
async def sub_bay(user_id):
    await bot.send_invoice(user_id,
                           title="Подписка на бота",
                           description="Активация подписки на бота на 1 месяц",
                           provider_token=payments,
                           currency="rub",
                           photo_url="https://www.aroged.com/wp-content/uploads/2022/06/Telegram-has-a-premium-subscription.jpg",
                           photo_width=416,
                           photo_height=234,
                           photo_size=416,
                           is_flexible=False,
                           prices=[PRICE],
                           start_parameter="one-month-subscription",
                           payload="test-invoice-payload")
    

@router.pre_checkout_query()
async def pre_checkout_query(pre_checkout_query: PreCheckoutQuery, bot: Bot):
    await bot.answer_pre_checkout_query(pre_checkout_query.id, ok=True)


@router.message(F.content_types == ContentType.SUCCESSFUL_PAYMENT)
async def successful_payment(message: Message):
    await message.answer('Оплата прошла успешно!')
→ Ссылка
Автор решения: Kodzima
@router.pre_checkout_query(lambda query: True)
async def pre_checkout_query(pre_checkout_q: types.PreCheckoutQuery) -> None:
    await pre_checkout_q.answer(ok=True)


@router.message(F.content_type == ContentType.SUCCESSFUL_PAYMENT)
async def successful_payment(message: types.Message) -> None:
    await message.answer("successful payment!")
→ Ссылка