Skip to content

Instantly share code, notes, and snippets.

@TannicArcher
Created December 19, 2023 12:44
Show Gist options
  • Save TannicArcher/0ec4050509d98d293bfbab6e4f6cbdb6 to your computer and use it in GitHub Desktop.
Save TannicArcher/0ec4050509d98d293bfbab6e4f6cbdb6 to your computer and use it in GitHub Desktop.
Check payment(QIWI)
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor
from aiogram.types import ReplyKeyboardRemove, ReplyKeyboardMarkup, KeyboardButton, InlineKeyboardMarkup, InlineKeyboardButton
import requests
import random
import logging
# Импорт конфигурации из файла config.py
import config
import keyboard
# Настройка логгирования
logging.basicConfig(level=logging.INFO)
# Инициализация бота и диспетчера
bot = Bot(token=config.telegram_token)
dp = Dispatcher(bot)
# Функция для получения истории платежей из Qiwi
async def get_history(phone, token):
try:
s = requests.Session()
s.headers['authorization'] = 'Bearer ' + token
parameters = {'rows': 4, 'operation': 'IN'}
h = s.get(f'https://edge.qiwi.com/payment-history/v2/persons/{phone}/payments', params=parameters)
return h.json()
except requests.exceptions.RequestException as e:
logging.error("Произошла ошибка при запросе к серверу Qiwi", exc_info=True)
return None
# Обработчик команды /start
@dp.message_handler(commands=['start'])
async def start_handler(message: types.Message):
await bot.send_message(message.from_user.id, 'Добро пожаловать!\nЧтобы приобрести доступ, воспользуйтесь клавиатурой.', reply_markup=keyboard.buy_lic)
# Обработчик сообщения "🔒 Приобрести доступ 🔒"
@dp.message_handler(text='🔒 Приобрести доступ 🔒')
async def purchase_handler(message: types.Message):
random_code = random.randint(1, 1000000)
# Формирование ссылки для оплаты в зависимости от конфигурации pay_to_nick
account_identifier = config.nick if config.get('pay_to_nick', False) else config.number
link = f"https://qiwi.com/payment/form/99999?extra%5B%27account%27%5D={account_identifier}&amountInteger={config.cost}&amountFraction=0&extra%5B%27comment%27%5D={random_code}&currency=643&blocked%5B0%5D=sum&blocked%5B1%5D=comment&blocked%5B2%5D=account"
# Создание встроенной клавиатуры для опций оплаты
payment_keyboard = InlineKeyboardMarkup()
payment_keyboard.add(InlineKeyboardButton('Проверить оплату', callback_data=f'check_payment_{random_code}'), InlineKeyboardButton('Перейти к оплате', url=link))
# Отправка сообщения с деталями оплаты и встроенной клавиатурой
await message.reply(f'💵 Оплатите доступ 💵\n\n📱 Идентификатор: {account_identifier}\n🔐 Комментарий: {random_code} (ОБЯЗАТЕЛЬНО УКАЖИТЕ)\n💰 Цена: {config.cost}р\n\n🚀 Для удобства перейдите по ссылке', reply=False, reply_markup=payment_keyboard)
# Обработчик коллбэк-запроса для проверки оплаты
@dp.callback_query_handler(text_contains='check_payment_')
async def check_payment_handler(call: types.CallbackQuery):
code = call.data.split('_')[-1
try:
# Получение истории платежей Qiwi
qiwi_history = await get_history(config.number, config.qiwi)
# Проверка, найден ли платеж с указанным кодом и суммой
for i in range(4):
if qiwi_history and qiwi_history.get('data', {}).get(i, {}).get('comment') == str(code) and qiwi_history['data'][i]['sum']['amount'] == int(config.cost):
await call.message.edit_text(f'🔐 Оплата найдена 🔐')
return
# Если платеж не найден, предоставление опции проверить снова
payment_keyboard = InlineKeyboardMarkup()
payment_keyboard.add(InlineKeyboardButton('Проверить оплату', callback_data=f'check_payment_{code}'))
await bot.send_message(call.from_user.id, 'Платеж не найден.', reply_markup=payment_keyboard)
except Exception as e:
# Обработка исключений и уведомление пользователя
logging.error("Произошла ошибка при проверке оплаты", exc_info=True)
payment_keyboard = InlineKeyboardMarkup()
payment_keyboard.add(InlineKeyboardButton('Проверить оплату', callback_data=f'check_payment_{code}'))
await bot.send_message(call.from_user.id, "Администратор не настроил оплату, уведомите его об этом")
# Запуск опроса
if __name__ == '__main__':
executor.start_polling(dp)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment