Ошибка в инлайн кнопке

Рейтинг: 0Ответов: 1Опубликовано: 16.02.2023

Хэндлер:

@dp.callback_query_handler(Text(startswith='lolz_'))
async def check_lolz(callback: types.CallbackQuery):
    comment = callback.data.split('_', maxsplit=1)[1]
    user_id = db.check_account(comment)[0][0]
    amount = db.check_amount(comment)[0][0]
    print(lzt.get_payments(amount, comment))
    if lzt.get_payments(amount=amount, comment=comment) == True:
        db.add_balance(user_id, amount)
        await callback.message.answer('Средства успешно зачислены!')
        db.delete_bill(comment)
    else:
        await callback.message.answer('Оплата не найдена', reply_markup=markups.verify_lolz(False))

Класс для работы с API Lolzteam:

import requests
import time
import random
import secrets

class Lolz():

    def __init__(self, token: str):
        self.api_url = 'https://api.lzt.market/'
        self.session = requests.Session()
        self.session.headers = {
            'Authorization': f'Bearer {token}'
        }

    def get_random_comment(self):
        return f'{time.time()}_{secrets.token_hex(random.randint(12, 20))}'

    def get_payments(self, amount: int, comment: str):
        data = {
            'type': 'income',
            'comment': comment
        }
        response = self.session.get(f'{self.api_url}//user/4849636/payments')
        payments = response.json()['payments']
        for payment in payments.values():
            if 'Перевод денег от' in payment['label']['title'] and int(amount) == payment['incoming_sum'] and comment == payment['data']['comment']:
                return True
            else:
                return False

Ошибка:

    payments = response.json()['payments']
  File "C:\Users\floydpower\PycharmProjects\MY_SHOP\venv\lib\site-packages\requests\models.py", line 975, in json
    raise RequestsJSONDecodeError(e.msg, e.doc, e.pos)
requests.exceptions.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Ответы

▲ 0

Данная ошибка говорит о том, что ответ, который возвращает сервер API Lolzteam, не может быть расшифрован в формат JSON. Это может произойти, если сервер вернул пустой ответ или ответ не соответствует JSON-формату.

Чтобы исправить эту ошибку, необходимо добавить проверку на пустой ответ до вызова функции json():

if response.content:
    payments = response.json()['payments']
else:
    # обработка ситуации, когда ответ сервера пустой

Если ответ сервера пустой, необходимо произвести дополнительную диагностику, чтобы выяснить, почему ответ пустой. Можно попробовать повторить запрос позднее или проверить параметры запроса.