Skip to content

maxsivkov/py-taxer-api

Repository files navigation

Taxer.ua API

Purpose

Implement RestAPI for taxer.ua accounting system. Because taxer.ua is mostly used in Ukraine all documentation pages are in russian.

Languages/frameworks

Описание

Попытка реализовать некое средство интеграции с сервисом taxer.ua. В самом сервисе на данный момент отсутсвуют всякие средства интеграции по непонятным причинам. Получается что людям приходится переносить данные из клиент-банк приложений в taxer.ua вручную, что в XXI веке недопустимо.

Статус

  • Стадия прототипирования
  • Функционал

Как работает

  • Внутри у taxer.ua есть внутреннее API, однако чтобы им воспользоваться необходимо выполнить вход на сайт (указывае ligin/password). После этого в браузер приходят cookies одна из них это XSRF-TOKEN. Далее это значение подставляется в виде X-XSRF-TOKEN хидера в каждый вызов их внутреннего АПИ вместе с cookies
  • Исходя из п. 1 наша задача:
    • Выполнить вход на сайт
    • Получить значение XSRF-TOKEN и кук
    • Реализовать АПИ, которое по большому счету будет враппером к родному АПИ taxer.ua и будет использовать HTTP header X-XSRF-TOKEN и куки в каждом запросе
  • т.к. требуется входить на сайт (требуется задавать пару login/password) или входить с помощью token/cookies то данное АПИ не может быть публичным, поскольку в нем отсутсвуют средства овторизации (т.е. вы запускаете все на своей машине и работаете с этим АПИ исключительно со своей машины)
  • (OPTIONAL) Для автоматизации входа на сайт мы используем Selenium, после получения куков браузер уже не нужен
  • Т.к. при написании АПИ автоматом создается Swagger документация, вы имеете возможность сгенерировать SDK для любой платформы
    • После запуска приложения переходим на http://127.0.0.1:7080/swagger.json, копируем содержимое в clipboard
    • Идем на https://editor.swagger.io/, встакляем содержимое в левое окно (там где редактор)
    • В меню Generate Client выбираем нужную платформу, и через какоето время получаем готовый SDK. Существуют конечно методы генерации SDK с помощью Swagger Codegen но это уже out of scope

TODO

  • Реализовать PUT и DELETE во всех сущностях (Изменение и удаление)
  • Работа с дополнительными документами (накладная, чек, счет)

Примеры

Все примеры будут приведены с использованием curl, однако тоже самое можно выполнять в Swagger UI, которое доступно по адресу http://127.0.0.1:7080/docs после запуска приложения
В Taxer в одном аккаунте вы можете вести несколько предприятий/ФОП (далее будут именоваться как user)

Получение информации по учетной записи со всеми зарегистрированными предприятиями/ФОПами (users)

Так как Flask все выдает в юникоде, в консоли потребуется както перекодировать текстовые данные из Юникода в однобайтовую кодировку. Один из методов - скачать jq и положить куда-нибудь по путям
Запрос:

curl -sX GET "http://127.0.0.1:7080/account" -H "accept: application/json" | jq

Ответ

{
  "accountId": 217106,
  "accountName": "Свирид",
  "users": [
    {
      "id": 200664,
      "idKey": null,
      "titleName": "ФОП Свиридов С. С.",
      "isCompany": false
    }
  ]
}

Из этого следует, что идентификатор нашего аккаунта - 217106, нас зовут Свирид и у нас есть один подключенный ФОП (user) ФОП Свиридов С. С. с идентификатором 200664 (это наш userId для дальнейших запросов)
Дальше