не проходит оплата в 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)