Помогите пожалуйтса с реализацией логики проверки оплаты. Нужно сделать так, чтобы после выдачи ссылки на оплате, пользователь оплатил подписку и только с этом случае, ему как дальше указанно в коде генирировался бы рандомный ключ с префиксом RxN_, и присваивался в базу данных пользователю.
Код у меня работает нормально, единственная ошибка что тут нет логики проверки на оплату, и ключ выдается пользователю просто за нажатие кнопки "Купить на 1 версию"
Вот сам код
# Обработчик Callback Query от кнопки "Купить на 1 версию"
@dp.callback_query_handler(lambda query: query.data == "buy_1_version")
async def process_buy_1_version(callback_query: types.CallbackQuery):
# Здесь добавьте логику для создания ссылки на оплату на aaio.io
merchant_id = '# Обработчик Callback Query от кнопки "Купить на 1 версию" '
@dp.callback_query_handler(lambda query: query.data == "buy_1_version")
async def process_buy_1_version(callback_query: types.CallbackQuery):
# Здесь добавьте логику для создания ссылки на оплату на aaio.io
merchant_id = 'Мой ид' # ID Вашего магазина на aaio.io
amount = 30.00 # Сумма к оплате
currency = 'RUB' # Валюта заказа
secret = 'мой секрет ключ' # Секретный ключ из настроек магазина на aaio.io
# Генерируем уникальный идентификатор заказа на основе текущего времени
order_id = f'python_order_{int(time.time())}'
desc = 'Order Payment' # Описание заказа
lang = 'ru' # Язык формы
# Создаем подпись
sign = f':'.join([
str(merchant_id),
str(amount),
str(currency),
str(secret),
str(order_id)
])
# Хэшируем подпись
signature = hashlib.sha256(sign.encode('utf-8')).hexdigest()
# Параметры для отправки запроса
params = {
'merchant_id': merchant_id,
'amount': amount,
'currency': currency,
'order_id': order_id,
'sign': signature,
'desc': desc,
'lang': lang
}
payment_link = "https://aaio.io/merchant/pay?" + urlencode(params)
# Отправляем пользователю сообщение с кликабельной ссылкой для оплаты
message_text = f"Для оплаты перейдите по [ссылке]({payment_link})."
await bot.send_message(callback_query.from_user.id,
message_text,
parse_mode=ParseMode.MARKDOWN)
# В другом месте вашего кода, после успешной оплаты, вы можете добавить этот блок, чтобы сохранить ключ
# Генерируем случайный ключ RxN_ и добавляем рандомную последовательность
subscription_key = f'RxN_{"".join(random.choices(string.ascii_letters + string.digits, k=10))}'
# Получаем user_id текущего пользователя
user_id = callback_query.from_user.id
# Сохраняем ключ в таблице ключей и связываем его с пользователем
cursor.execute("INSERT INTO keys (user_id, key) VALUES (?, ?)", (user_id, subscription_key,))
conn.commit()