Создание Telegram-бота для приема платежей на подписку: Telegram Payments, QIWI API и Bitcoin
Содержание страницы
В этой статье мы рассмотрим, как создать Telegram бота для приема платежей и интегрировать различные платежные системы в ваш Telegram-бот на Python, включая Telegram Payments, QIWI API и Bitcoin. Мы покажем вам шаг за шагом процесс интеграции платежных систем с помощью нашего подробного руководства, и вы сможете быстро и просто интегрировать платежные системы в 2023 году.
Telegram Payments
Telegram Payments – это встроенная система платежей для ботов, которая позволяет пользователям совершать покупки прямо из чата.
Для работы с Telegram Payments, вам нужно зарегистрироваться у одного из платежных провайдеров, поддерживаемых Telegram, таких как Stripe или Yandex.Money. После регистрации вы получите токен API, который будет использоваться для обработки платежей.
В библиотеке python-telegram-bot есть класс telegram.Invoice
для создания счетов, которые могут быть отправлены пользователю. Вот пример отправки счета с помощью этой библиотеки:
from telegram import LabeledPrice, Invoice
price = LabeledPrice("Test product", 100) # 1.00 USD
bot.send_invoice(chat_id, "Test product", "Description", "payload", PROVIDER_TOKEN, "start_parameter", "USD", [price])
Для обработки платежей вам нужно обрабатывать обновления с типом telegram.PreCheckoutQuery
и вызывать метод answer_pre_checkout_query
для подтверждения платежа.
QIWI API
QIWI API – это система платежей, которая позволяет проводить транзакции через сервис QIWI. Для работы с QIWI API вам потребуется создать QIWI-кошелек и получить API-токен.
Для взаимодействия с QIWI API вы можете использовать библиотеку qiwi-api-wrapper
. Вот пример создания платежной ссылки с помощью этой библиотеки:
from qiwi_api import QiwiWrapper
qiwi = QiwiWrapper(token="your_token", phone="your_phone_number")
invoice_url = qiwi.create_payment_link(amount=100.0, comment="Payment for test product")
После получения ссылки на оплату, вы можете отправить ее пользователю в виде кнопки или текстового сообщения.
Работа с Bitcoin
Для работы с Bitcoin-платежами вам потребуется создать кошелек Bitcoin и получить его адрес. Затем вы можете использовать библиотеку bitcoin-python
для работы с Bitcoin API.
Вот пример создания Bitcoin-адреса и проверки его баланса с помощью этой библиотеки:
from bitcoin import SelectParams, RPCProxy
SelectParams("mainnet") # выбор сети Bitcoin
rpc = RPCProxy("http://user:[email protected]:8332") # подключение к Bitcoin-ноде
address = rpc.getnewaddress() # создание нового Bitcoin-адреса
balance = rpc.getbalance(address) # получение баланса адреса
Вы можете отправить пользователю адрес Bitcoin, на который им следует отправить средства. Для отслеживания платежей, вы должны мониторить баланс этого адреса, используя Bitcoin-ноду или сторонние сервисы.
Пример Telegram бот для платежей за платную подписку
В этом разделе мы создадим Telegram-бота, который будет предлагать пользователю оплатить подписку на премиум-функции. Пользователь сможет оплатить подписку с помощью Telegram Payments, QIWI API или Bitcoin. После успешной оплаты пользователь будет отмечен как «премиум» в базе данных SQLite.
- Создайте новый файл Python и импортируйте необходимые модули.
- Инициализируйте бота с вашим токеном бота и токеном платежного провайдера для Telegram Payments.
- Создайте базу данных SQLite и таблицу для хранения информации о пользователях и их статусе «премиум».
- Реализуйте обработчики для команды
/subscribe
, которые будут отправлять инструкции для оплаты через Telegram Payments, QIWI API и Bitcoin. - Реализуйте функции проверки успешной оплаты для каждого способа оплаты.
- После успешной оплаты, обновите статус пользователя на «премиум» в базе данных SQLite.
Для создания такого бота, сначала установите необходимые библиотеки:
pip install aiogram python-telegram-bot qiwipy bitcoin
Теперь давайте создадим бота с использованием следующего кода:
import logging
import sqlite3
from datetime import datetime, timedelta
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.middlewares.logging import LoggingMiddleware
from aiogram.types import LabeledPrice
from aiogram.utils import executor
API_TOKEN = 'your_bot_token_here'
# Инициализация бота и диспетчера
bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)
dp.middleware.setup(LoggingMiddleware())
# Подключение к базе данных SQLite и создание таблицы пользователей
conn = sqlite3.connect("subscription_bot.db")
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
user_id INTEGER NOT NULL UNIQUE,
premium BOOLEAN NOT NULL DEFAULT FALSE,
premium_until TIMESTAMP
);
""")
conn.commit()
# Обработчик команды /start
@dp.message_handler(commands=['start'])
async def on_start(message: types.Message):
user_id = message.from_user.id
cursor.execute("INSERT OR IGNORE INTO users (user_id) VALUES (?)", (user_id,))
conn.commit()
await message.reply("Привет! Отправь мне /subscribe, чтобы оплатить премиум-подписку!")
# Обработчик команды /subscribe
@dp.message_handler(commands=['subscribe'])
async def on_subscribe(message: types.Message):
user_id = message.from_user.id
# Создание счета на оплату
prices = [LabeledPrice(label='Премиум-подписка', amount=1000)]
await bot.send_invoice(
chat_id=user_id,
title='Премиум-подписка',
description='Оплата премиум-подписки на 1 месяц',
provider_token='your_telegram_payments_provider_token',
currency='usd',
prices=prices,
start_parameter='subscription',
payload=str(user_id)
)
# Обработчик успешной оплаты
@dp.pre_checkout_query_handler(lambda query: True)
async def process_pre_checkout_query(pre_checkout_query: types.PreCheckoutQuery):
await bot.answer_pre_checkout_query(pre_checkout_query.id, ok=True)
@dp.message_handler(content_types=types.ContentType.SUCCESSFUL_PAYMENT)
async def on_successful_payment(message: types.Message):
user_id = message.from_user.id
# Обработка успешной оплаты
successful_payment_handler(user_id)
await message.reply("Оплата успешно проведена! Вы получили премиум-подписку на 1 месяц.")
# Функция обработки успешной оплаты
def successful_payment_handler(user_id):
now = datetime.now()
premium_until = now + timedelta(days=30)
cursor.execute("UPDATE users SET premium = 1, premium_until = ? WHERE user_id = ?", (premium_until, user_id))
conn.commit()
# Функция проверки премиум-статуса пользователя
def is_user_premium(user_id):
cursor.execute("SELECT premium, premium_until FROM users WHERE user_id = ?", (user_id,))
user_data = cursor.fetchone()
if user_data:
premium, premium_until = user_data
if premium:
now = datetime.now()
if now < datetime.strptime(premium_until, "%Y-%m-%d %H:%M:%S.%f"):
return True
cursor.execute("UPDATE users SET premium = 0 WHERE user_id = ?", (user_id,))
conn.commit()
return False
Запуск бота
if name == 'main':
from aiogram import executor
executor.start_polling(dp, skip_updates=True)
Не забудьте заменить API_TOKEN
, QIWI_TOKEN
, BITCOIN_ADDRESS
и PROVIDER TOKEN HERE
на соответствующие значения для вашего бота и платежных систем.
Этот код создает бота, который предлагает оплатить подписку черую через Telegram Payments, QIWI и Bitcoin. После успешной оплаты через любой из этих способов, пользователь будет отмечен как «премиум» в базе данных SQLite.
Обратите внимание, что для работы с Telegram Payments вам нужно получить токен платежного провайдера. Информацию о том, как это сделать, можно найти в документации Telegram.
Сейчас код проверяет только успешные платежи через Telegram Payments. Если вы хотите проверять платежи через QIWI и Bitcoin, вам потребуется реализовать проверку транзакций для каждого из этих способов оплаты. Вы можете создать вебхук для QIWI или периодически опрашивать их API, чтобы проверять состояние транзакций. Для проверки Bitcoin-транзакций вам потребуется интеграция с сервисами обработки платежей, такими как BTCPay Server или Coinbase Commerce.
После успешной оплаты, вы можете использовать информацию о «премиум» пользователе в вашем боте для предоставления дополнительных возможностей или контента.
Заключение
В этой статье мы рассмотрели, как интегрировать различные платежные системы в ваш Telegram бот для платежей на Python, включая Telegram Payments, QIWI API и Bitcoin. Это позволит вашему боту обрабатывать платежи от пользователей и расширить его функциональность. Вы можете выбрать подходящую платежную систему в зависимости от требований вашего проекта и предпочтений пользователей.