Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

AlfabankAPI для работы с Альфа-Заказчик On-line

Anna | 17.06.2014 | нет комментариев
Как и у многих, в один очаровательный день возникла идея автоматизировать бизнес процессы в своей организации. Так либо напротив автоматизировать дозволено всё и беспредельно длинно, но задача по работе с банком показалась особенно главной и увлекательной. Перед началом изыскания стоит предъявить требования к нужному API с поддержкой которого мы ходим общаться с банком. На первом этапе недурно было бы установить соединение с банком, получить нынешний равновесие и список операций по счёту на указанный период.

Поиск готовых решений от банков немного что дал. У многих банков сходственное API отсутствует в тезисе.

Раз всё так нехорошо, сделаем свой API с блэкджеком и для достижения цели. Так как автор работает с компанией Альфа-Банк, то и API будет на примере данного банка, но дюже верю, что позже прочтения начнутся открытые разработки и для остальных.

Видимо, что не имея особых инструментов для работы с банками, общаться с ними придётся по протоколу https, а значит итог мы будем получать и обрабатывать в виде html. Для этого запаситесь соответствующими библиотеками.
Решение нашей задачи сводится к двум основным задачам. Первая – это исследовать как наш браузер общается с банком, и вторая – повторить увиденное в нашем API. У большинства программистов это не составит большого труда.

Обзор запросов

  1. При загрузке страницы ibank.alfabank.ru/ALFAIBS32/ видим, что в результате содержится jsessionid, тот, что применяется в дальнейшем post-запросе.
  2. 2-й запрос использует jsessionid, и передаёт команду на загрузку формы авторизации.
    Запрос:

    https://ibank.alfabank.ru/ALFAIBS32/ControllerServlet;jsessionid=...

    Команда: command&auth_loginByPasswordPage

  3. С возвратом формы авторизации, мы теснее получаем OTOKey и новейший id сессии, тот, что отличается от первого, позже чего система ждет ввода логина и пароля.
  4. Последним шагом остаётся отправить данные авторизации с учётом нового jsessionid и проверить итог. Выглядит это приблизительно дальнейшим образом:

    Если всё прошло удачно, то в результате сервера мы найдём следующий jsessionid, но на данный раз он будет является последним, и применяться во всех последующих запросах.

  5. Проверить триумф авторизации дозволено испробовав обнаружить в результате тэг:
    <INPUT type='hidden' name='command' value='dashboard_preparePage'>
    

    По которому теснее загружается основная страница кабинета.

Разработка

чтобы не надоедать тоскливым кодом, остановимся только на построении запросов к серверу для авторизации. В примере не представлен метод приобретения нужных данных из html результатов сервера. Стоит подметить, что при авторизации не применяются cookies.

Пример построения запросов

private void SetRequestData(HttpWebRequest request, string data)
{
   var encoding = new ASCIIEncoding();
   byte[] byte1 = encoding.GetBytes(data);
   request.ContentLength = data.Length;
   var stream = request.GetRequestStream();
   stream.Write(byte1, 0, byte1.Length);
   stream.Close();
 }

public void Connect(string login, string password)
{
   // 1. Get- запрос для приобретения sessionId1
   var url = "https://ibank.alfabank.ru/ALFAIBS32/";
   var request = (HttpWebRequest)HttpWebRequest.Create(url);
   var response = (HttpWebResponse)request.GetResponse();

   // Получаем 1-й jsessionid из результата
   // sessionId1 = …

   // 2. Post- запрос для приобретения формы авторизации с новым jsessionid
   var controller = url   "ControllerServlet;jsessionid={0}";
   url =string.Format(controller, sessionId1);
   request = (HttpWebRequest)HttpWebRequest.Create, url);
   request.Method = "POST";
   request.ContentType = "application/x-www-form-urlencoded";
   SetRequestData(request, "command=auth_loginByPasswordPage");
   response = (HttpWebResponse)request.GetResponse();

   // Получаем из результата otokey и новейший jsessionid
   // var otokey = …
   // sessionId2 = …

   // 3. Заключительный запрос для заключения авторизации
   url =string.Format(controller, sessionId2);
   request = (HttpWebRequest)HttpWebRequest.Create, url);
   request.Method = "POST";
   request.ContentType = "application/x-www-form-urlencoded";

   var postData = string.Format(
        "command=auth_loginByPassword&username={0}&password{1} "  
        "&null_div_expanded=false&OTOKey={2}", login, password, otokey);

   SetRequestData(request, postData);
   response = (HttpWebResponse)request.GetResponse();

   // Profit!
}

Итог

Настало проверить итоги работы нашего небольшого API:

AlfabankAPI: Hello world!

class Program
{
   static void Main(string[] args)
   {
      var api = new AlfabankAPI.AlfabankAPI();
      api.Connect("k000000", "qwerty");

     Console.WriteLine("Balance: {0}", api.GetBalance());

     var date1 = new DateTime(2013, 9, 1);
     var date2 = DateTime.Now;
     var account = "40700000000000000000";

     var operations = api.GetMovementOnAccount(account , date1, date2);

     foreach (var o in operations)
        Console.WriteLine("{0} {1} {2}", o.Number, o.DateSend, o.Amount);

      Console.ReadKey();
   }
}

Завершение

Верю эта статья вдохновит на создание больше добротного и открытого API для разных банков.
Github: AlfabankAPI
Каждому пятницы.

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB