Top.Mail.Ru
Ответы

Как сделать базу данных людей которые оплатили через Юкассу в тг боте, (python,aiogram)

Как сделать базу данных людей которые оплатили через Юкассу в тг боте, (python,aiogram)

По дате
По Рейтингу
Аватар пользователя
Гуру
7мес

Чтобы создать базу данных пользователей, совершивших оплату через ЮKassa в Telegram-боте на Python с использованием библиотеки aiogram, необходимо выполнить следующие шаги:

Настройка бота и подключение к ЮKassa:

Создайте бота через @BotFather и получите токен.
Подключите бота к ЮKassa, следуя официальной инструкции. В процессе вы получите provider_token, необходимый для отправки счетов.
Настройка базы данных:

Выберите СУБД для хранения данных (например, PostgreSQL или SQLite).
Создайте таблицу для хранения информации о платежах. Пример структуры таблицы:


123456789
 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 для отправки счета. Пример:

1234567891011121314151617181920
 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. Необходимо создать обработчик для этого события:

12345678910111213141516171819202122
 @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 или другой СУБД используйте соответствующие библиотеки и методы подключения.

Запуск бота:

Запустите бота, чтобы он начал обрабатывать команды и платежи:

12345
 from aiogram import executor 
 
if __name__ == '__main__': 
    executor.start_polling(dp, skip_updates=True) 
 

Убедитесь, что у вас настроены все необходимые права доступа к базе данных и что бот имеет доступ к сети для взаимодействия с Telegram API и ЮKassa.

Для более подробной информации о настройке платежей через Telegram-бота и ЮKassa вы можете ознакомиться с официальной документацией ЮKassa.