Убедитесь, что токен провайдера оплаты (`CRYPTO_PAY_PROVIDER_TOKEN`) правильно введен и действителен. Неверный токен приведет к ошибке.
Убедитесь, что используете поддерживаемую валюту, такую как `USD`, так как `USDT` может не поддерживаться API Telegram.
import telebot
APITOKEN = '' # Токен вашего бота
bot = telebot.TeleBot(APITOKEN)
CRYPTO_PAY_PROVIDER_TOKEN = '' # Токен провайдера CryptoPay
@bot.message_handler(commands=['start'])
def start(message):
bot.send_message(message.chat.id, "Добро пожаловать! Пожалуйста, введите сумму в USD для создания счета.")
@bot.message_handler(func=lambda message: message.text.replace('.', '', 1).isdigit())
def create_invoice(message):
try:
amount = float(message.text) # Преобразуем текст в число
if amount <= 0:
raise ValueError("Сумма должна быть положительной.")
invoice_payload = 'unique_invoice_payload' # Уникальный идентификатор инвойса
# Создание инвойса
bot.send_invoice(
chat_id=message.chat.id,
title='Оплата в USD',
description='Оплата за услуги.',
provider_token=CRYPTO_PAY_PROVIDER_TOKEN, # Токен провайдера
start_parameter='test-invoice',
invoice_payload=invoice_payload, # Обязательный параметр
currency='USD', # Используйте поддерживаемую валюту
prices=[telebot.types.LabeledPrice(label='Услуга', amount=int(amount * 100))] # Сумма в центах
)
except ValueError:
bot.send_message(message.chat.id, "Пожалуйста, введите корректную сумму в USD.")
except Exception as e:
bot.send_message(message.chat.id, f"Произошла ошибка: {str(e)}")
@bot.pre_checkout_query_handler(func=lambda query: True)
def pre_checkout(query):
bot.answer_pre_checkout_query(query.id, ok=True)
@bot.message_handler(content_types=['successful_payment'])
def successful_payment(message):
bot.send_message(message.chat.id, "Спасибо за вашу покупку! Ваш счет успешно создан.")
bot.polling()
должен через api crypto bot создавать чек на указаную сумму