Перейти к содержанию

Домашняя

Описание#

Remote — метод интеграции с сервисом Облачного ЭЦП посредством использования frontend-клиента Biometric.

Данный метод предполагает создание сессии и дальнейшее перенаправление конечного пользователя на клиент для завершения процесса подписания документов.


Этапы:#

1. Получение API KEY#

Для начала работы с сервисом необходимо получить API KEY, который выдается менеджером компании.

2. Создание Сессии#

Для взаимодействия с сервисом необходимо создать сессию. Это делается путем выполнения POST-запроса, передавая в заголовке API KEY, а также ИИН и номер телефона клиента в теле запроса.

При необходимости, возможно скрытие кнопки скачивания архива с копиями документов. Это возможно через передачу поля show_download_button со значением true внутри поля metadata.

По умолчанию, значение всегда является true (т.е. показывать кнопку скачивания).

Время жизни сессии составляет 30 минут. Сессию нельзя перепроходить. При такой необходимости нужно создать новую сессию и пройти процесс подписания документов заново.

URL для запроса:

  • Dev: https://dev.b-key.kz/api/v1/session/create/

  • Prod: https://api.b-key.kz/api/v1/session/create/

Формат запроса Метод запроса
JSON POST

API KEY передается в заголовке запроса:

--header 'x-api-key: API_KEY'

При подписании поддерживаются файлы форматов .xml и .pdf. Тип файла указывается при создании сессии.

enum document_type {
  pdf = "pdf",
  xml = "xml",
}

Параметры тела запроса:

Наименование поля Тип Обязательно Описание
iin String Да ИИН клиента
phone String Да Телефон клиента компании, формат 77*********
document_type String Нет Тип подписываемого документа: .pdf или .xml. По умолчанию - .pdf
metadata Hashtable Нет Метаданные, которые можно установить при создании сесссии, например, show_download_button (см. выше)

Приведенные ниже примеры содержат тестовые данные. В реальных запросах значения полей будут соответствовать информации конкретного субъекта.

В случае использования production-среды нужно использовать субдомен api.b-key.kz

Примеры запроса:

curl --request POST \
--url https://dev.b-key.kz/api/v1/session/create/ \
--header 'Content-Type: application/json' \
--header 'x-api-key: API_KEY' \
--data '{
  "iin": "<subjects_iin>",
  "phone": "7*********",
  "document_type": "pdf",
  "metadata": {
    "show_download_button": false  
  }
}'
import requests
import json

url = "https://dev.b-key.kz/api/v1/session/create/"
headers = {
    "Content-Type": "application/json",
    "x-api-key": "API_KEY"
}
data = {
    "iin": "<subjects_iin>",
    "phone": "7*********",
    "document_type": "pdf",
    "metadata": {
        "show_download_button": False
    }
}

response = requests.post(url, json=data, headers=headers)

print(response.json())
const url = "https://dev.b-key.kz/api/v1/session/create/";
const headers = {
    "Content-Type": "application/json",
    "x-api-key": "API_KEY"
};
const data = {
    iin: "<subjects_iin>",
    phone: "7*********",
    document_type: "pdf",
    metadata: {
        "show_download_button": true
    }
};

fetch(url, {
    method: "POST",
    headers: headers,
    body: JSON.stringify(data)
})
    .then(response => response.json())
    .then(result => console.log("Session created:", result))
    .catch(error => console.error("Error:", error));
const url: string = "https://dev.b-key.kz/api/v1/session/create/";
const headers: Record<string, string> = {
    "Content-Type": "application/json",
    "x-api-key": "API_KEY"
};
const data: Record<string, string> = {
    iin: "<subjects_iin>",
    phone: "7*********",
    document_type: "pdf",
    metadata: {
        show_download_button: true
    }
};

fetch(url, {
    method: "POST",
    headers: headers,
    body: JSON.stringify(data)
})
    .then(response => {
        if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
        }
        return response.json();
    })
    .then(result => console.log("Session created:", result))
    .catch(error => console.error("Error:", error));

