Загрузка...

Please help with replenishment through Telegram Starc

Thread in Programming created by searchx Jul 18, 2025. 85 views

  1. searchx
    searchx Topic starter Jul 18, 2025 9 Oct 25, 2023
    Я тупой нейрокодер , нужна хелпаа
    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 и высвечивается что прошло слишком много времени в ожидании ответа от бота , при этом в **** ничего не поступает
     
  2. searchx
    searchx Topic starter Jul 18, 2025 9 Oct 25, 2023
    НикаМясо, дикпик с обновлением мировой ситуации октября 2024 ураа
     
    1. НикаМясо
      searchx, не пиши мне больше, нейрокодер
  3. Hexacorov
    Hexacorov Jul 18, 2025 14 Aug 7, 2019
    кинь в нейронку и спроси что не так
     
    1. Hexacorov
      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, и я помогу дальше.
Loading...
Top