Чтобы создать базу данных пользователей, совершивших оплату через ЮKassa в Telegram-боте на Python с использованием библиотеки aiogram, необходимо выполнить следующие шаги:
Настройка бота и подключение к ЮKassa:
Создайте бота через @BotFather и получите токен.
Подключите бота к ЮKassa, следуя официальной инструкции. В процессе вы получите provider_token, необходимый для отправки счетов.
Настройка базы данных:
Выберите СУБД для хранения данных (например, PostgreSQL или SQLite).
Создайте таблицу для хранения информации о платежах. Пример структуры таблицы:
CREATE TABLE payments (
id SERIAL PRIMARY KEY,
user_id BIGINT NOT NULL,
username TEXT,
amount INTEGER NOT NULL,
currency TEXT NOT NULL,
payment_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Отправка счета пользователю:
Используйте метод send_invoice из aiogram для отправки счета. Пример:
from aiogram import Bot, Dispatcher, types
from aiogram.types import LabeledPrice
bot = Bot(token='ВАШ_BOT_TOKEN')
dp = Dispatcher(bot)
@dp.message_handler(commands=['buy'])
async def process_buy_command(message: types.Message):
prices = [LabeledPrice(label='Товар', amount=10000)] # 100.00 RUB
await bot.send_invoice(
chat_id=message.chat.id,
title='Название товара',
description='Описание товара',
payload='unique_payload',
provider_token='ВАШ_PROVIDER_TOKEN',
currency='RUB',
prices=prices,
start_parameter='start'
)
Обратите внимание, что payload должен быть уникальным для каждой транзакции.
Обработка успешного платежа:
После успешной оплаты Telegram отправляет обновление с типом successful_payment. Необходимо создать обработчик для этого события:
@dp.message_handler(content_types=types.ContentType.SUCCESSFUL_PAYMENT)
async def process_successful_payment(message: types.Message):
successful_payment = message.successful_payment
user_id = message.from_user.id
username = message.from_user.username
amount = successful_payment.total_amount
currency = successful_payment.currency
# Сохранение информации о платеже в базу данных
# Пример для SQLite
import sqlite3
conn = sqlite3.connect('payments.db')
cursor = conn.cursor()
cursor.execute(
'INSERT INTO payments (user_id, username, amount, currency) VALUES (?, ?, ?, ?)',
(user_id, username, amount, currency)
)
conn.commit()
conn.close()
await message.answer('Спасибо за оплату!')
В этом примере используется SQLite для простоты. Для PostgreSQL или другой СУБД используйте соответствующие библиотеки и методы подключения.
Запуск бота:
Запустите бота, чтобы он начал обрабатывать команды и платежи:
from aiogram import executor
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
Убедитесь, что у вас настроены все необходимые права доступа к базе данных и что бот имеет доступ к сети для взаимодействия с Telegram API и ЮKassa.
Для более подробной информации о настройке платежей через Telegram-бота и ЮKassa вы можете ознакомиться с официальной документацией ЮKassa.