Найти - Пользователи
Полная версия: Взаимодействие по API с тестовым контуром федресурса
Начало » Центр помощи » Взаимодействие по API с тестовым контуром федресурса
1 2
grobi_dex
Добрый день! Я написал код, используя инструкцию по подключению к тестовому контуру "https://fedresurs.ru/helps/Sfacts/MessagesService_3.4.pdf". Но при отправке запроса, возвращается ошибка о недоступности службы. Я уже всю голову сломал, может уже закипаю. Какие ошибки. Прошу сильно не пинать за код ногами.
Хотел сделать, чтобы при вводе определенного ИНН отправлялся запрос на сервер и возвращались все сообщения с упоминанием введенного ИНН. Сейчас в коде запрос ИНН есть, но запрос отправляется с уже введенным, как из примера в спецификации. Запрос ровно такой же как 3.1.2 Пример тела запроса.
Ссылку на код прикладываю ниже, буду благодарен за помощь.
https://github.com/GrobiDex/APIfedresurs/blob/main/app.py
xam1816
почему в словаре два одинаковых ключа
  
query = {
    'messageTypes': 'AnyOther',
    'messageTypes': 'FinancialLeaseContract',
    'participant.type': 'Company',
    'participant.code': '1027700109271',
    'limit': 20,
    'offset': 0
}
grobi_dex
xam1816
почему в словаре два одинаковых ключа
Я нашел несколько ошибок, там не только в этих ключах вопрос был, код обновил по ссылке
Однако все равно выдает ошибку 400, какие данные ему еще некорректные в запросе? Все же сейчас правильно должно улетать, есть подозрения, что я ссылку формирую криво.
xam1816
grobi_dex
используя инструкцию по подключению к тестовому контуру https://fedresurs.ru/helps/Sfacts/MessagesService_3.4.pdf.
нет страницы у меня 404
grobi_dex
xam1816
нет страницы у меня 404
попробуй так "https://fedresurs.ru/helps/Sfacts/MessagesService_3.4.pdf" скопировать и в адресную
py.user.next
Я поправил первоначальный код, чтобы получить ответ только. Что-то ты там не то ищешь в нём в итоге.
  
