Чтобы получить ключ доступа (access_token), отправьте запрос на авторизацию по логину и паролю от личного кабинета разработчика:
curl --request POST \
  --url https://dev.evotor.ru/oauth/token \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data type=LOGIN \
  --data grant_type=password \
  --data client_id=Evo-UI \
  --data username={developer_username}\  # логин от личного кабинета разработчика
  --data password={developer_password}  # пароль от личного кабинета разработчика
  --data 2fa_confirmation={2fa_confirmation_code} # код двухфакторной авторизации
Из полученного ответа вам понадобится access_token. Пример ответа:
{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJYLUZpbmdlcnByaW50IjoiMjk3OThiNzg1NDI3N2M1M2YzZmJhYjRlZmU4YWZiZGYiLCJ1c2VyX25hbWUiOiJlLnpha2hhcm92QGV2b3Rvci5ydSIsInhfdXNlcl9pZCI6ImYwYjQwZGFiLTI4YTMtNDQ5Yy04OTZkLTFjOGI1OTRhNTY2MiIsInNjb3BlIjpbInJlYWQiLCJ3cml0ZSIsInB1cmNoYXNlIl0sImV4cCI6MTU5NzMyMjU0NiwiaWF0IjoxNTk3MzIwNzQ2MTI2LCJhdXRob3JpdGllcyI6WyJST0xFX1BVQkxJU0hFUiJdLCJqdGkiOiI5MmEwYWE0ZS0zNmIzLTQ4YmQtYWRmYy00ZDkxMzk1MTlhM2YiLCJ4X3VpZCI6bnVsbCwiY2xpZW50X2lkIjoiRXZvLVVJIiwieF9sb25nbGl2ZWQiOmZhbHNlfQ.RTi53lsvlLbCTvb4xjZ_DxlgASHHPTbwvd_Fm5XTkzE",
  "token_type": "bearer",
  "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJYLUZpbmdlcnByaW50IjoiNWIzYTdiZDljYTQ3YmRmNmQ5NGQ3ODJlYjZjYzJhZjIiLCJ1c2VyX25hbWUiOiJlLnpha2hhcm92QGV2b3Rvci5ydSIsInhfdXNlcl9pZCI6ImYwYjQwZGFiLTI4YTMtNDQ5Yy04OTZkLTFjOGI1OTRhNTY2MiIsInNjb3BlIjpbInJlYWQiLCJ3cml0ZSIsInB1cmNoYXNlIl0sImF0aSI6IjkyYTBhYTRlLTM2YjMtNDhiZC1hZGZjLTRkOTEzOTUxOWEzZiIsImV4cCI6MTU5NzM2Mzk0NiwiaWF0IjoxNTk3MzIwNzQ2MTI2LCJhdXRob3JpdGllcyI6WyJST0xFX1BVQkxJU0hFUiJdLCJqdGkiOiJhMTczNGY2YS01NDk1LTQyOTctOWU1NS0yZDI4ZDJmYThjNDAiLCJ4X3VpZCI6bnVsbCwiY2xpZW50X2lkIjoiRXZvLVVJIiwieF9sb25nbGl2ZWQiOmZhbHNlfQ.B3ztipg3UHuBmdySEnex5f25AIidyiJ9cQVlWnd-W94",
  "expires_in": 1799,
  "scope": "read write purchase",
  "X-Fingerprint": "29798b7854277c53f3fbab4efe8afbdf",
  "x_user_id": "f0b40dab-28a3-449c-896d-1c8b594a5662",
  "x_uid": null,
  "iat": 1597320746126,
  "x_longlived": false,
  "jti": "92a0aa4e-36b3-48bd-adfc-4d9139519a3f"
}
2fa_confirmation — это код двухфакторной авторизации, отправляемый на электронную почту, переданную в username. При авторизации с нового IP-адреса. Эвотор запоминает 10 IP-адресов и не запрашивает код при повторной авторизации с известного IP-адреса.
Код для двухфакторной авторизации запрашивается только при первой авторизации с IP. Далее код не будет запрашиваться для последних 10 пар IP-адресов — user-agent, с которых проходили авторизацию. Код передается в заголовке 2fa_confirmation.
2fa_confirmation.2fa_confirmation.Если отправляете с одного и того же IP, то повторно код запрашиваться не будет.
POST https://dev.evotor.ru/api/v1/publisher/app/oauth/public/apps/{app-id}/versions/{version-id}/oauth-apps
Создаёт клиента приложения с определённым набором прав доступа к ресурсам пользователя. Параметр version-id содержит идентификатор версии приложения.
Пример запроса:
curl -X POST \
  'https://dev.evotor.ru/api/v1/publisher/app/oauth/public/apps/537f5c5d-a173-466b-863a-dac5eb9d5bd0/versions/537f5c5d-a173-466b-863a-dac5eb9d5bd1/oauth-apps?type=web' \
  -H 'Authorization: Bearer 9179d710-56a4-49ea-b042-435e3257eaf6' \
  -H 'Content-Type: application/json' \
  -H 'Origin: https://dev.evotor.ru' \
  -H 'User-Agent: ' \
  -d '{
  "registered_redirect_uri": ["https://example.html/"],
  "scope": ["device:read"]
}'
Параметры запроса:
Заголовок Authorization содержит bearer-токен доступа.
Токен доступа вы можете получить в личном кабинете разработчика следующим образом:
В полученном списке выберите файл token и перейдите к ответу.
Токен содержится в поле access_token.
User-Agent — браузер, в котором был получен токен.Query-параметр type указывает тип клиента. Типы клиентов различаются доступными сценариями авторизации. Возможные значения:
web — выбирайте этот тип, если у вашего приложения есть серверная часть, которая будет участвовать в обмене кода авторизации на токен доступа. В этом случае идентификатор и секрет клиента может храниться на сервере приложения. Доступные сценарии авторизации: authorization_code, refresh_token, implicit.standalone — выбирайте этот тип, если у вашего приложения нет серверной части. В этом случае идентификатор и секрет клиента может быть указан в исходном коде приложения, которое пользователь устанавливает на своё устройство. Доступные сценарии авторизации: authorization_code, implicit.authorization_code.registered_redirect_uri — адрес страницы на вашем сервере, куда будет перенаправлен пользователь после подтверждения доступа к ресурсам.scope — массив строк, указывающих права доступа к ресурсам, которые клиент будет запрашивать у пользователя.Пример ответа:
{
    "client_id": "89856c66-c9d1-4fad-996e-71fa368179ee",
    "client_secret": "44c8fa46-af2d-47c3-b440-e2b82963ea0e",
    "scope": [
        "device:read"
    ],
    "authorized_grant_types": [
        "authorization_code",
        "implicit",
        "refresh_token"
    ],
    "registered_redirect_uri": [
        "https://example.html/"
    ],
    "access_token_validity": 604800,
    "publisher_id": "2d0c2b00-b843-45f1-97d2-2276e52fe469",
    "app_id": "537f5c5d-a173-466b-863a-dac5eb9d5bd0",
    "version_id": "0.1"
}
scope)Права доступа к ресурсам задаются в массиве scope при создании настроек авторизации. Например:
"scope": [
    "device:read",
    "product:read",
    "product.quantity:read",
    "product.quantity:write"
]
Таблица содержит ресурсы пользователя и права, которые может получить ваше приложение:
| Имя ресурса | Описание | Права доступа | 
|---|---|---|
| store | Получение информации о магазинах пользователя. | read | 
| employee | Получение информации о сотрудниках пользователя. | read | 
| device | Получение информации о смарт-терминалах пользователя. | read | 
| device.imei | Получение информации об IMEI смарт-терминала. | read | 
| device.location | Получение информации о местоположении смарт-терминала. | read | 
| device.firmware | Получение информации о версии прошивки смарт-терминала. | read | 
| product | Предоставляет доступ к номенклатуре. Вы можете как получать номенклатуру (read), так и изменять её (write). | read write | 
| product.quantity | Предоставляет доступ к остаткам товаров. Вы можете как получать остатки (read), так и изменять их (write). | read write | 
| document | Получение списка документов. | read | 
| product-group | Предоставляет доступ к группам товаров. Вы можете как получать группы товаров (read), так и изменять их (write). | read write | 
| product-image | Предоставляет доступ к изображениям товаров. Вы можете как получать изборажения товаров (read), так и изменять их (write). | read write | 
GET https://dev.evotor.ru/api/v1/publisher/app/oauth/public/apps/{app-id}/versions/{version-id}/oauth-apps
Возвращает список с данными всех клиентов приложения. Параметр version-id содержит версию приложения, заданную на сайте разработчиков.
Пример запроса:
curl -X GET \
  https://dev.evotor.ru/api/v1/publisher/app/oauth/public/apps/fabd6e93-9dcd-46d7-a4ca-3f9d8fc0a441/versions/0.1/oauth-app \
  -H 'Authorization: e0704952-b8de-467f-bfc4-8a6b919f8757' \
  -H 'Accept: Application/vnd.evotor.v2+json' \
  -H 'Origin: https://dev.evotor.ru' \
