> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Серверные SDK: Python, Node.js, Go, Java, PHP, Ruby, .NET

> Официальные типизированные SDK Didit для вызова серверных API из бэкенда: установка, конфигурация, ошибки, повторные попытки и поддержка версий.

Серверные SDK являются официальными библиотеками Didit для вашего бэкенда. Каждый из них вызывает серверные endpoint [справочника API](https://docs.didit.me/ru/api-reference/overview.md) с типизированными запросами и ответами, проверяет webhook, которые Didit отправляет вам, и проверяет токены [Didit Authentication](https://docs.didit.me/ru/authentication/overview.md). Ни один релиз 1.0.1 пока не содержит два endpoint'а Google Wallet: [запуск верификации Google Wallet](https://docs.didit.me/ru/api-reference/digital-id-wallets/google-wallet.md) и [отправка ответа кошелька](https://docs.didit.me/ru/standalone-apis/digital-id-wallet-response.md). В SDK для Python, Node.js, Java, PHP, Ruby и .NET есть все остальные серверные endpoint. В Go 1.0.1 также нет ещё девяти endpoint'ов, в основном endpoint'ов Travel Rule: см. [Endpoint'ов, которых пока нет в SDK для Go](https://docs.didit.me/ru/integration/server-sdks/go.md#эндпоинты-которых-пока-нет-в-go-sdk).

Используйте их везде, где ваш код хранит API-ключ Didit: создание сессий верификации, чтение решений, вызов отдельных API, управление пользователями, компаниями, сценариями и кейсами, скрининг транзакций и кошельков, а также Travel Rule. В браузере или мобильном приложении вместо них используйте [веб-](https://docs.didit.me/ru/integration/web-sdks/overview.md) и [нативные](https://docs.didit.me/ru/integration/native-sdks/overview.md) SDK: они показывают пользователю процесс верификации и никогда не хранят ваш API-ключ.

Страницы серверных endpoint [справочника API](https://docs.didit.me/ru/api-reference/overview.md), в том числе страницы службы [Проверка по базам данных](https://docs.didit.me/ru/standalone-apis/database-validation.md), показывают пример кода для каждого серверного SDK рядом с запросом cURL. Пример выводится, когда последний релиз SDK содержит endpoint и каждое поле, которое отправляет пример. Endpoint или поле, добавленные в API, получат примеры с очередным релизом каждого SDK. Ни один релиз 1.0.1 не содержит 16 полей запроса Проверки по базам данных, добавленных после генерации SDK, например `vin` или `bank_account_number`, поэтому страницы служб, которые их отправляют, показывают только cURL.

## Установка

```bash Python theme={null}
pip install didit-sdk
```

```bash Node.js theme={null}
npm install @didit-protocol/sdk-node
```

```bash Go theme={null}
go get github.com/didit-protocol/sdk-go
```

```kotlin Java theme={null}
implementation("me.didit:didit-java:1.0.1")
```

```bash PHP theme={null}
composer require didit-protocol/sdk-php guzzlehttp/guzzle
```

```bash Ruby theme={null}
gem install didit-sdk
```

```bash .NET theme={null}
dotnet add package Didit
```

| Язык | Пакет | Исходный код | Минимальная среда выполнения |
| - | - | - | - |
| [Python](https://docs.didit.me/ru/integration/server-sdks/python.md) | [PyPI `didit-sdk`](https://pypi.org/project/didit-sdk/) | [sdk-python](https://github.com/didit-protocol/sdk-python) | Python 3.10 |
| [Node.js и TypeScript](https://docs.didit.me/ru/integration/server-sdks/node.md) | [npm `@didit-protocol/sdk-node`](https://www.npmjs.com/package/@didit-protocol/sdk-node) | [sdk-node](https://github.com/didit-protocol/sdk-node) | Node.js 18, Bun, Deno, edge-среды с `fetch` |
| [Go](https://docs.didit.me/ru/integration/server-sdks/go.md) | [Go-модуль `github.com/didit-protocol/sdk-go`](https://pkg.go.dev/github.com/didit-protocol/sdk-go) | [sdk-go](https://github.com/didit-protocol/sdk-go) | Go 1.22 |
| [Java и Kotlin](https://docs.didit.me/ru/integration/server-sdks/java.md) | [Maven Central `me.didit:didit-java`](https://central.sonatype.com/artifact/me.didit/didit-java) | [sdk-java](https://github.com/didit-protocol/sdk-java) | Java 11 |
| [PHP](https://docs.didit.me/ru/integration/server-sdks/php.md) | [Packagist `didit-protocol/sdk-php`](https://packagist.org/packages/didit-protocol/sdk-php) | [sdk-php](https://github.com/didit-protocol/sdk-php) | PHP 8.1 |
| [Ruby](https://docs.didit.me/ru/integration/server-sdks/ruby.md) | [RubyGems `didit-sdk`](https://rubygems.org/gems/didit-sdk) | [sdk-ruby](https://github.com/didit-protocol/sdk-ruby) | Ruby 3.1 |
| [C# и .NET](https://docs.didit.me/ru/integration/server-sdks/dotnet.md) | [NuGet `Didit`](https://www.nuget.org/packages/Didit) | [sdk-dotnet](https://github.com/didit-protocol/sdk-dotnet) | .NET 8 или .NET Standard 2.0 |

## Настройка

Все SDK читают одни и те же переменные окружения, поэтому клиент, созданный без параметров, готов к работе. В edge-средах нет окружения процесса: там передайте API-ключ клиенту Node.js как параметр.

| Переменная | Для чего используется |
| - | - |
| `DIDIT_API_KEY` | Каждый вызов с API-ключом. Создайте ключ в консоли в разделе [API-ключи](https://docs.didit.me/ru/console/api-keys.md). |
| `DIDIT_ORGANIZATION_ID`, `DIDIT_APPLICATION_ID` | Операции в путях `/v3/organization/{organization_id}/application/{application_id}/` (кейсы, сети, регуляторные отчёты, шаблоны отчётов и некоторые инструменты для пользователей и компаний). SDK подставляет оба идентификатора пути из клиента, поэтому вы никогда не передаёте их при каждом вызове. Без них эти вызовы завершаются ошибкой до отправки какого-либо запроса. |
| `DIDIT_LOG=debug` | Записывает в лог метод, путь, статус, длительность и идентификатор запроса для каждого запроса. Тела запросов и заголовки никогда не записываются в лог. |

Всё, что можно задать через окружение, можно также передать клиенту, а также базовый URL, таймаут, повторные попытки, заголовки по умолчанию и собственный HTTP-клиент. Создайте один клиент на процесс и используйте его совместно: он поддерживает пул соединений и безопасен для использования из нескольких потоков или задач.

Методы `account` ([программная регистрация](https://docs.didit.me/ru/integration/programmatic-registration.md): регистрация, вход, организации и приложения) обращаются к `https://apx.didit.me/auth/v2` и никогда не отправляют ваш API-ключ. Выполните вход через `account.login`, затем передайте полученный токен доступа клиенту как токен аккаунта.

## Что делает каждый SDK

* **Ресурсы и методы.** Вызовы следуют ресурсам API: `client.<resource>.<method>(...)`, например `sessions.create`, `sessions.retrieve_decision` или `transactions.create`, с написанием, принятым в каждом языке. Идентификаторы пути передаются позиционными аргументами; тело и параметры запроса составляют один набор именованных полей. Python, Node.js, PHP и Ruby используют имена полей API (`workflow_id`); Go, Java и .NET используют регистр своего языка (`WorkflowID`, `workflowId`, `WorkflowId`).
* **Списки.** Методы списков автоматически перебирают все результаты (`limit` и `offset` под капотом), а также предоставляют каждую страницу с полями `count`, `next`, `previous` и `results`. В Ruby `auto_paging_each` проходит все страницы, а `total_count`, `next_url` и `previous_url` страницы соответствуют `count`, `next` и `previous` API.
* **Файлы.** Загрузки (изображения документов, селфи, подтверждение адреса, импорты) принимают путь, байты или поток. Загрузки с сервера (PDF сессий, отчёты) возвращают байты или поток, а не разобранный JSON.
* **Совместимость вперёд.** Поле ответа или значение перечисления, которые версия SDK ещё не знает, сохраняются и доступны для чтения, но не вызывают ошибку, поэтому добавление в API не ломает работающую интеграцию.
* **Webhook.** `webhooks.verify` проверяет заголовки `X-Signature-V2` и `X-Signature` и метку времени доставки с помощью вашего секрета webhook и возвращает типизированное событие. Во время ротации секрета он принимает список секретов. Схему подписи см. в разделе [Webhook](https://docs.didit.me/ru/integration/webhooks.md).
* **Аутентификация.** Помощник `Authentication` проверяет токены доступа и ID-токены, которые подписывает ваш издатель сервиса Authentication, и вызывает его endpoint токенов, сессий и повышения уровня аутентификации. Он никогда не использует ваш API-ключ.

## Ошибки, повторные попытки и таймауты

| Ошибка | Когда возникает |
| - | - |
| `APIConnectionError`, `APITimeoutError` | Ответ не был получен |
| `APIStatusError` | Любой другой ответ с кодом не 2xx: содержит статус, тело ответа после разбора, заголовки и идентификатор запроса |
| `BadRequestError` 400, `AuthenticationError` 401, `PermissionDeniedError` 403, `NotFoundError` 404, `ConflictError` 409, `UnprocessableEntityError` 422, `RateLimitError` 429, `InternalServerError` 5xx | Подклассы `APIStatusError` |
| `WebhookVerificationError` | Проверка доставки webhook не пройдена; причина указана в его `reason` |
| `ConfigurationError` | Не указан API-ключ, токен аккаунта, идентификатор организации или идентификатор приложения |

Все ошибки наследуются от `DiditError`. В Go каждая ошибка реализует интерфейс `didit.Error` и является типом-указателем, например `*didit.NotFoundError`. В Java, PHP и .NET ошибки называются привычным для языка образом с суффиксом `Exception`, а `API` пишется как `Api`: `DiditException`, `ApiStatusException`, `NotFoundException`.

SDK повторяют неудачный запрос до 2 раз с экспоненциальной задержкой, начиная с 0,5 секунды (полный джиттер, не более 8 секунд), и учитывают заголовок `Retry-After`. Запросы `GET`, `HEAD`, `PUT` и `DELETE` повторяются при ошибках соединения, таймаутах, а также при ответах 408, 429 и 5xx. Запросы `POST` и `PATCH` повторяются только при ответе 429 или если соединение не удалось установить до отправки запроса, поэтому повторная попытка никогда не создаст вторую сессию или вторую транзакцию. Таймаут по умолчанию составляет 60 секунд. Каждый ответ также предоставляет необработанный HTTP-статус, заголовки и идентификатор запроса. Лимиты, стоящие за ответом 429, описаны в разделе [Ограничение частоты запросов](https://docs.didit.me/ru/integration/rate-limiting.md).

## Версионирование и поддержка

* SDK следуют семантическому версионированию с одним правилом для изменений API. Изменение, которое отражает API Didit, выпускается как минорная версия, даже если оно может сломать типизированный код (поле, у которого изменился тип, поле, которое теперь может быть null, или удалённый endpoint, поле или значение перечисления). API уже ведёт себя так для всех вызывающих сторон, поэтому более старая версия SDK не безопаснее. В примечаниях к выпуску такие изменения перечислены в разделе «Изменения API, которые могут сломать типизированный код».
* Мажорная версия выпускается только для изменения самого дизайна SDK: переименования или удаления метода или ресурса, которые API при этом сохраняет, изменения конфигурации клиента, поведения ошибок, повторных попыток, пагинации или проверки webhook, а также отказа от поддержки версии среды выполнения. Когда endpoint уходит из API или метод переименовывается, старый метод сохраняется как минимум ещё на одну минорную версию и помечается как устаревший, чтобы ваш код продолжал собираться, пока вы переходите на новый. Каждый язык ведёт собственную нумерацию версий: Node.js, PHP и Ruby имеют версию 2.x, а остальные имеют версию 1.x, поскольку эти три SDK выпустили изменение API как мажорную версию до того, как появилось это правило.
* SDK генерируются из опубликованного контракта API ([`openapi-25.json`](https://docs.didit.me/openapi-25.json) и [`openapi-auth.json`](https://docs.didit.me/openapi-auth.json)), а их методы [Didit Authentication](https://docs.didit.me/ru/authentication/overview.md) проверяются по [`openapi-authentication.json`](https://docs.didit.me/openapi-authentication.json). Все семь SDK проверяют все три контракта ежедневно, поэтому новый endpoint или поле попадает в очередной релиз всех семи SDK.
* Каждый SDK поддерживает минимальную версию среды выполнения из таблицы и все более новые версии. Его тесты запускаются на минимальной версии и на каждой более новой, а для Node.js и Java на каждом релизе с долгосрочной поддержкой.
* Файл `CHANGELOG.md` в каждом репозитории содержит изменения каждого релиза.
* Сообщать о проблеме безопасности нужно приватно: через security advisories в репозитории SDK или на [support@didit.me](mailto:support@didit.me).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.