@Return_112

Как сделать логику проверки оплаты в Telegram боте через сервис aaio?

Помогите пожалуйтса с реализацией логики проверки оплаты. Нужно сделать так, чтобы после выдачи ссылки на оплате, пользователь оплатил подписку и только с этом случае, ему как дальше указанно в коде генирировался бы рандомный ключ с префиксом 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()
  • Вопрос задан
  • 875 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Fre4ka
Проверь статус в информации о заказе

Возварщает формат JSON

Статусы:
success - Успешная оплата
hold - В холде
expired - Счет просрочен
in_process - Ожидает оплаты

Сравнивай "status" с выше перечисленными.

А для более удобной работы с платежкой советую воспользоваться библиотекой AaioAPI (есть синхронная и асинхронная версия)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы