Maison >développement back-end >Tutoriel Python >Intégration de Telegram Stars ⭐️ Paiement dans un Bot Python

Intégration de Telegram Stars ⭐️ Paiement dans un Bot Python

WBOY
WBOYoriginal
2024-08-27 06:06:02747parcourir

Aujourd'hui, je vais vous montrer comment configurer les paiements dans votre bot en utilisant la devise interne de Telegram, Telegram Stars ⭐️.

Étape 1 : Créer un robot

Tout d’abord, créez un bot à l’aide de BotFather. Si vous connaissez ce processus, vous pouvez utiliser votre propre robot de test. Dans cet exemple, j'utiliserai le bot @repeats_bot.

Integrating Telegram Stars ⭐️ Payment in a Python Bot

Étape 2 : Préparer la structure du projet

Voici un exemple de la structure de votre projet :

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

Étape 3 : Code du robot

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')

base de données.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()

Explication du code

Paiements avec Telegram Stars

  • payment_keyboard et start_keyboard créent des boutons pour l'interaction de l'utilisateur. Le premier bouton permet le paiement, et le second initie l'achat de l'image.
  • handle_buy_image crée et envoie une facture pour le paiement en utilisant la devise XTR. Ici, supplier_token peut être vide car XTR ne nécessite pas de jeton.
  • handle_pre_checkout_query et handle_successful_payment gèrent le processus de vérification et de confirmation du paiement.
  • Une fois le paiement réussi, le bot envoie l'image à l'utilisateur et enregistre les informations de paiement dans la base de données.

Travailler avec la base de données

  • init_db crée la table des paiements si elle n'existe pas. Ce tableau stocke des informations sur l'utilisateur, le paiement, le montant et la devise.
  • save_payment enregistre les informations de paiement dans la base de données. Ceci est nécessaire pour les remboursements potentiels et les rapports de transactions.

Remarques importantes

  • Paiement du propriétaire du bot : Si le propriétaire du bot tente d'effectuer un achat au sein du bot, l'achat ne sera pas finalisé. Cela évite la fraude ou les achats erronés effectués par l'administrateur.
  • Gestion des étoiles : Les étoiles sont stockées dans le bot Telegram. Pour afficher le solde, accédez aux paramètres du bot dans Telegram, sélectionnez « Gérer le bot » et cliquez sur « Solde ». Ici, vous pouvez afficher et gérer les étoiles gagnées, les retirer ou les dépenser en publicité.

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

Conclusion

Votre bot est désormais configuré pour accepter les paiements via Telegram Stars et envoyer une image après un achat réussi. Assurez-vous que tous les paramètres et données des fichiers de configuration sont corrects.

J'apprécierais que vous laissiez une réaction ou un commentaire ! Vous pouvez également trouver le code source complet sur GitHub.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn