> 백엔드 개발 > 파이썬 튜토리얼 > Telegram Stars 통합 ⭐️ Python Bot에서의 결제

Telegram Stars 통합 ⭐️ Python Bot에서의 결제

WBOY
풀어 주다: 2024-08-27 06:06:02
원래의
784명이 탐색했습니다.

오늘은 텔레그램 내부 통화인 텔레그램 스타 ⭐️를 사용하여 봇에서 결제를 설정하는 방법을 보여드리겠습니다.

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는 사용자 상호작용을 위한 버튼을 생성합니다. 첫 번째 버튼을 누르면 결제가 가능하고, 두 번째 버튼을 누르면 이미지 구매가 시작됩니다.
  • handler_buy_image는 XTR 통화를 사용하여 지불하기 위한 송장을 생성하고 보냅니다. XTR에는 토큰이 필요하지 않으므로 공급자_토큰은 비어 있을 수 있습니다.
  • handler_pre_checkout_query 및 handler_successful_pay는 결제 확인 및 확인 프로세스를 처리합니다.
  • 결제가 성공하면 봇이 사용자에게 이미지를 전송하고 결제 정보를 데이터베이스에 저장합니다.

데이터베이스 작업

  • init_db는 결제 테이블이 존재하지 않는 경우 생성합니다. 이 테이블에는 사용자, 결제, 금액, 통화에 대한 정보가 저장됩니다.
  • save_pay는 결제 정보를 데이터베이스에 저장합니다. 이는 잠재적인 환불 및 거래 보고를 위해 필요합니다.

중요 사항

  • 봇 소유자 결제: 봇 소유자가 봇 내에서 구매를 시도할 경우 구매가 완료되지 않습니다. 이를 통해 관리자의 사기나 잘못된 구매를 방지할 수 있습니다.
  • 스타 관리: 스타는 텔레그램 봇 내에 저장됩니다. 잔액을 보려면 텔레그램의 봇 설정으로 이동하여 "봇 관리"를 선택한 다음 "잔액"을 클릭하세요. 이곳에서는 획득한 별을 확인 및 관리하고, 철회하거나, 광고비로 사용할 수 있습니다.

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에서 전체 소스 코드를 찾을 수도 있습니다.

위 내용은 Telegram Stars 통합 ⭐️ Python Bot에서의 결제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