Ошибка BOT_PRECHECKOUT_TIMEOUT | Интеграция ЮKassa | Telegram Payment API

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

Инвойс успешно отправляется, ввожу данные карты, а дальше форма оплаты зависает, и выходит ошибка внутри платежной формы BOT_PRECHECKOUT_TIMEOUT, платеж не проходит, сообщения об успехе нет. Я понимаю, что проблема в ответе на вебхук, но никак не могу разобраться. Очень надеюсь на помощь.

import logging
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.types import LabeledPrice

TOKEN = ''
PAYMENT_PROVIDER_TOKEN = ''
CURRENCY = 'RUB'
PRICES = [LabeledPrice('Product', 10000)]

logging.basicConfig(level=logging.INFO)

bot = Bot(token=TOKEN)
storage = MemoryStorage()
dispatcher = Dispatcher(bot, storage=storage)


@dispatcher.message_handler(commands=['start'])
async def start_command(message: types.Message):
    await message.answer('Привет! Чтобы совершить покупку, введите /buy.')


@dispatcher.message_handler(commands=['buy'])
async def buy_command(message: types.Message):
    await message.answer('Вы выбрали покупку. Введите /pay для оплаты.')


@dispatcher.message_handler(commands=['pay'])
async def pay_command(message: types.Message):
    title = 'Product'
    description = 'Описание продукта'
    payload = 'custom_payload'

    invoice = await bot.send_invoice(
        chat_id=message.chat.id,
        title=title,
        description=description,
        payload=payload,
        provider_token=PAYMENT_PROVIDER_TOKEN,
        start_parameter='invoice',
        currency=CURRENCY,
        prices=PRICES
    )

    if invoice:
        await storage.update_data(chat=message.chat.id, data={"invoice_message_id": invoice.message_id})


@dispatcher.pre_checkout_query_handler()
async def pre_checkout_query_handler(query: types.PreCheckoutQuery):
    await bot.answer_pre_checkout_query(query.id, ok=True)


@dispatcher.message_handler(content_types=types.ContentType.SUCCESSFUL_PAYMENT)
async def successful_payment_handler(message: types.Message):
    data = await storage.get_data(chat=message.chat.id)
    if 'invoice_message_id' in data and data['invoice_message_id'] == message.reply_to_message.message_id:
        await message.answer('Спасибо за покупку! Платеж успешно обработан.')
        # Выполните необходимые действия после успешного платежа
    else:
        await message.answer('Произошла ошибка при обработке платежа. Попробуйте еще раз.')


def main():
    from aiogram import executor
    executor.start_polling(dispatcher)


if __name__ == '__main__':
    main()

Ответы

▲ 0

Столкнулся с подобным в aiogram3. Помогла настройка для приёма ВСЕХ нужных апдейтов.

await dp.start_polling(bot, allowed_updates=dp.resolve_used_update_types())
▲ 0

В моём случае, в 2.25.1 решил проблему так:

await dp.start_polling(allowed_updates=types.AllowedUpdates.all())