В качестве ответа придет JSON со следующими полями:

  • session_id - одноразовый идентификатор сессии для прохождения flow.
  • created_at - время создания сессии.
  • check_id - идентификатор для последующей проверки подлинности документа.

Пример ответа:

{
  "session_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "created_at": "2024-01-01T00:00",
  "check_id": "43f384e2-770f-4b6c-99c0-7f280befaf01"
}

3. Загрузка файлов для подписи#

URL для запроса:

  • Dev: https://dev.b-key.kz/api/v1/session/documents/upload/

  • Prod: https://api.b-key.kz/api/v1/session/documents/upload/

Формат запроса Метод запроса
form-data POST

API KEY передается в заголовке запроса.

--header 'x-api-key: API_KEY'

Файлы форматов .xml или .pdf могут быть загружены, в зависимости от типа, выбранного при создании сессии.

Параметры тела запроса:

Наименование поля Тип Обязательно Описание
session_id String Да ID сессии
name String Да Отображаемое название файла
file file Да Файл в формате .pdf (макс. размер для dev - 30КБ)

Приведенные ниже примеры содержат тестовые данные. В реальных запросах значения полей будут соответствовать информации конкретного субъекта.

В случае использования production-среды нужно использовать субдомен api.b-key.kz

Примеры запроса:

curl --request POST \
--url https://dev.b-key.kz/api/v1/session/documents/upload/ \
--header 'x-api-key: API_KEY' \
--form 'session_id="<session_id>"' \
--form 'name="example_file.pdf"' \
--form 'file=@path/to/example_file.pdf'
import requests
import json

url = "https://dev.b-key.kz/api/v1/session/documents/upload/"
headers = {
    "x-api-key": "API_KEY"
}
files = {
    "session_id": ("<session_id>"),
    "name": ("example_file.pdf"),
    "file": open("path/to/example_file.pdf", "rb")
}

response = requests.post(url, headers=headers, files=files)

if response.status_code == 200:
    print("File uploaded successfully:", response.json())
else:
    print("Error:", response.status_code, response.text)
const url = "https://dev.b-key.kz/api/v1/session/documents/upload/";
const headers = {
    "x-api-key": "API_KEY"
};

const formData = new FormData();
formData.append("session_id", "<session_id>");
formData.append("name", "example_file.pdf");
formData.append("file", document.querySelector('input[type="file"]').files[0]);

fetch(url, {
    method: "POST",
    headers: headers,
    body: formData
})
    .then(response => response.json())
    .then(result => console.log("File uploaded successfully:", result))
    .catch(error => console.error("Error:", error));
const url: string = "https://dev.b-key.kz/api/v1/session/documents/upload/";
const headers: Record<string, string> = {
    "x-api-key": "API_KEY"
};

const formData: FormData = new FormData();
formData.append("session_id", "<session_id>");
formData.append("name", "example_file.pdf");

// Assume a file input in the DOM or file blob
const fileInput = document.querySelector('input[type="file"]') as HTMLInputElement;
if (fileInput.files && fileInput.files[0]) {
    formData.append("file", fileInput.files[0]);
}

fetch(url, {
    method: "POST",
    headers: headers,
    body: formData
})
    .then(response => {
        if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
        }
        return response.json();
    })
    .then(result => console.log("File uploaded successfully:", result))
    .catch(error => console.error("Error:", error));

В качестве ответа придет JSON со следующими полями:

  • id - одноразовый идентификатор сессии для прохождения flow.
  • name - название файла, которое вы указали при создании сессии.
  • sign - подпись в формате CMS, можно узнать больше в FAQ, на данном этапе, поле будет пустым.
  • created_at - время создания сессии.
  • updated_at - время последнего обновления данных сессии.

Пример ответа:

{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "name": "string",
  "sign": null,
  "created_at": "2024-01-01T00:00:00.000Z",
  "updated_at": "2024-01-01T00:00:00.000Z"
}

Загрузка файлов для подписи в формате base64#

URL для запроса:

  • Dev: https://dev.b-key.kz/api/v1/session/documents/upload/base64/

  • Prod: https://api.b-key.kz/api/v1/session/documents/upload/base64/

Формат запроса Метод запроса
JSON POST

API KEY передается в заголовке запроса.

--header 'x-api-key: API_KEY'

Файлы форматов .xml или .pdf могут быть загружены, в зависимости от типа, выбранного при создании сессии.

Параметры тела запроса:

Наименование поля Тип Обязательно Описание
session_id String Да ID сессии
name String Да Отображаемое название файла
base64_file String Да Файл в формате base64

Приведенные ниже примеры содержат тестовые данные. В реальных запросах значения полей будут соответствовать информации конкретного субъекта.

В случае использования production-среды нужно использовать субдомен api.b-key.kz

Примеры запроса:

curl --request POST \
--url https://dev.b-key.kz/api/v1/session/documents/upload/base64/ \
--header 'x-api-key: API_KEY' \
--header 'accept: application/json' \
--header 'Content-Type: application/json' \
-d '{
    "session_id": "<session_id>",
    "name": "example_file.pdf",
    "base64_file": "<base64_string>"
}'
import requests

headers = {
    'x-api-key': 'API_KEY',
    'accept': 'application/json',
    'Content-Type': 'application/json',
}

json_data = {
    'session_id': '<session_id>',
    'name': 'example_file.pdf',
    'base64_file': '<base64_string>',
}

response = requests.post('https://dev.b-key.kz/api/v1/session/documents/upload/base64/', headers=headers, json=json_data)
const url = "https://dev.b-key.kz/api/v1/session/documents/upload/base64/";
const headers = {
    "x-api-key": "API_KEY",
    "accept": "application/json",
    "Content-Type": "application/json"
};

fetch('https://dev.b-key.kz/api/v1/session/documents/upload/base64/', {
    method: 'POST',
    headers: headers,
    body: JSON.stringify({
        'session_id': '<session_id>',
        'name': 'example_file.pdf',
        'base64_file': '<base64_string>'
      })
    })
        .then(response => response.json())
        .then(result => console.log("File uploaded successfully:", result))
        .catch(error => console.error("Error:", error));
const url: string = "https://dev.b-key.kz/api/v1/session/documents/upload/base64/";
const headers: Record<string, string> = {
    "x-api-key": "API_KEY",
    "accept": "application/json",
    "Content-Type": "application/json",
};
const jsonData = {
  session_id: "<session_id>",
  name: "example_file.pdf",
  base64_file: "<base64_string>",
};


fetch(url, {
    method: "POST",
    headers: headers,
    body: JSON.stringify(jsonData),
})
    .then(response => {
        if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
        }
        return response.json();
    })
    .then(result => console.log("File uploaded successfully:", result))
    .catch(error => console.error("Error:", error));

В качестве ответа придет JSON со следующими полями:

  • id - одноразовый идентификатор сессии для прохождения flow.
  • name - название файла, которое вы указали при создании сессии.
  • sign - подпись в формате CMS, можно узнать больше в FAQ, на данном этапе, поле будет пустым.
  • created_at - время создания сессии.
  • updated_at - время последнего обновления данных сессии.

Пример ответа:

{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "name": "string",
  "sign": null,
  "created_at": "2024-01-01T00:00:00.000Z",
  "updated_at": "2024-01-01T00:00:00.000Z"
}

4. Перенаправление конечного пользователя#

После получения session_id необходимо перенаправить пользователя на frontend-клиент для завершения процесса подписания документов.

Формат URL для двух сред:

  • Dev: https://dev.b-key.kz/sign?session=session_id&redirect_url=redirect_url

  • Prod: https://remote.b-key.kz/sign?session=session_id&redirect_url=redirect_url

Параметры:

  • session_id - ID сессии.
  • redirect_url - URL для перенаправления после завершения процесса (пример - redirect_url=https://google.com?test=test).
  • language - стартовый язык интерфейса (kz, en, ru).

Пример ссылок для двух сред:

  • Dev: https://dev.b-key.kz/sign?session=session_id&redirect_url=redirect_url&language=kz&theme=0

  • Prod: https://remote.b-key.kz/sign?session=session_id&redirect_url=redirect_url&language=kz&theme=0

Далее пользователь перейдет на вкладку с биометрической верификацией, созданием сертификата и подписью документов.

При успешном прохождении результирующий url будет иметь параметры status со значением равным true и reason со значением None.

status - параметр для отображения успешности подписания, reason - параметр для отображения возможной ошибки.

Примечание: при наличии webhook у организации информация о завершенном статусе сессии будет отправлена на webhook url. Секретный ключ для webhook создается после обновления информации об организации в личном кабинете. Данная логика позволяет клиенту отслеживать всю информацию, связанную с проходимой сессией.

5. Получение результата#

Для получения результата сессии необходимо выполнить GET-запрос с передачей session_id в параметрах запроса.

URL запроса:

  • Dev: https://dev.b-key.kz/api/v1/session/result/

  • Prod: https://api.b-key.kz/api/v1/session/result/

Формат запроса Метод запроса
JSON GET

API KEY передается в заголовке запроса.

--header 'x-api-key: API_KEY'

Параметры запроса:

Параметр Тип Обязательно Описание
session_id String Да Идентификатор сессии УЦ

Приведенные ниже примеры содержат тестовые данные. В реальных запросах значения полей будут соответствовать информации конкретного субъекта.

В случае использования production-среды нужно использовать субдомен api.b-key.kz

Примеры запроса:

curl --request GET \
--url "https://dev.b-key.kz/api/v1/session/result/?session_id=<session_id>" \
--header 'x-api-key: API_KEY'
import requests
import json

url = "https://dev.b-key.kz/api/v1/session/result/"
headers = {
    "x-api-key": "API_KEY"
}
params = {
    "session_id": "<session_id>"
}

response = requests.get(url, headers=headers, params=params)

if response.status_code == 200:
    print("Session result:", response.json())
else:
    print("Error:", response.status_code, response.text)
const url = "https://dev.b-key.kz/api/v1/session/result/";
const headers = {
    "x-api-key": "API_KEY"
};
const params = new URLSearchParams({
    session_id: "<session_id>"
});

fetch(`${url}?${params.toString()}`, {
    method: "GET",
    headers: headers
})
    .then(response => response.json())
    .then(result => console.log("Session result:", result))
    .catch(error => console.error("Error:", error));
const url: string = "https://dev.b-key.kz/api/v1/session/result/";
const headers: Record<string, string> = {
    "x-api-key": "API_KEY"
};
const params: URLSearchParams = new URLSearchParams({
    session_id: "<session_id>"
});

fetch(`${url}?${params.toString()}`, {
    method: "GET",
    headers: headers
})
    .then(response => {
        if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
        }
        return response.json();
    })
    .then(result => console.log("Session result:", result))
    .catch(error => console.error("Error:", error));

Пример:

https://dev.b-key.kz/api/v1/session/result/?session_id=session_id

Пример ответа:

{
  "session_id": "Id сессии",
  "docs": [
    {
      "id": "Id документа",
      "name": "Отображаемое название файла",
      "sign": "Подпись документа в формате CMS"
    },
    "..."
  ]
}

6. Скачивание архива с копиями документов#

Сервис УЦ предоставляет возможность для скачивания загруженных для подписи копий документов в архиве. Архив будет содержать копию каждого загруженного документа с QR-кодом и информацией о клиенте на самой последней странице.

QR-код перенаправляет клиента на страницу проверки подлинности документа через параметр check_id.

Один check_id соответствует одной сессии.

Проверка подлинности документов происходит посредством сравнения хэш-сумм загруженного на сервер документа и документа, который отправил пользователь.

