«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Интеграция Telegram Stars ⭐️ Оплата в Python-боте

Интеграция Telegram Stars ⭐️ Оплата в Python-боте

Опубликовано 1 сентября 2024 г.
Просматривать:468

Сегодня я покажу вам, как настроить платежи в вашем боте с использованием внутренней валюты Telegram, Telegram Stars ⭐️.

Шаг 1: Создайте бота

Сначала создайте бота с помощью BotFather. Если вы знакомы с этим процессом, вы можете использовать собственного тестового бота. В этом примере я буду использовать бота @repeats_bot.

Integrating Telegram Stars ⭐️ Payment in a Python Bot

Шаг 2. Подготовьте структуру проекта

Вот пример структуры вашего проекта:

TelegramStarsBot (root)
|-img/
  |-img-X9ptcIuiOMICY0BUQukCpVYS.png
|-bot.py
|-config.py
|-database.py
|-.env

Шаг 3: Код бота

bot.py

import telebot
from telebot import types
from config import TOKEN
from database import init_db, save_payment
import os

bot = telebot.TeleBot(TOKEN)

# Initialize the database
init_db()

# Function to create a payment keyboard
def payment_keyboard():
    keyboard = types.InlineKeyboardMarkup()
    button = types.InlineKeyboardButton(text="Pay 1 XTR", pay=True)
    keyboard.add(button)
    return keyboard

# Function to create a keyboard with the "Buy Image" button
def start_keyboard():
    keyboard = types.InlineKeyboardMarkup()
    button = types.InlineKeyboardButton(text="Buy Image", callback_data="buy_image")
    keyboard.add(button)
    return keyboard

# /start command handler
@bot.message_handler(commands=['start'])
def handle_start(message):
    bot.send_message(
        message.chat.id,
        "Welcome! Click the button below to buy an image.",
        reply_markup=start_keyboard()
    )

# Handler for the "Buy Image" button press
@bot.callback_query_handler(func=lambda call: call.data == "buy_image")
def handle_buy_image(call):
    prices = [types.LabeledPrice(label="XTR", amount=1)]  # 1 XTR
    bot.send_invoice(
        call.message.chat.id,
        title="Image Purchase",
        description="Purchase an image for 1 star!",
        invoice_payload="image_purchase_payload",
        provider_token="",  # For XTR, this token can be empty
        currency="XTR",
        prices=prices,
        reply_markup=payment_keyboard()
    )

# Handler for pre-checkout queries
@bot.pre_checkout_query_handler(func=lambda query: True)
def handle_pre_checkout_query(pre_checkout_query):
    bot.answer_pre_checkout_query(pre_checkout_query.id, ok=True)

# Handler for successful payments
@bot.message_handler(content_types=['successful_payment'])
def handle_successful_payment(message):
    user_id = message.from_user.id
    payment_id = message.successful_payment.provider_payment_charge_id
    amount = message.successful_payment.total_amount
    currency = message.successful_payment.currency

    # Send a purchase confirmation message
    bot.send_message(message.chat.id, "✅ Payment accepted, please wait for the photo. It will arrive soon!")

    # Save payment information to the database
    save_payment(user_id, payment_id, amount, currency)

    # Send the image
    photo_path = 'img/img-X9ptcIuiOMICY0BUQukCpVYS.png'
    if os.path.exists(photo_path):
        with open(photo_path, 'rb') as photo:
            bot.send_photo(message.chat.id, photo, caption="?Thank you for your purchase!?")
    else:
        bot.send_message(message.chat.id, "Sorry, the image was not found.")

# /paysupport command handler
@bot.message_handler(commands=['paysupport'])
def handle_pay_support(message):
    bot.send_message(
        message.chat.id,
        "Purchasing an image does not imply a refund. "
        "If you have any questions, please contact us."
    )

# Start polling
bot.polling()

config.py

import os
from dotenv import load_dotenv

# Load environment variables from .env file
load_dotenv()

# Get values from environment variables
TOKEN = os.getenv('TOKEN')
DATABASE = os.getenv('DATABASE')

база данных.py

import sqlite3
from config import DATABASE

def init_db():
    with sqlite3.connect(DATABASE) as conn:
        cursor = conn.cursor()
        cursor.execute('''
            CREATE TABLE IF NOT EXISTS payments (
                user_id INTEGER,
                payment_id TEXT,
                amount INTEGER,
                currency TEXT,
                PRIMARY KEY (user_id, payment_id)
            )
        ''')
        conn.commit()

def save_payment(user_id, payment_id, amount, currency):
    with sqlite3.connect(DATABASE) as conn:
        cursor = conn.cursor()
        cursor.execute('''
            INSERT INTO payments (user_id, payment_id, amount, currency)
            VALUES (?, ?, ?, ?)
        ''', (user_id, payment_id, amount, currency))
        conn.commit()

Объяснение кода

Платежи с помощью Telegram Stars

  • Payment_keyboard и start_keyboard создают кнопки для взаимодействия с пользователем. Первая кнопка позволяет осуществить оплату, а вторая инициирует покупку изображения.
  • handle_buy_image создает и отправляет счет на оплату в валюте XTR. Здесь поставщик_токен может быть пустым, поскольку XTR не требует токена.
  • handle_pre_checkout_query и handle_successful_Payment управляют процессом проверки и подтверждения платежа.
  • При успешной оплате бот отправляет пользователю изображение и сохраняет информацию о платеже в базе данных.

Работа с базой данных

  • init_db создает таблицу платежей, если она не существует. В этой таблице хранится информация о пользователе, платеже, сумме и валюте.
  • save_paying сохраняет информацию о платеже в базе данных. Это необходимо для потенциальных возвратов средств и отчетов о транзакциях.

Важные примечания

  • Оплата владельцу бота: Если владелец бота попытается совершить покупку внутри бота, покупка не будет завершена. Это предотвращает мошенничество или ошибочные покупки, совершенные администратором.
  • Управление звездами: Звезды хранятся в боте Telegram. Для просмотра баланса зайдите в настройки бота в Telegram, выберите «Управление ботом» и нажмите «Баланс». Здесь вы можете просматривать заработанные звезды и управлять ими, выводить их или тратить на рекламу.

Integrating Telegram Stars ⭐️ Payment in a Python Bot

Integrating Telegram Stars ⭐️ Payment in a Python Bot

Integrating Telegram Stars ⭐️ Payment in a Python Bot

Integrating Telegram Stars ⭐️ Payment in a Python Bot

Заключение

Теперь ваш бот настроен на прием платежей через Telegram Stars и отправку изображения после успешной покупки. Убедитесь, что все настройки и данные в файлах конфигурации верны.

Буду признателен, если вы оставите отзыв или комментарий! Вы также можете найти полный исходный код на GitHub.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/king_triton/integrating-telegram-stars-pay-in-a-python-bot-3667?1. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить это
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3