Документація VIES API REST
вступ
Наданий нами API використовує стандартний протокол HTTP. Усі функції API використовують метод HTTP GET. Кожен виклик функції вимагає авторизації запиту. Дані для авторизації запиту надсилаються в HTTP-заголовку.
Сервіс виробництва
Потрібна реєстрація суб’єкта, який бажає використовувати функціональні можливості системи viesapi.eu. Для цього перейдіть до Реєстрація сторінку та заповніть відповідну форму. Передумовою використання системи viesapi.eu є прийняття Умови обслуговування. Правильно заповнивши форму та натиснувши кнопку зареєструватися кнопка створить обліковий запис у системі viesapi.eu та його автоматичну активацію.
Під час першого входу автоматично генерується ідентифікатор разом із відповідним ключем. Ідентифікатор є загальнодоступним і не потребує захисту, а ключ є закритим і не повинен надаватися третім особам.
Адреса служби виробництва: https://viesapi.eu/api
Тестовий сервіс
Повну функціональність усіх спільних бібліотек можна перевірити за допомогою спільної бібліотеки Перевірте VIES API. Використовуючи тестовий API, можна перевірити всі функції, які пропонуються в платних планах без необхідності створення облікового запису.
Адреса тестової служби: https://viesapi.eu/api-test
Визначення інтерфейсу API
Детальне визначення API доступне у форматі, сумісному з OpenAPI, і його можна завантажити як файл YAML тут.
API також доступний як клієнтський інтерфейс Swagger UI.
Виконання запиту
Приклад оформлення запиту на тестовий сайт:
GET /api-test/get/vies/euvat/PL7171642051 HTTP/1.1
Host: viesapi.eu:443
Authorization: MAC id="api_key_id", ts="unix_timestamp", nonce="random_str", mac="b64_calculated_mac_value"
User-Agent: VIESAPIClient/client_version platform_name/platform_version
Accept: mime_type
Де:
api_key_id
– Ідентифікатор ключа API (у робочому середовищі значення ідентифікатора, згенерованого під час реєстрації, у тестовому середовищі значення test_id),unix_timestamp
– поточний час у вигляді кількості секунд від т.зв епоха unix,random_str
– випадковий рядок, різний для кожного запиту (мін. 8 символів, макс. 16 символів),b64_calculated_mac_value
– розрахований HMAC (за допомогою anAPI key
, значенняtest_key
на тестовому середовищі),client_version
– версія клієнта (в наших бібліотеках це версія нашої бібліотеки API, наприклад 1.2.3),platform_name
– назва клієнтської платформи API (в наших бібліотеках це назва мови бібліотеки, наприклад, JAVA, PHP, .NET, Python),platform_version
– Версія клієнтської платформи API (в наших бібліотеках це версія бібліотечного середовища, наприклад, 17 для JAVA або 7.4 для PHP),mime_type
– Назва типу MIME, у якому має бути повернута відповідь, підтримуються два типи:text/xml
іapplication/json
, якщо запит не містить заголовка Accept, за замовчуванням повертається XML.
Запит на автентифікацію
Авторизаційні дані повинні бути підготовлені відповідно до HTTP-автентифікація: MAC-автентифікація доступу і це рекомендований метод автентифікації. Також можна використовувати Автентифікація HTTP: базова автентифікація однак з міркувань безпеки використовуйте його лише тоді, коли використання першого методу з певних причин неможливе.
Кожен запит до нашого веб-сайту має бути автентифікований за допомогою одного з двох доступних методів.
Спосіб 1 – HMAC (рекомендовано)
Специфікація використовуваного методу авторизації: HTTP-автентифікація: MAC-автентифікація доступу. Авторизація полягає в обчисленні HMAC SHA256 із правильно підготовленого рядка та надсиланні результату в заголовку HTTP.
приклад
Вхідний рядок для функції HMAC:
ts + '\n' + nonce + '\n' + method + '\n' + path + '\n' + host + '\n' + port + '\n\n'
Де:
ts
– поточний час у вигляді кількості секунд від т.зв епоха unix, ви завжди повинні надавати поточний час виконання запиту (допуск сервера +/- 10 хв по відношенню до поточного часу),nonce
– випадковий рядок, різний для кожного запиту (мін. 8 символів, макс. 16 символів),method
– Назва методу HTTP (завжди GET),path
– URL-шлях запиту, який буде виконано,host
– Ім’я сервера VIES API (завждиviesapi.eu
),port
– Номер порту сервера VIES API (завжди 443),’\n’
– символ нового рядка (код ASCII 10, 0x0A).
Для запиту щодо номера платника ПДВ PL7171642051, надісланого тестовій службі 2019-11-25 00:00:00 UTC, вхідний рядок у функцію HMAC виглядатиме так:
str = "1574640000\ndt831hs59s\nGET\n/api-test/get/vies/euvat/PL7171642051\nviesapi.eu\n443\n\n"
Файл вхідного рядка для цього прикладу можна завантажити тут.
З підготовленого рядка ми обчислюємо HMAC SHA256 як пароль HMAC, який ми надаємо API key
, тобто у випадку тестового API, значення test_key
:
HMAC_SHA256(str, "test_key") = 7776a12b958233ce60dd0f16b8d141e80472a1ee3b1e1fb136d7abe34cb59306
Функція HMAC SHA256 повертає 32 двійкові байти (показано вище як a hex
рядок для читабельності). Завантажте файл із двійковим значенням тут.
Двійкове значення розрахованого HMAC потрібно закодувати за допомогою алгоритму Base64, отримуємо:
d3ahK5WCM85g3Q8WuNFB6ARyoe47Hh+xNter40y1kwY=
Це значення має надсилатися як значення MAC у заголовку з даними для авторизації. Нарешті:
Authorization: MAC id="test_id", ts="1574640000", nonce="dt831hs59s", mac="d3ahK5WCM85g3Q8WuNFB6ARyoe47Hh+xNter40y1kwY="
На машині Linux необхідне значення MAC можна обчислити за один крок за допомогою цієї команди:
$ echo -e -n "1574640000\ndt831hs59s\nGET\n/api-test/get/vies/euvat/PL7171642051\nviesapi.eu\n443\n\n" | openssl dgst -sha256 -hmac "test_key" -binary | openssl enc -base64
Спосіб 2 – базова автентифікація
Специфікація цього використаного методу авторизації: Автентифікація HTTP: базова автентифікація.
Приклад 1
Вхідний рядок для функції Base64:
str = key_id + ':' + key
Де:
key_id
– ідентифікатор ключа API (у випадку тестового середовища,test_id
рядок),key
– ключ API (у випадку тестового середовища – рядокtest_key
).
Для тестового середовища вхідний рядок для функції Base64 буде таким:
str = "test_id:test_key"
Після застосування функції Base64 ми отримуємо:
Base64(str) = dGVzdF9pZDp0ZXN0X2tleQ==
Це значення слід надіслати як базове значення в заголовку з даними для авторизації. Зрештою:
Authorization: Basic dGVzdF9pZDp0ZXN0X2tleQ==
Приклад 2
У наступному прикладі показано запит, який можна викликати в тестовому середовищі з веб-браузера. Просто скопіюйте та вставте його в адресний рядок браузера:
https://test_id:test_key@viesapi.eu/api-test/get/vies/euvat/PL7171642051
Де:
test_id
– для аутентифікації у виробництві навколишнє середовище, параметр повинен містити дійсний ідентифікатор ключа, який використовується для авторизації,test_key
– для аутентифікації у виробництві середовища, параметр повинен містити дійсне значення ключа, який використовується для авторизації.
Ідентифікатор ключа та ключ генеруються користувачем після входу в обліковий запис на viesapi.eu
портал (API keys
вкладка). Сee the документація сторінку для отримання додаткової інформації про створення ідентифікатора та ключа.
Відповідь
Якщо запит оброблено правильно, буде згенеровано таку відповідь:
Детальний опис повернутих атрибутів:
uid
– унікальний ідентифікатор запиту, згенерований viesapi.eu,countryCode
– код країни, у якій зареєстрована компанія, пов’язана з номером ПДВ ЄС, наданим у запиті,vatNumber
– Номер платника ПДВ ЄС перевіреної компанії, наданий у запиті,valid
– відповідь від сервісу VIES з інформацією про поточний ПДВ-статус ЄС перевіряється:true
– номер ПДВ ЄС, наданий у запиті, дійсний,false
– номер ПДВ ЄС, наданий у запиті, недійсний,
traderName
- фірмове найменування підприємства,traderCompanyType
– завжди повертав рядок із символів «-»,traderAddress
– адреса компанії, за якою зареєстрована компанія,id
– унікальний ідентифікатор запиту, згенерований системою VIESdate
– дата виконання запитуsource
– джерело даних, завжди: http://ec.europa.eu
Відповідь на помилку
У разі будь-якої помилки, пов’язаної з обробкою запиту, повертається таке повідомлення про помилку:
Детальний опис повернутих атрибутів:
code
– унікальний код помилки для автоматичної обробки помилок,description
– опис помилок, які перехоплює людина,details
– мдокладний опис помилки (необов'язково),
Коди помилок
У таблиці нижче перераховано всі можливі помилки, які повертаються REST API та бібліотеками програмування:
Код помилки | Повідомлення про помилку |
8 | Недійсний формат запиту |
10 | Недійсний шлях API |
11 | Внутрішня помилка служби |
22 | Номер ПДВ ЄС недійсний |
23 | Не вдалося отримати дані з системи VIES |
26 | Ця функція недоступна в поточному вибраному плані |
27 | Ця функція не підтримує цей режим пошуку |
33 | Запит даних даних неможливий у тестовому режимі |
35 | Авторизація запиту доступу не потрібна |
36 | Послуга тимчасово недоступна через планові технічні роботи |
43 | Не вдалося отримати кількість запитів користувачів за поточний місяць |
54 | Неправильна дата або час на комп’ютері або системі користувача |
55 | Недійсне значення рядка MAC у заголовку з обліковими даними запиту |
57 | Недійсне значення ключа в заголовку з обліковими даними запиту |
58 | Досягнуто максимальної кількості одночасних запитів для цієї держави-члена |
59 | Програма в державі-члені не відповідає або недоступна |
101 | IP-номер підключення не збігається з IP-номером, призначеним ключу API |
102 | Ключ API заблоковано |
103 | Недійсний ключ API |
104 | Досягнуто максимальної кількості запитів, доступних для вибраного плану |
105 | Обліковий запис заблоковано або видалено |
106 | Недійсний тип облікового запису |
107 | Рахунок передоплати не сплачено |
108 | Недійсний ідентифікатор ключа API |
201 | Не вдалося підключитися до служби API VIES |
202 | Відповідь служби VIES API має недійсний формат |
203 | Недійсний тип номера |
204 | NIP недійсний |
205 | Ідентифікаційний номер ПДВ ЄС недійсний |
206 | Функція створила виняток |
207 | Дата має недійсний формат |
208 | Недійсний вхідний параметр |