Я тупой нейрокодер , нужна хелпаа @dp.callback_query(F.data.startswith("pay_stars_")) async def process_stars_payment(callback_query: types.CallbackQuery): try: amount_rub = int(callback_query.data.split("_")[2]) # сумма в рублях stars = int(amount_rub / 1.1) # конвертация в звёзды prices = [LabeledPrice(label="XTR", amount=stars)] await bot.send_invoice( chat_id=callback_query.from_user.id, title="Пополнение баланса", description=f"Пополнение баланса на {amount_rub} руб. ({stars} звёзд)", payload=f"balance_add_{amount_rub}", provider_token=None, # Можно None или просто не указывать, если Stars не требует currency="XTR", prices=prices ) await callback_query.answer() except Exception as e: logging.error(f"Ошибка при создании платежа: {e}") await callback_query.answer("Ошибка при создании платежа", show_alert=True) @dp.pre_checkout_query() async def on_pre_checkout_query(pre_checkout_query: PreCheckoutQuery): await pre_checkout_query.answer(ok=True) @dp.message(F.successful_payment) async def on_successful_payment(message: Message): try: payload = message.successful_payment.invoice_payload if payload.startswith("balance_add_"): amount_rub = int(payload.split("_")[2]) user_id = message.from_user.id with sqlite3.connect('base.db') as conn: cursor = conn.cursor() cursor.execute( "UPDATE users SET balance = balance + ? WHERE user_id = ?", (amount_rub, user_id) ) conn.commit() await message.answer( l10n.format_value( "payment-successful", {"id": message.successful_payment.telegram_payment_charge_id} ), message_effect_id="5104841245755180586", ) await message.answer( f" Баланс успешно пополнен на {amount_rub} руб.\nСпасибо за оплату!" ) except Exception as e: logging.error(f"Ошибка при зачислении средств: {e}") await message.answer(" Произошла ошибка при зачислении средств") Python @dp.callback_query(F.data.startswith("pay_stars_")) async def process_stars_payment(callback_query: types.CallbackQuery): try: amount_rub = int(callback_query.data.split("_")[2]) # сумма в рублях stars = int(amount_rub / 1.1) # конвертация в звёзды prices = [LabeledPrice(label="XTR", amount=stars)] await bot.send_invoice( chat_id=callback_query.from_user.id, title="Пополнение баланса", description=f"Пополнение баланса на {amount_rub} руб. ({stars} звёзд)", payload=f"balance_add_{amount_rub}", provider_token=None, # Можно None или просто не указывать, если Stars не требует currency="XTR", prices=prices ) await callback_query.answer() except Exception as e: logging.error(f"Ошибка при создании платежа: {e}") await callback_query.answer("Ошибка при создании платежа", show_alert=True) @dp.pre_checkout_query() async def on_pre_checkout_query(pre_checkout_query: PreCheckoutQuery): await pre_checkout_query.answer(ok=True) @dp.message(F.successful_payment) async def on_successful_payment(message: Message): try: payload = message.successful_payment.invoice_payload if payload.startswith("balance_add_"): amount_rub = int(payload.split("_")[2]) user_id = message.from_user.id with sqlite3.connect('base.db') as conn: cursor = conn.cursor() cursor.execute( "UPDATE users SET balance = balance + ? WHERE user_id = ?", (amount_rub, user_id) ) conn.commit() await message.answer( l10n.format_value( "payment-successful", {"id": message.successful_payment.telegram_payment_charge_id} ), message_effect_id="5104841245755180586", ) await message.answer( f" Баланс успешно пополнен на {amount_rub} руб.\nСпасибо за оплату!" ) except Exception as e: logging.error(f"Ошибка при зачислении средств: {e}") await message.answer(" Произошла ошибка при зачислении средств") Счет создается но при попытке оплатить проходит секунд 10 и высвечивается что прошло слишком много времени в ожидании ответа от бота , при этом в **** ничего не поступает
Hexacorov, Если при попытке оплаты вы видите ошибку вроде "Превышено время ожидания ответа от бота", и при этом в **** ничего не попадает, значит Telegram ожидает от бота ответа на callback_query, но по каким-то причинам не получает его вовремя. Вот наиболее вероятные причины и рекомендации: 1. Вы не отправили answer() на callback вовремя await callback_query.answer() Этот вызов должен быть выполнен как можно быстрее — до отправки счёта, или в параллели с ним. Телеграм ждёт callback_query.answer() не дольше 5 секунд, иначе пишет пользователю, что бот не отвечает. Решение: Разделите подтверждение callback_query.answer() и отправку инвойса: @dp.callback_query(F.data.startswith("pay_stars_")) async def process_stars_payment(callback_query: types.CallbackQuery): await callback_query.answer() # Сразу отвечаем Telegram try: amount_rub = int(callback_query.data.split("_")[2]) stars = int(amount_rub / 1.1) prices = [LabeledPrice(label="XTR", amount=stars)] await bot.send_invoice( chat_id=callback_query.from_user.id, title="Пополнение баланса", description=f"Пополнение баланса на {amount_rub} руб. ({stars} звёзд)", payload=f"balance_add_{amount_rub}", provider_token="ВАШ_ТОКЕН_ПЛАТЕЖКИ", # обязательно укажите корректный токен currency="RUB", # Важно! Должна быть валюта, поддерживаемая Telegram (например, RUB) prices=prices ) except Exception as e: logging.error(f"Ошибка при создании платежа: {e}") await callback_query.message.answer("Ошибка при создании платежа", show_alert=True) 2. Вы указали неверную валюту или пустой токен currency="XTR" — это неподдерживаемая валюта в Telegram. Вы должны использовать одну из официальных валют, например: RUB USD EUR Также, provider_token не может быть None. Telegram требует рабочий токен платежной системы (например, ЮKassa, Stripe и т.д.). Решение: Проверьте настройки: currency="RUB", provider_token="ВАШ_ТОКЕН_ПЛАТЕЖНОЙ_СИСТЕМЫ", # обязательное поле Если вы тестируете, можно использовать тестовый токен Telegram: provider_token="381764678:TEST:4e3f99c0-1234-5678-9abc-12c345678901" 3. Вы не зарегистрировали обработчики или бот неправильно инициализирован Проверьте: dp.pre_checkout_query.register(...) dp.message.register(...) dp.callback_query.register(...) Если вы используете aiogram 3.x, обязательно проверьте, что обработчики зарегистрированы правильно. Также убедитесь, что bot и dp корректно созданы и запущены. 4. Ошибка SQLite не доходит до ***** Если вы не видите ***** — возможно, logging не настроен правильно. Добавьте настройку логгера: import logging logging.basicConfig(level=logging.INFO) Проверочный чеклист await callback_query.answer() вызывается сразу. Указана правильная валюта (RUB). provider_token не пустой и валиден. Логгер настроен. Обработчики корректно зарегистрированы. Если после всех правок проблема останется — покажите, как вы инициализируете dp и bot, и я помогу дальше.