Top.Mail.Ru
Ответы

Я попросил у ии написать код на питон для пайшарм для тг бота для библиотеки телебот, но получается ошибка

Я попросил у ии написать код на питон для пайшарм для тг бота для библиотеки телебот, но получается ошибка

В чём ошибка?

Код для оплаты через криптобот

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
 TELEGRAM_BOT_TOKEN = 'YOUR_TELEGRAM_BOT_TOKEN' 
CRYPTOBOT_TOKEN = 'YOUR_CRYPTOBOT_TOKEN' 
 
bot = telebot.TeleBot(TELEGRAM_BOT_TOKEN) 
 
@bot.message_handler(commands=['start']) 
def send_welcome(message): 
    bot.reply_to(message, "Привет! Я бот, который принимает платежи через CryptoBot. Нажмите /pay, чтобы начать.") 
 
@bot.message_handler(commands=['pay']) 
def create_payment(message): 
    chat_id = message.chat.id 
    amount = 0.001  # Укажите сумму в BTC или другой поддерживаемой валюте 
 
    # Создание платежа через CryptoBot 
    payment_url = create_cryptobot_payment(amount) 
 
    if payment_url: 
        markup = types.InlineKeyboardMarkup() 
        pay_button = types.InlineKeyboardButton("Оплатить", url=payment_url) 
        markup.add(pay_button) 
        bot.send_message(chat_id, "Нажмите кнопку ниже, чтобы оплатить:", reply_markup=markup) 
    else: 
        bot.send_message(chat_id, "Произошла ошибка при создании платежа. Попробуйте позже.") 
 
def create_cryptobot_payment(amount): 
    url = f'https://api.cryptobot.com/v1/createInvoice' 
    headers = { 
        'Authorization': f'Bearer {CRYPTOBOT_TOKEN}', 
        'Content-Type': 'application/json' 
    } 
    data = { 
        'amount': amount, 
        'currency': 'BTC',  # Укажите нужную валюту 
        'description': 'Оплата за услугу' 
    } 
    response = requests.post(url, json=data, headers=headers) 
 
    if response.status_code == 200: 
        payment_data = response.json() 
        return payment_data.get('pay_url') 
    else: 
        print("Ошибка при создании платежа:", response.text) 
        return None 
 
bot.polling() 

Ошибка выводится на стадии, когда отправляю команду /pay

По дате
По рейтингу
Аватар пользователя
Оракул
3мес

Отсутствуют необходимые импорты библиотек:

123
 import telebot 
from telebot import types 
import requests 


Неправильный URL API CryptoBot:

1
 url = f'https://api.cryptobot.com/v1/createInvoice' 

Должен быть:

1
 url = 'https://pay.crypt.bot/api/createInvoice' 


Неверный формат заголовка авторизации:

1234
 headers = {  
    'Authorization': f'Bearer {CRYPTOBOT_TOKEN}',  
    'Content-Type': 'application/json'  
} 

Должен быть:

1234
 headers = {  
    'Crypto-Pay-API-Token': CRYPTOBOT_TOKEN, 
    'Content-Type': 'application/json'  
} 


Неправильное название параметра валюты (должно быть 'asset' вместо 'currency') и формат суммы:

12345
 data = {  
    'asset': 'BTC', 
    'amount': str(amount), 
    'description': 'Оплата за услугу'  
} 
Аватар пользователя
3мес
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
 import telebot 
import requests 
from telebot import types 
 
TELEGRAM_BOT_TOKEN = 'YOUR_TELEGRAM_BOT_TOKEN'  
CRYPTOBOT_TOKEN = 'YOUR_CRYPTOBOT_TOKEN'  
 
bot = telebot.TeleBot(TELEGRAM_BOT_TOKEN) 
 
@bot.message_handler(commands=['start']) 
def send_welcome(message): 
    bot.reply_to(message, "Привет! Я бот, который принимает платежи через CryptoBot. Нажмите /pay, чтобы начать.") 
 
@bot.message_handler(commands=['pay']) 
def create_payment(message): 
    chat_id = message.chat.id  
    amount = 0.001  # Укажите сумму в BTC или другой поддерживаемой валюте  
 
    # Создание платежа через CryptoBot  
    payment_url = create_cryptobot_payment(amount) 
 
    if payment_url: 
        markup = types.InlineKeyboardMarkup()  
        pay_button = types.InlineKeyboardButton("Оплатить", url=payment_url)  
        markup.add(pay_button)  
        bot.send_message(chat_id, "Нажмите кнопку ниже, чтобы оплатить:", reply_markup=markup)  
    else: 
        bot.send_message(chat_id, "Произошла ошибка при создании платежа. Попробуйте позже.") 
 
def create_cryptobot_payment(amount): 
    url = 'https://api.cryptobot.com/v1/createInvoice'  
    headers = {  
        'Authorization': f'Bearer {CRYPTOBOT_TOKEN}',  
        'Content-Type': 'application/json'  
    }  
    data = {  
        'amount': amount,  
        'currency': 'BTC',  # Укажите нужную валюту  
        'description': 'Оплата за услугу'  
    }  
 
    try: 
        response = requests.post(url, json=data, headers=headers) 
        response.raise_for_status()  # Это выбросит исключение для плохих ответов (4xx, 5xx) 
        payment_data = response.json()  
        return payment_data.get('pay_url')  
    except requests.exceptions.RequestException as e: 
        print("Ошибка при создании платежа:", e) 
        return None  
 
bot.polling() 

Что было изменено:

1. Добавлен импорт requests и types из telebot, если он не был импортирован ранее.
2. Добавлена обработка исключений при выполнении запроса к API. Это поможет вам понять, какая именно ошибка произошла при создании платежа через CryptoBot.
3. Убедитесь, что вы заменили YOUR_TELEGRAM_BOT_TOKEN и YOUR_CRYPTOBOT_TOKEN на реальные токены бота.