Каждый скачанный файл внутри архива имеет внутри себя метаданные с тэгом DocumentId, который соответствует Id загруженного и подписанного документа на сервере.

Для скачивания архива со копиями документов существует два способа:

  • Скачивание результата через frontend-клиент

Скачивание происходит через нажатие на ссылку скачать подписанные документы в zip файле .

download_result.png

  • Скачивание через отправку запроса на сервис

Для скачивания архива с копиями документов через запрос необходимо выполнить GET-запрос с передачей session_id в параметрах запроса. Также существует возможность скачивания списка документов с QR-кодами в конце через добавление флага in_base64=true в параметрах запроса.

URL запроса:

  • Dev: https://dev.b-key.kz/api/v1/session/result/download

  • Prod: https://api.b-key.kz/api/v1/session/result/download

Формат запроса Метод запроса
JSON GET

API KEY передается в заголовке запроса.

--header 'x-api-key: API_KEY'

Параметры запроса:

Параметр Тип Обязательно Описание
session_id String Да Идентификатор сессии УЦ
in_base64 Boolean Нет Отправка данных в формате base64

Приведенные ниже примеры содержат тестовые данные. В реальных запросах значения полей будут соответствовать информации конкретного субъекта.

В случае использования production-среды нужно использовать субдомен api.b-key.kz

Примеры запроса:

curl --request GET \
--url "https://dev.b-key.kz/api/v1/session/result/download/?session_id=<session_id>" \
--header 'x-api-key: API_KEY'
import requests
import json

url = "https://dev.b-key.kz/api/v1/session/result/download/"
headers = {
    "x-api-key": "API_KEY"
}
params = {
    "session_id": "<session_id>"
}

response = requests.get(url, headers=headers, params=params)

if response.status_code == 200:
    with open("documents.zip", "wb") as file:
        file.write(response.content)
    print("Archive downloaded successfully.")
else:
    print("Error:", response.status_code, response.text)
const url = "https://dev.b-key.kz/api/v1/session/result/download/";
const headers = {
    "x-api-key": "API_KEY"
};
const params = new URLSearchParams({
    session_id: "<session_id>"
});

fetch(`${url}?${params.toString()}`, {
    method: "GET",
    headers: headers
})
    .then(response => response.blob())
    .then(blob => {
        const link = document.createElement("a");
        link.href = URL.createObjectURL(blob);
        link.download = "documents.zip";
        link.click();
    })
    .catch(error => console.error("Error:", error));
const url: string = "https://dev.b-key.kz/api/v1/session/result/download/";
const headers: Record<string, string> = {
    "x-api-key": "API_KEY"
};
const params: URLSearchParams = new URLSearchParams({
    session_id: "<session_id>"
});

fetch(`${url}?${params.toString()}`, {
    method: "GET",
    headers: headers
})
    .then(response => response.blob())
    .then(blob => {
        const link = document.createElement("a");
        link.href = URL.createObjectURL(blob);
        link.download = "documents.zip";
        link.click();
    })
    .catch(error => console.error("Error:", error));

Пример:

https://dev.b-key.kz/api/v1/session/result/?session_id=session_id

В ответе на запрос придет файл в binary-формате.

Примеры запроса для формата base64:

curl --request GET \
--url "https://dev.b-key.kz/api/v1/session/result/download/?session_id=<session_id>&in_base64=true" \
--header 'x-api-key: API_KEY'
import requests
import json

url = "https://dev.b-key.kz/api/v1/session/result/download/"
headers = {
    "x-api-key": "API_KEY"
}
params = {
    "session_id": "<session_id>",
    "in_base64": True,
}

response = requests.get(url, headers=headers, params=params)

if response.status_code == 200:
    print("Session result:", response.json())
else:
    print("Error:", response.status_code, response.text)
const url = "https://dev.b-key.kz/api/v1/session/result/download/";
const headers = {
    "x-api-key": "API_KEY"
};
const params = new URLSearchParams({
    session_id: "<session_id>",
    in_base64: true,
});

