Одной из проблем для компаний является проверка клиентов и контрагентов на благонадежность. Можно реализовать этот процесс вручную, а можно автоматизировать процесс, ускорив его и минимизировав человеческий фактор.
Сервис Femida предоставляет свой API для решения этой задачи. В отчете компания получает полный анализ по финансовой и правовой благонадежности проверяемого, а так же негативные факторы по специализациям.
Цель: Разработать механизм получения данных через API Femida.
Виды ответов сервиса:
Задачи:
Для доступа к API Femida, перед началом работы, необходимо запросить токен, отправив в сервис связку логин/пароль. В ответе приходит токен и его "время жизни". В дальнейшем, полученный токен должен передаваться в Header каждого запроса по ключу Authorization:
var httpRequest = WebRequest.Create(url) as HttpWebRequest;
httpRequest.Method = "POST";
httpRequest.Headers["Authorization"] = token;
httpRequest.ContentType = "application/json";
using (var streamWriter = new StreamWriter(httpRequest.GetRequestStream()))
{
streamWriter.Write(json);
}
В Postman, передача токена, выглядит следующим образом:
Если в ответ на запрос приходят json-данные, то следующим шагом десериализуем их до объекта и заполняем необходимые свойства:
var rosinfoJson = Counterparty.PublicFunctions.Module.PostRequest("isTerrorist", token, args);
if (Regex.IsMatch(rosinfoJson, pattern, RegexOptions.IgnoreCase))
{
var rosinfoInfo = Counterparty.PublicFunctions.Module.DesirializeJsonForRosInfo(rosinfoJson);
if (rosinfoInfo.is_terrorist == 1)
app.RosInfo = RosInfo.Yes;
else if (rosinfoInfo.is_terrorist == 0)
app.RosInfo = RosInfo.No;
else
app.RosInfo = null;
}
Если же в ответ на запрос приходит PDF, закодированный в поток байт, то необходимо записать его в версию документа:
using (var httpResponse = (HttpWebResponse)httpRequest.GetResponse())
using (var responseStream = httpResponse.GetResponseStream())
{
if (!information.HasVersions ||
information.LastVersion.Modified < Calendar.Now.AddDays(-1))
{
information.CreateVersionFrom(responseStream, "pdf");
information.Save();
Logger.Debug("[+] Added version from post request");
}
}
В ходе разработки возникали некоторые трудности, которые были решены следующими способами:
var highrisksJson = Counterparty.PublicFunctions.Module.PostRequest("isInBlackList", token, args); if (Regex.IsMatch(highrisksJson, pattern, RegexOptions.IgnoreCase))
{
var highrisksInfo = Counterparty.PublicFunctions.Module.DesirializeJsonForHighRisks(highrisksJson);
if (highrisksInfo.is_in_blacklist == 1)
app.HighRisks = HighRisks.Yes;
else if (highrisksInfo.is_in_blacklist == 0)
app.HighRisks = HighRisks.No;
else if (highrisksInfo.is_in_blacklist == -3)
app.HighRisks = HighRisks.NoData;
else
app.HighRisks = HighRisks.NoAnswer;
}
var login = settings.Logincentrvd;
var password = settings.Passwordcentrvd;
var tokenJson = FemidaAccessTokenRequest(login, password);
int number;
if (tokenJson == "403")
return "[!] Ошибка (403): Истек срок действия логин/пароль.";
if (tokenJson == "500")
return "[!] Ошибка (500): Внутренняя ошибка сервера Femida.API";
if (int.TryParse(tokenJson, out number))
return string.Format("[!] Ошибка ({0})", tokenJson);
var tokenInfo = DesirializeJsonForAPIFemidaToken(tokenJson);
return tokenInfo.token;
string pattern = @"^{.*}$";
var scoringJson = Counterparty.PublicFunctions.Module.PostRequest("getLegalScoring", token, scoringArgs);
if (Regex.IsMatch(scoringJson, pattern, RegexOptions.IgnoreCase))
{
// проверка Scoring
}
В этой статье было рассмотрено, как при помощи внедрения автоматизированных процессов можно добиться сокращения затраты ресурсов на исполнение поставленных задач.
Авторизуйтесь, чтобы написать комментарий