Пишу телеграм бота на 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