ffetch(`${url}?${params.toString()}`, {
    method: "GET",
    headers: headers
})
    .then(response => response.json())
    .then(result => console.log("Session result:", result))
    .catch(error => console.error("Error:", error));
const url: string = "https://dev.b-key.kz/api/v1/session/result/download/";
const headers: Record<string, string> = {
    "x-api-key": "API_KEY"
};
const params: URLSearchParams = new URLSearchParams({
    session_id: "<session_id>",
    in_base64: true,
});

fetch(`${url}?${params.toString()}`, {
    method: "GET",
    headers: headers
})
    .then(response => {
        if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
        }
        return response.json();
    })
    .then(result => console.log("Session result:", result))
    .catch(error => console.error("Error:", error));

Пример:

https://dev.b-key.kz/api/v1/session/result/?session_id=session_id&in_base64=true

Пример ответа:

[
    {
        "name": "document_name", 
        "sign_result_base64": "base64 example"
    },
    {
     ...
    }
]

Проверка статуса сессии#

При необходимости имеется возможность для проверки статуса подписания сессии.

У сессии имеется 4 статуса:

  • STARTED - Инициализирована
  • PROCESS - В прогрессе
  • FINISHED - Успешно завершена
  • CANCELED - Провалена/Отменена

Для получения статуса сессии необходимо выполнить GET-запрос с передачей session_id в параметрах запроса.

URL запроса:

  • Dev: https://dev.b-key.kz/api/v1/session/status/

  • Prod: https://api.b-key.kz/api/v1/session/status/

Формат запроса Метод запроса
JSON GET

API KEY передается в заголовке запроса.

--header 'x-api-key: API_KEY'

Параметры запроса:

Параметр Тип Обязательно Описание
session_id String Да Идентификатор сессии УЦ

Приведенные ниже примеры содержат тестовые данные. В реальных запросах значения полей будут соответствовать информации конкретного субъекта.

В случае использования production-среды нужно использовать субдомен api.b-key.kz

Примеры запроса:

curl --request GET \
--url "https://dev.b-key.kz/api/v1/session/status/?session_id=<session_id>" \
--header 'x-api-key: API_KEY'
import requests
import json

url = "https://dev.b-key.kz/api/v1/session/status/"
headers = {
    "x-api-key": "API_KEY"
}
params = {
    "session_id": "<session_id>"
}

response = requests.get(url, headers=headers, params=params)

if response.status_code == 200:
    print("Session status:", response.json())
else:
    print("Error:", response.status_code, response.text)
const url = "https://dev.b-key.kz/api/v1/session/status/";
const headers = {
    "x-api-key": "API_KEY"
};
const params = new URLSearchParams({
    session_id: "<session_id>"
});

fetch(`${url}?${params.toString()}`, {
    method: "GET",
    headers: headers
})
    .then(response => response.json())
    .then(result => console.log("Session status:", result))
    .catch(error => console.error("Error:", error));
const url: string = "https://dev.b-key.kz/api/v1/session/status/";
const headers: Record<string, string> = {
    "x-api-key": "API_KEY"
};
const params: URLSearchParams = new URLSearchParams({
    session_id: "<session_id>"
});

fetch(`${url}?${params.toString()}`, {
    method: "GET",
    headers: headers
})
    .then(response => {
        if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
        }
        return response.json();
    })
    .then(result => console.log("Session status:", result))
    .catch(error => console.error("Error:", error));

Пример:

https://dev.b-key.kz/api/v1/session/status/?session_id=session_id

Возможные значения поля failure_reason в ответе:

Тип Детали Описание
EXPIRED Session has expired Время жизни сессии истекло
LIVENESS Liveness or F2F failed Провал по причине непрохождения живости
FACE2FACE Liveness or F2F failed Провал по причине непрохождения сличения
EDOCUMENT Could not send request to edocument service Провал по причине непрохождения цифрового документа
OTHER Other Провал по другим причинам