Параметры запроса:
Authorization содержит токен полученный одним из способов описанных в разделе “Авторизация запросов к Облаку Эвотор”.Accept содержит тип данных. Указывайте Application/vnd.evotor.v2+json.Пример ответа:
{
    "items": [
        {
            "client_id": "89856c66-c9d1-4fad-996e-71fa368179ee",
            "client_secret": "44c8fa46-af2d-47c3-b440-e2b82963ea0e",
            "scope": [
                "device:read"
            ],
            "authorized_grant_types": [
                "implicit",
                "authorization_code"
            ],
            "registered_redirect_uri": [
                "<redirect_url>"
],
            "access_token_validity": 604800,
            "publisher_id": "2d0c2b00-b843-45f1-97d2-2276e52fe469",
            "app_id": "fabd6e93-9dcd-46d7-a4ca-3f9d8fc0a441",
            "version_id": "0.1"
        }
    ],
    "paging": {}
}
scope)id вашего токена:
    curl --request GET \
--url https://dev.evotor.ru/api/v1/publisher/app/oauth/public/personal-tokens \
--header 'accept: application/json, text/plain, */*' \
--header 'content-type: application/json' \
--header 'x-authorization: Bearer {access_token}'
scope — список текущих прав и id вашего токена.
    {
"items": [
  {
 "scope": [
 "push-notification:write",
 "event:read",
 "installations:read"
 ],
  "id": "42b7ec031a1d40d969f3487ee9dcae63"
  }
],
"paging": {}
}
id токена, чтобы изменить права доступа. В теле запроса укажите все права для токена. Например, если добавляете права доступа, то в теле запроса должны быть и существующие права и новые.
    curl --request PUT \
