오늘은 텔레그램 내부 통화인 텔레그램 스타 ⭐️를 사용하여 봇에서 결제를 설정하는 방법을 보여드리겠습니다.
먼저 BotFather를 사용하여 봇을 만듭니다. 이 프로세스에 익숙하다면 자체 테스트 봇을 사용할 수 있습니다. 이 예에서는 @repeats_bot 봇을 사용하겠습니다.
다음은 프로젝트 구조의 예입니다.
TelegramStarsBot (root) |-img/ |-img-X9ptcIuiOMICY0BUQukCpVYS.png |-bot.py |-config.py |-database.py |-.env
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()
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')
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를 통해 결제를 수락하고 성공적인 구매 후 이미지를 보내도록 설정되었습니다. 구성 파일의 모든 설정과 데이터가 올바른지 확인하세요.
댓글이나 공감 남겨주시면 감사하겠습니다! GitHub에서 전체 소스 코드를 찾을 수도 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3