Implement RestAPI for taxer.ua accounting system. Because taxer.ua is mostly used in Ukraine all documentation pages are in russian.
- Python 3.7
- Selenium для реализации browser-related задач
- flask-restx для реализации самого АПИ
- marshmallow, marshmallow-dataclass для сериализации/десериализации
Попытка реализовать некое средство интеграции с сервисом taxer.ua. В самом сервисе на данный момент отсутсвуют всякие средства интеграции по непонятным причинам. Получается что людям приходится переносить данные из клиент-банк приложений в taxer.ua вручную, что в XXI веке недопустимо.
- Стадия прототипирования
- Функционал
- Получение информации по учетной записи, настроенных профилях (то что показывается в https://taxer.ua/ru/my/settings/users)
- Получение информации по банковским счетам для профиля (https://taxer.ua/ru/my/finances/accounts)
- Получение списка операций (https://taxer.ua/ru/my/finances/operations)
- Получение развернутой информации по каждой операции
- Внесение данных по операциям
- Внутри у 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
- Реализовать PUT и DELETE во всех сущностях (Изменение и удаление)
- Работа с дополнительными документами (накладная, чек, счет)
Все примеры будут приведены с использованием curl, однако тоже самое можно выполнять в Swagger UI, которое доступно по адресу http://127.0.0.1:7080/docs после запуска приложения
В Taxer в одном аккаунте вы можете вести несколько предприятий/ФОП (далее будут именоваться как user)
Так как 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 для дальнейших запросов)
Дальше