>>> import requests
>>> import json
>>> import hashlib
>>> 
>>> # URL для авторизации и вызова методов
... url = 'https://services.fedresurs.ru/SignificantEvents/MessagesServiceDemo2/'
>>> 
>>> # Логин и пароль для авторизации
... login = 'demo'
>>> password = 'Ax!761BN'
>>> 
>>> # Функция для проверки и очистки введенного ИНН
... def process_inn():
...     while True:
...         inn = input('Введите ИНН (от 10 до 15 цифр): ')
...         inn = ''.join([ch for ch in inn if ch.isdigit()]) # Удаление всех символов из строки, оставление только цифр
...         if 10 <= len(inn) <= 15:
...             return inn
...         print('Введите число, состоящий из 10-15 цифр')
... 
>>> # Хэширование пароля
... password_hash = hashlib.sha512(password.encode('utf-8')).hexdigest().upper()
>>> 
>>> # Параметры запроса на авторизацию
... params = {
...     'login': login,
...     'passwordHash': password_hash
... }
>>> 
>>> # Отправка POST-запроса для получения авторизационного токена
... response = requests.post(url + 'v1/auth', data=json.dumps(params), headers={'Content-Type': 'application/json'})
>>> 
>>> # Извлечение токена из ответа
... if response.status_code == requests.codes.ok:
...     #token = response.content.decode('utf-8')
...     token = response.json()['jwt']
...     headers = {
...         'Authorization': 'Bearer ' + token
...     }
...     print('Токен получен')
... else:
...     print('Не удалось получить токен авторизации. Код ошибки: %d' % response.status_code)
...     token = ''
...     headers = {}
... 
Токен получен
>>> #inn = process_inn()
... 
>>> query = {
...     'messageTypes': 'AnyOther',
...     'messageTypes': 'FinancialLeaseContract',
...     'participant.type': 'Company',
...     'participant.code': '1027700109271',
...     'limit': 20,
...     'offset': 0
... }
>>> 
>>> response = requests.get(url + 'v1/messages', headers=headers, params=query)
>>> response.raise_for_status()
>>> # messages = response.json()['data']
... 
>>> # for message in messages:
... #     print(message['messageGuid'])
... #     print(message['participantCode'])
... #     print(message['datePublish'])
... #     print(message['messageTypeName'])
... #     print(message['messageText'])    
... 
>>> import pprint
>>> 
>>> pprint.pprint(response.json())
{'messages': [{'bodyAttributes': [{'date': '2020-12-18T00:00:00',
                                   'number': '6281/1/A/20/3'}],
               'datePublish': '2020-12-21T15:45:56.847',
               'guid': '2A447F653A104ED0B4A3789F2EB0C16C',
               'isAnnulled': False,
               'isLocked': False,
               'messageType': {'description': 'Заключение договора финансовой '
                                              'аренды (лизинга)',
                               'name': 'FinancialLeaseContract'},
               'number': '00023657',
               'participants': ['ООО "Спецтранс Веста"',
                                'ЗАО "ДОЙЧЕ ЛИЗИНГ ВОСТОК"'],
               'publisher': 'ЗАО "ДОЙЧЕ ЛИЗИНГ ВОСТОК"'},
              {'bodyAttributes': [{'date': '2020-12-04T00:00:00',
                                   'number': '751/1/A/20/30'}],
               'datePublish': '2020-12-15T19:01:23.057',
               'guid': '8854017631A748718F3EB3A3CE8969CB',
               'isAnnulled': False,
               'isLocked': False,
               'messageType': {'description': 'Заключение договора финансовой '
                                              'аренды (лизинга)',
                               'name': 'FinancialLeaseContract'},
               'number': '00023611',
               'participants': ['ЗАО "ДОЙЧЕ ЛИЗИНГ ВОСТОК"',
                                'ООО "Алексеевскдорстрой"'],
               'publisher': 'ЗАО "ДОЙЧЕ ЛИЗИНГ ВОСТОК"'},
              {'bodyAttributes': [{'date': '2020-07-08T00:00:00',
                                   'number': '620/1/A/20/99'}],
               'datePublish': '2020-07-13T13:27:25.733',
               'guid': '0D2A87E6A19A4C9296B9A91F88DA95A2',
               'isAnnulled': False,
               'isLocked': False,
               'messageType': {'description': 'Заключение договора финансовой '
                                              'аренды (лизинга)',
                               'name': 'FinancialLeaseContract'},
               'number': '00016973',
               'participants': ['ООО "Спецтранс Веста"',
                                'ЗАО "ДОЙЧЕ ЛИЗИНГ ВОСТОК"'],
               'publisher': 'ЗАО "ДОЙЧЕ ЛИЗИНГ ВОСТОК"'},
              {'bodyAttributes': [{'date': '2020-06-04T00:00:00',
                                   'number': '875/1/A/20/23'}],
               'datePublish': '2020-06-17T11:19:39.3',
               'guid': '79DFB275D8E740E785AA38F0FB63E12F',
               'isAnnulled': False,
               'isLocked': False,
               'messageType': {'description': 'Заключение договора финансовой '
                                              'аренды (лизинга)',
                               'name': 'FinancialLeaseContract'},
               'number': '00016715',
               'participants': ['ЗАО "ДОЙЧЕ ЛИЗИНГ ВОСТОК"',
                                'ООО "Роуд Групп"'],
               'publisher': 'ЗАО "ДОЙЧЕ ЛИЗИНГ ВОСТОК"'},
              {'bodyAttributes': [{'date': '2020-04-17T00:00:00',
                                   'number': 'DChugunov14/1/A/20/6'}],
               'datePublish': '2020-04-17T10:48:05.253',
               'guid': '24CCBC8C52984AD5BABC11864FD8E56C',
               'isAnnulled': False,
               'isLocked': False,
               'messageType': {'description': 'Заключение договора финансовой '
                                              'аренды (лизинга)',
                               'name': 'FinancialLeaseContract'},
               'number': '00016597',
               'participants': ['Абакаров Шарабуттин Гамидович',
                                'ЗАО "ДОЙЧЕ ЛИЗИНГ ВОСТОК"'],
               'publisher': 'ЗАО "ДОЙЧЕ ЛИЗИНГ ВОСТОК"'},
              {'bodyAttributes': [{'date': '2020-04-17T00:00:00',
                                   'number': '6202/1/A/20/6'}],
               'datePublish': '2020-04-17T10:29:45.44',
               'guid': '91F6590D237E4CBC8DC8DEDC9D07A98A',
               'isAnnulled': False,
               'isLocked': False,
               'messageType': {'description': 'Заключение договора финансовой '
                                              'аренды (лизинга)',
                               'name': 'FinancialLeaseContract'},
               'number': '00016596',
               'participants': ['АЛЕШИН ДМИТРИЙ ЮРЬЕВИЧ',
                                'ЗАО "ДОЙЧЕ ЛИЗИНГ ВОСТОК"'],
               'publisher': 'ЗАО "ДОЙЧЕ ЛИЗИНГ ВОСТОК"'},
              {'bodyAttributes': [{'date': '2020-04-10T00:00:00',
                                   'number': '946/1/A/20/47'}],
               'datePublish': '2020-04-10T09:56:45.247',
               'guid': '751DB71AC00A407E967A3B732E1C7730',
               'isAnnulled': False,
               'isLocked': False,
               'messageType': {'description': 'Заключение договора финансовой '
                                              'аренды (лизинга)',
                               'name': 'FinancialLeaseContract'},
               'number': '00016584',
               'participants': ['ЗАО "ДОЙЧЕ ЛИЗИНГ ВОСТОК"', 'ООО "ПОБЕДА"'],
               'publisher': 'ЗАО "ДОЙЧЕ ЛИЗИНГ ВОСТОК"'}],
 'total': 7}
