Почему в telegram боте на aiogram (paymaent) функции pre_checkout_query, successful_payment могут не вызываться?

Рейтинг: 0Ответов: 1Опубликовано: 10.04.2023

Я в ступоре. Уже как только не изгалялся, но pre_checkout_query_handler и successful_payment просто не отрабатывают (понял т. к. print не выдаёт) payment_token есть и подключён к боту (тестовый на сбербанк). Сообщение с кнопкой покупки появляется. Но при попытке нажать на это сообщение, открывается окно "Checkout (Test)" с значком загрузки, картинкой, заголовком и описанием. А после, закрывается.

Код отвечающий за обработку платежа:

 PRICES = [LabeledPrice(label='Купить vip',amount=1000)]

@dispatherInstance.message_handler(commands=['buy'])
async def buy_process(message: Message):
    print("buy")
    await bot.send_invoice(message.chat.id,
                           title="title",
                           description="description",
                           provider_token=PAYMENTS_TOKEN,
                           currency='RUB',
                           photo_url="https://upload.wikimedia.org/wikipedia/commons/6/63/Icon_Bird_512x512.png",
                           photo_height=512,
                           photo_width=512,
                           photo_size=512,
                           need_email=True,
                           need_phone_number=True,
                           is_flexible=True,
                           need_shipping_address=False,
                           prices=PRICES,
                           start_parameter='example',
                           payload='some_invoice',
                           max_tip_amount=100*500)


@dispatherInstance.pre_checkout_query_handler(lambda query: True)
async def checkout_process(pre_checkout_query: types.PreCheckoutQuery):
    print("checkout_process")
    await bot.answer_pre_checkout_query(pre_checkout_query.id, ok=True)

@dispatherInstance.message_handler(content_types=ContentType.SUCCESSFUL_PAYMENT)
async def successful_payment(message: Message):
    print("successful_payment")
    await bot.send_message(
        message.chat.id,
        "thanks"+ str(message)
    )

Ответы

▲ 0

Проверь если используешь состояния, они могут это дело перехватывать. Комментируй все хендлеры до единого, пока не найдешь кто именно перехватывает.

    @dp.pre_checkout_query_handler(state='*')
    async def process_pre_checkout_query(pre_checkout_query: types.PreCheckoutQuery): 

Я сам очень долго сидел с этой проблемой, нужно разобраться с приоритетом хендлеров