--url https://dev.evotor.ru/api/v1/publisher/app/oauth/public/personal-tokens/42b7ec031a1d40d969f3487ee9dcae62 \
--header 'accept: application/json, text/plain, */*' \
--header 'content-type: application/json' \
--header 'x-authorization: Bearer {access_token}'
--data '{
  "scope": [
 "push-notification:write",
 "event:read",
 "installations:read"
  ]
}'
{
  "scope": [
 "push-notification:write",
 "event:read",
 "installations:read"
  ],
  "id": "{id}",
  "access_token": "{access_token}"
}
https://oauth.evotor.ru/oauth/authorize?client_id={client_id}&response_type=code&redirect_uri={redirect_url}
{client_id} и {redirect_url} замените на значения из настроек на шаге 2.
После нажатия на кнопку пользователь перейдёт к странице авторизации на market.evotor.ru. После ввода логина и пароля пользователь соглашается предоставить разрешения для приложения.
redirect_uri с параметром запроса code.
Пример:
    https://webhook.site/88ac1a25-1bdb-45a6-953e-10eac2cf6742?code=1VjYdDPDT0qf
Используя параметр code с шага 3, создайте access_token для пользователя:
curl --request POST \
  --url https://oauth.evotor.ru/oauth/token \
  --header 'authorization: Basic <base64 clientId:clientSecret>'\
  --header 'content-type: application/x-www-form-urlencoded' \
  --data code={code} \
  --data grant_type=authorization_code \
  --data redirect_uri=https://webhook.site/88ac1a25-1bdb-45a6-953e-10eac2cf6742
Пример ответа:
{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiIwMS0wMDAwMDAwMDE4OTA4MzMiLCJzY29wZSI6WyJwcm9maWxlOnJlYWQiXSwiZXhwIjoxNTk3NDA3NjE5LCJhcHBfaWQiOiJmNmUwZDZjOC03YWY2LTQ2NmYtYjM3OS1kMzkwOWUwN2JjNTQiLCJhdXRob3JpdGllcyI6WyJST0xFX0NVU1RPTUVSIl0sImp0aSI6IjIzYjM4ZDUzLTYzMTEtNDIxNy1hY2U4LWQ2NzNhN2E3YzUxNiIsImNsaWVudF9pZCI6ImM3ZDA3N2IxMmVjMWIwMzgzMzFkNDI4M2U4MTIyMTllIn0.fYkgLKCfH1Xib699pv6C93dvdnnk2mCEV_hDpo_GlKM",
  "token_type": "bearer",
  "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiIwMS0wMDAwMDAwMDE4OTA4MzMiLCJzY29wZSI6WyJwcm9maWxlOnJlYWQiXSwiYXRpIjoiMjNiMzhkNTMtNjMxMS00MjE3LWFjZTgtZDY3M2E3YTdjNTE2IiwiZXhwIjoxNTk5OTEzMjE5LCJhcHBfaWQiOiJmNmUwZDZjOC03YWY2LTQ2NmYtYjM3OS1kMzkwOWUwN2JjNTQiLCJhdXRob3JpdGllcyI6WyJST0xFX0NVU1RPTUVSIl0sImp0aSI6ImE0ZTg1MzRjLWQ4ODEtNDNhZC05MDI4LTZiNjM5ZjRiNzNhYiIsImNsaWVudF9pZCI6ImM3ZDA3N2IxMmVjMWIwMzgzMzFkNDI4M2U4MTIyMTllIn0.59YLkWqdSQ7-Go58NcNIo_j5NSQZRoFocUymuhv9ebM",
  "expires_in": 86399,   
  "scope": "profile:read",
  "jti": "23b38d53-6311-4217-ace8-d673a7a7c516"
}
Параметры ответа:
expires_in — время жизни в секундах;scope — установленные права доступа;jti — идентификатор токена.С полученным access_token будут выполняться все запросы к api.evotor.ru в соответствии с правами доступа.