>>> 
xam1816
 import requests
import json
import hashlib
# URL для авторизации и вызова методов
url = 'https://services.fedresurs.ru/SignificantEvents/MessagesServiceDemo2/v1/'
# Логин и пароль для авторизации
login = 'demo'
password = 'Ax!761BN'
session = requests.Session()
# Функция для проверки и очистки введенного ИНН
def process_inn():
    while True:
        inn = input('Введите ИНН (от 10 до 15 цифр): ')
        inn = ''.join([ch for ch in inn if ch.isdigit()]) # Удаление всех символов из строки, оставление только цифр
        if 10 <= len(inn) <= 15:
            return inn
        print('Введите число, состоящий из 10-15 цифр')
# Хэширование пароля
password_hash = hashlib.sha512(password.encode('utf-8')).hexdigest()
# Параметры запроса на авторизацию
params = {'login': login, 'passwordHash': password_hash}
# Отправка POST-запроса для получения авторизационного токена
response = session.post(url + 'auth', data=json.dumps(params), headers={'Content-Type': 'application/json'})
# Извлечение токена из ответа
if response.status_code == requests.codes.ok:
    token = response.json()
    session.headers.update({'Authorization': 'Bearer ' + token['jwt']})
    print('Токен получен')
else:
    print('Не удалось получить токен авторизации. Код ошибки: %d' % response.status_code)
    token = ''
    headers = {}
query = {
    'messageTypes': ['AnyOther', 'FinancialLeaseContract'],
    'participant.type': 'Company',
    'participant.code': '1027700109271',
    'limit': 20,
    'offset': 0
}
# Отправка запроса на контур
response = session.get(url + 'messages', params=query)
print(response.url)
print(response.status_code)
grobi_dex
py.user.next
Я поправил первоначальный код, чтобы получить ответ только. Что-то ты там не то ищешь в нём в итоге.
ладе не представляешь как я себя чувствую, когда вижу, что у тебя получилось, а я запустив твой же код получаю ошибку 400
xam1816
grobi_dex
ладе не представляешь как я себя чувствую, когда вижу, что у тебя получилось, а я запустив твой же код получаю ошибку 400

  
'participant.type': 'Company'
py.user.next
grobi_dex
ладе не представляешь как я себя чувствую, когда вижу, что у тебя получилось, а я запустив твой же код получаю ошибку 400
Да я смотрю, ты уже в собственном коде запутался. Просто надо учиться пользоваться системой контроля версий. Коммиты не должны быть хаотичными. Каждый коммит должен быть со смыслом и полностью описан. Бывает так, что коммиты перекидываются потом, меняется их порядок, делается их слияние и так далее. Поэтому каждый коммит должен быть максимально независим от соседних коммитов.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB