Интеграция со СБИС

Двухфакторная аутентификация

Двухфакторная аутентификация

Если у пользователя настроена двухфакторная аутентификация, методы аутентификации вернут ошибку вида JSON с кодом 303. В структуре dump будет содержаться информация для подтверждения входа. Далее надо:

  1. Вызвать метод AuthSendCode, передав значения полей «ResourceID» и «SessionID» из dump в качестве параметров. Метод сформирует код и отправит его на подтвержденный мобильный телефон пользователя.
  2. Вызовете метод AuthConfirmCode. В качестве параметров передайте:
    • код подтверждения из полученного смс-сообщения,
    • временный идентификатор сессии(«ResourceID»), который вернулся в результате AuthSendCode,
    • значение поля «MethodToValidate» из dump.
    В случае успеха метод вернет идентификатор сессии.

Пример ошибки

{
  'code': 303,
  'detail': 'Требуется подтверждение действия',
  'dump': {
    'MethodToValidate': 'САП.AuthenticateExPart2',
    'ResourceID': '3a23a986-3b0f-4763-89a5-519f7da8a271',
    'SessionID': '00610413-006104f7-eeba-fbd5a09730f7eaba'
  },
  ...
}

Пример кода для AuthSendCode

    query_id = str(uuid.uuid4())
    module_method = "ExtSdk2.AuthSendCode"
    parameters_module_method = json.dumps({"ResourceID": "3a23a986-3b0f-4763-89a5-519f7da8a271", "SessionID": 00610413-006104f7-eeba-fbd5a09730f7eaba}, ensure_ascii=True)
    host = online.sbis.ru

    ole.CallMethodWithoutAuth( query_id, guid_module, module_method, parameters_module_method, host )

    json_string = ole.ReadAllObject()

Пример ответа AuthSendCode

{
  'Result': '3a23a986-3b0f-4763-89a5-519f7da8a271',
  'Stat': ...
}

Пример кода для AuthConfirmCode

   query_id = str(uuid.uuid4())
    module_method = "ExtSdk2.AuthConfirmCode"
    parameters_module_method = json.dumps({"Param": { "Код": "пришедший код", "Идентификатор": "3a23a986-3b0f-4763-89a5-519f7da8a271", "ВызываемыйМетод": "САП.AuthenticateExPart2" } }, ensure_ascii=True)
    host = online.sbis.ru

    ole.CallMethodWithoutAuth( query_id, guid_module, module_method, parameters_module_method, host )

    json_string = ole.ReadAllObject()

Пример ответа AuthConfirmCode

{
  'Result': '********@plugin.sbis.ru',
  'Stat': ...
}

где «********@plugin.sbis.ru» — это идентификатор сессии, используйте его при вызове остальных методов модуля ExtSdk2 через методы COM-объекта CallMethod и CallMethodXML.

Нашли неточность? Выделите текст с ошибкой и нажмите ctrl + enter.