@helldess

Qiwi оплата в телеграм боте, почему не отправляется нужное сообщение?

Пишу телеграм бота на aoigram. Оплата через модуль PyQiwiP2P.
При нажатии на кнопку: "Проверить оплату" должно отправляться сообщение: "Оплата не найдена" или "Баланс пополнен", но отправляется сообщение: "Счет не найден", уже несколько дней не могу разобраться в чем проблема, все исправно заноситься в базу данных, но нужное сообщение не отправляется.
Код базы данных:
#
    def user_balance(self, chat_id):
        with self.conn:
            result = self.cursor.execute("SELECT balance FROM 'users' WHERE chat_id = ?", (chat_id,)).fetchmany(1)
            return int(result[0][0])

    def set_balance(self, chat_id, balance):
        with self.conn:
            return self.cursor.execute("UPDATE 'users' SET 'balance' = ? WHERE 'chat_id' = ?", (balance, chat_id,))

    def add_check(self, chat_id, balance, bill_id):
        with self.conn:
            self.cursor.execute("INSERT INTO 'check' ('chat_id', 'balance', 'bill_id') VALUES (?,?,?)", (chat_id, balance, bill_id,))

    def get_check(self, bill_id):
        with self.conn:
            result = self.cursor.execute("SELECT *  FROM 'check' WHERE 'bill_id' = ?", (bill_id,)).fetchmany(1)
            if not bool(len(result)):
                return False
            return result[0]

    def delete_check(self, bill_id):
        with self.conn:
            return self.cursor.execute("DELETE FROM 'check' WHERE 'bill_id' = ?", (bill_id,))

Код хендлера:
def is_number(_str):
    try:
        float(_str)
        return True
    except ValueError:
        return False


@dp.message_handler()
async def balance_message(message: types.Message):
    if message.chat.type == "private":
        if is_number(message.text):
            message_balance = float(message.text)
            if message_balance >= 10:
                comment = str(message.from_user.id) + "_" + str(random.randint(1000, 9999))
                bill = p2p.bill(amount=message_balance, lifetime=15, comment=comment)
                BotDB.add_check(message.from_user.id, message_balance, bill.bill_id)
                await bot.send_message(message.from_user.id, f"Для пополнения баланса перейдите по кнопке и оплатите счет\n\n После оплаты, нажмите на Проверить оплату", reply_markup=buy_menu(url=bill.pay_url, bill=bill.bill_id))
            else:
                await bot.send_message(message.from_user.id, "❌ Неверная сумма пополнения\n▶️Cумма не должна быть меньше 10₽\n Введите сумму для пополнения средств")
        else:
            await bot.send_message(message.from_user.id, "♦Неизвестная команда.")


@dp.callback_query_handler(text_contains="check_")
async def check(callback: types.CallbackQuery):
    bill = str(callback.data[6:])
    info = BotDB.get_check(bill)
    if info != False:
        if str(p2p.check(bill_id=bill).status) == "PAID":
            user_balance =BotDB.user_balance(callback.from_user.id)
            balance = float(info[1])
            BotDB.set_money(callback.from_user.id, user_balance+balance)
            await bot.send_message(callback.from_user.id, "Ваш баланс пополнен")
        else:
            await bot.send_message(callback.from_user.id, "Счет не оплачен", reply_markup=buy_menu(False, bill=bill))
    else:
        await bot.send_message(callback.from_user.id, "Счет не найден")

Код кнопки:
def buy_menu(isUrl=True, url="", bill=""):
    qiwiMenu = InlineKeyboardMarkup(row_width=1)
    if isUrl:
        btnUrlQIWI = InlineKeyboardButton(text="Перейти к оплате", url=url)
        qiwiMenu.insert(btnUrlQIWI)

    btnCheckQIWI = InlineKeyboardButton(text="Проверить оплату", callback_data="check_"+bill)
    qiwiMenu.insert(btnCheckQIWI)
    return qiwiMenu
  • Вопрос задан
  • 134 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

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