Как сделать последующий запрос к 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 и передавать его как переменную.