Данный сценарий мы используем в том случае, если нам нужно совместить стандартные сценарии авторизации при помощи системных уведомлений и авторизацию через API. Для такого решения мы используем специальную настройку, которую можно установить на любом уровне авторизации, например, в приведенном ниже примере мы сначала авторизуем заказ в Кортеос, а потом делаем авторизацию в какой-то внешней системе при помощи API.
...
@id_ComplexReserve - номер авторизуемой командировки, предназначен для выгрузки при помощи метода SOAP API GetReservationDetails
@id_Authorization - идентификатор уровня авторизации, нужно передавать обратно при вызове метода согласования
@hash - подпись запроса для проверки целостности, следует передавать обратно при вызове метода согласования
...
Внешний вид таблицы согласований для согласованной через API командировки:
...
Использование веб-сервиса из мода Авторизация командировок через API
Альтернативно вместо основного веб-сервиса можно использовать веб-сервис, описанный в приведенном ниже документе.
"Авторизация командировок через API"(ModExternalAuth)
в методе мода Авторизации командировок через API есть такие параметры, которые надо заменить следующим образом:
int id_ComplexReserve - тут передаем не id_ComplexReserve, а id_Auth из коллбэка
bool authorize - true или false - согласовать или отклонить
string hash - должен быть в специальном формате, “COMPLEXAUTH-{оригинальных хэш}”, в этом случае пойдет обращение к методу сложной авторизации
Реализация данного сценария к коде ModExternalAuth
Code Block |
---|
|
Match m = Regex.Match(hash, "COMPLEXAUTH-(.+)", RegexOptions.IgnoreCase);
if (m.Success)
{
var svc = new ComplexAuthWS.ComplexAuthAPI();
svc.Url = CurrentWebSite.CurrentEnvironment.CurrentWebSiteUrl + "/PortableViews/ModComplexAuthViews/API/ComplexAuthAPI.asmx";
svc.Authorize(id_Authorization: id_ComplexReserve, IsSucceed: authorize, Comment: authorize ? "согласовано" : "не согласовано", Hash: m.Groups[1].Value);
return "ok";
} |
Веб-сервис для получения списка командировок, по которым была запрошена авторизация в заданный период 08.02.2022
Для получения списка необходимо использовать веб-сервис: YourDomain/PortableViews/ModComplexAuthViews/API/ComplexAuthAPI.asmx
WSDL: YourDomain/PortableViews/ModComplexAuthViews/API/ComplexAuthAPI.asmx?WSDL
Метод: YourDomain/PortableViews/ModComplexAuthViews/API/ComplexAuthAPI.asmx?op=GetComplexReservesByStartAuth
Параметры:
string Token – токен клиента
DateTime dateFrom – дата “с“ периода
DateTime dateTo – дата “по“ периода
Вопросы:
Expand |
---|
title | ПОЧЕМУ ПУСТОЙ ОТВЕТ ПРИ ЗАПРОСЕ С АГЕНТСКИМ ТОКЕНОМ? |
---|
|
Это клиентское api, поэтому для работы необходимо использовать клиентский токен |
Expand |
---|
title | КАК ПОД АГЕНТОМ ПОЛУЧИТЬ СПИСОК КОМАНИДРОВОК? |
---|
|
Получить токен для агента Получить клиентский контекст под агентом Отправить запрос
|
Пример запроса:
Expand |
---|
|
Code Block |
---|
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cor="https://corteos.ru/">
<soapenv:Header>
<cor:AuthHeader>
<cor:Token>190e4bf1-****-****-971a-7e7e2dbeb415</cor:Token>
</cor:AuthHeader>
</soapenv:Header>
<soapenv:Body>
<cor:GetComplexReservesByStartAuth>
<cor:dateFrom>2021-11-26T10:00:00</cor:dateFrom>
<cor:dateTo>2021-11-26T15:00:00</cor:dateTo>
</cor:GetComplexReservesByStartAuth>
</soapenv:Body>
</soapenv:Envelope> | Image AddedImage Added |
Пример ответа:
Expand |
---|
|
Code Block |
---|
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetComplexReservesByStartAuthResponse xmlns="https://corteos.ru/">
<GetComplexReservesByStartAuthResult>
<ComplexAuth id_ComplexReserve="774417" id_Authorization="419901" Hash="61b5b5e65a8bf191f6ac83eee6c54e97"/>
<ComplexAuth id_ComplexReserve="774417" id_Authorization="419902" Hash="e4446c6dfd71775907d927c60b2c004e"/>
</GetComplexReservesByStartAuthResult>
</GetComplexReservesByStartAuthResponse>
</soap:Body>
</soap:Envelope> | Image Added |
Пример ошибки:
Expand |
---|
title | Пример ошибки авторизации |
---|
|
Code Block |
---|
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>System.Web.Services.Protocols.SoapException: Серверу не удалось обработать запрос. ---> System.Exception: Авторизация по токену
Ошибка при получении контроллера бизнес-логики:
Токен 190e4bf1-****-****-971a-7e7e2dbeb415 не найден в системе, необходимо пройти авторизацию повторно.
в JavelinView3.Base.WebServices.BaseV3WebService.GetBLController(Guid token, Boolean createNewInstance) в C:\Projects\jv3\JavelinView3.Base\WebServices\_Common\Code\BaseWebService.cs:строка 291
в JavelinView3.Base.WebServices.BaseV3WebService.GetBLController(Guid token, Boolean createNewInstance) в C:\Projects\jv3\JavelinView3.Base\WebServices\_Common\Code\BaseWebService.cs:строка 348
в JavelinView3.Base.WebServices.BaseV3WebService.TryAuthFromHeaders(Boolean createNewControllerInstance) в C:\Projects\jv3\JavelinView3.Base\WebServices\_Common\Code\BaseWebService.cs:строка 199
в ModComplexAuth.PortableViews.ModComplexAuthViews.API.ComplexAuthAPI.GetComplexReservesByStartAuth(DateTime dateFrom, DateTime dateTo) в C:\Projects\jv3\ModComplexAuth\PortableViews\ModComplexAuthViews\API\ComplexAuthAPI.asmx.cs:строка 81
--- Конец трассировки внутреннего стека исключений ---</faultstring>
<detail/>
</soap:Fault>
</soap:Body>
</soap:Envelope> | Image Added |