Как сделать последующий запрос к SAP Business One Service Layer из Django

Я хочу использовать Django для выполнения запросов к SAP Business One Service Layer. SAP B1 Service Layer требует первоначального входа в систему для создания сессии. Я могу аутентифицироваться и получить правильный ответ с возвращенным идентификатором сессии от Service Layer. Как я могу сохранить сеанс с другого сервера (в данном случае сервисного уровня) для выполнения дополнительных запросов? Ниже приведен код начального запроса SAP post к конечной точке Login.

sap_url = "https://sap_url.com:50000/b1s/v2/Login"

headers = { "authkey": "XXXXXXXXXXXXXXXXXXXX", "Accept": "/", "Content-Type": "text/plain", }

data = {
    "CompanyDB": "XXXXXXXX",
    "UserName": "XXXXXXXX",
    "Password": "XXXXXXX"
}

response = requests.post(sap_url, headers=headers, json=data)


print("JSON Response ", response.json())
return HttpResponse(response.json(), content_type='application/json')

Когда я делаю дополнительный запрос к Service Layer, я получаю ошибку в JSON-ответе. Любая информация или предложения будут очень признательны. Спасибо.

JSON Response {'error': {'code': '301', 'message': 'Неверная сессия или сессия уже завершилась' }}

Я нашел обходной путь для решения этого вопроса и надеюсь, что он поможет кому-то, кто ищет похожий ответ.

Что я сделал, так это сохранил "SessionId" из запроса Login и затем добавил его в "Cookie" внутри заголовка. Таким образом, последующие запросы будут содержать "Cookie" в заголовке. Я рассматривал это как обходной путь, когда использовал Postman и видел ключ и значение "Cookie" в заголовке

def GetOpenOrders(request):

sap_url = "https://sap_url.com:50000/b1s/v2/Orders"
headers = {
    "Cookie": "B1SESSION=SessionID; ROUTEID",
    "authkey": "XXXXXXXXXXXXXXXXXXXX",
    "Accept": "*/*",
    "Content-Type": "text/plain",
}

response = requests.get(sap_url, headers=headers)
print("JSON Response ", response.json())
return HttpResponse(response.json(), content_type='application/json')

Я проверил вручную, скопировав и вставив SessionId в значение "Cookie". Вам нужно хранить SessionId и передавать его как переменную.

Вернуться на верх