Пример ответа:

{
  "status": "FINISHED",
  "failure_reason": null
}

Подписание документа несколькими клиентами#

Функционал сервиса предусматривает возможность подписания документов несколькими пользователями.

Для реализации данного процесса после каждого подписания необходимо извлечь CMS-подпись в формате Base64 из поля «sign», преобразовать ее в PDF и повторить шаги 2–5.

При скачивании архива с копиями документов в конце каждого файла будут отображаться сведения о подписантах, включая их ФИО, даты подписей, а также QR-код, ведущий на страницу проверки документа.

Примечание: Для проверки документа при переходе на соответствующую страницу требуется загрузить исходный файл, который был подписан первым пользователем.

Действия после завершения сессии#

По завершению сессии происходит перенаправление и возвращаются такие параметры, как status и reason.

В случае если сессия завершилась успешно, возвращается:

status = True
reason = None
При условии провала сессии, возвращается status = False, а также параметр reason, значение которого может быть следующим.

Значение Описание
refresh Сессия не была найдена, пожалуйста, не обновляйте страницу с течении всего процесса
f2f Ошибка при прохождении F2F
lv Ошибка при прохождении Liveness
closed Вы закрыли окно во время прохождения проверки на живость
lv-unavailable Сервис Liveness недоступен в настоящее время
password Вы превысили допустимое количество попыток по вводу пароля
otp Вы превысили допустимое количество попыток по вводу смс кода
request Ошибка при отправке запроса на сервис E-Document
reissue Ошибка при перевыпуске сертификата
certificate Ошибка при инициализации создании сертификата
password-otp Вы превысили допустимое количество попыток по вводу смс кода для создания пароля
accept-certificate Ошибка выпуска сертификата",
sign-doc Ошибка при подписании документа
video Ошибка загрузки видео

Возможные ошибки#

В случае возникновения ошибки, вам придет ответ с соответствующим кодом и описанием ошибки.

Код ответа Текст ошибки Описание
403 Verification not passed Верификация была провалена
404 Organization not found Запрашиваемая организация не была найдена
404 Organization api-key not found api-key организации не был найден
404 Session not found Сессия не была найдена
404 Liveness session not found Liveness-сессия не была найдена А
404 F2F session not found Face2face-сессия не была найдена
404 Subject not found in MCDB Субъект не был найден в Базе Мобильных Граждан
404 Certificate not found Сертификат не был найден
404 Document file(-s) not found Документ(-ы) не был найден
404 Document file(-s) not found on server Файл документа(-ов) отсутствует на сервере
409 You don't have access to these session actions Действия над сессией запрещены
409 Could not send request to edocument service Сервис edocument не отвечает
503 Digital service signature is not available Сервис УЦ недоступен

FAQ (Часто задаваемые вопросы)#

  • Есть ли у данного сервиса OpenAPI документация?
  • Есть. Она находится на тестовой среде по адресу dev.b-key.kz/swagger.
  • В каком формате хранится подпись документа? Что означает набор символов, который приходит после подписи?
  • Подпись хранится в формате CMS (Cryptograghic Message Syntax). Для понимания содержимого CMS можно воспользоваться данным сервисом.
  • Можно ли переиспользовать сессию для повторного прохождения?
  • Нельзя. В случае необходимости прохождения сессии заново, рекомендуется создать новую сессию и пройти ее.
  • Что такое check_id? Зачем нужен этот параметр?
  • Параметр check_id нужен для перехода на страницу проверки подлинности документа. Об этом написано в документации в этапе Скачивание архива с документами.
  • Какие статусы может иметь сессия?
  • Сессия имеет 4 статуса: STARTED, PROCESS, FINISHED, CANCELED. Подробнее смотрите этап Проверка статуса сессии.
  • Как можно связаться с менеджером компании Biometric?
  • Чтобы связаться с менеджером компании Biometric нужно обратиться в Telegram техподдержки Biometric.