Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/skbkontur/extern-csharp-sdk
SDK для работы с API Контур.Экстерна
https://github.com/skbkontur/extern-csharp-sdk
api csharp extern extern-api kontur sdk
Last synced: 28 days ago
JSON representation
SDK для работы с API Контур.Экстерна
- Host: GitHub
- URL: https://github.com/skbkontur/extern-csharp-sdk
- Owner: skbkontur
- License: mit
- Created: 2020-09-02T09:25:02.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-10-21T14:15:50.000Z (3 months ago)
- Last Synced: 2024-10-21T15:08:00.221Z (3 months ago)
- Topics: api, csharp, extern, extern-api, kontur, sdk
- Language: C#
- Homepage: https://developer.kontur.ru/doc/extern
- Size: 2.58 MB
- Stars: 47
- Watchers: 11
- Forks: 5
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# SDK для интеграции с АПИ Контур Экстерн
## Быстрый старт
### Шаг 1. Создание и настройка объекта IExtern
Для выполнения запросов необходимы реквизиты доступа, получить их можно обратившись по контактам, указанным в [соответствующем разделе документации](https://developer.kontur.ru/Docs/extern-api/auth_oidc/api-key.html)
#### Тестовая площадка
```csharp
string apiKey = "..."; // Апи-ключ, назначенный вашему приложению, для использования на ТЕСТОВОЙ площадке
string someUserLogin = "..."; // Логин пользователя (на ТЕСТОВОЙ площадке), от имени которого выполняется аутентификация
string someUserPassword = "..."; // Пароль пользователя (на ТЕСТОВОЙ площадке), от имени которого выполняется аутентификация
string clientId = "..."; // Уникальное сервисное имя вашего приложения (на ТЕСТОВОЙ площадке)IExtern externApi = new ExternBuilder()
.WithExternApiUrl(
new Uri("https://extern-api.testkontur.ru/"), // урл ТЕСТОВОЙ площадки апи Экстерна
log)
.WithOpenIdAuthenticator(
builder => builder
.WithHttpConfiguration(new ExternalUrlHttpClientConfiguration("https://identity.testkontur.ru")) // урл ТЕСТОВОЙ площадки сервиса аутентификации
.WithClientIdentification(clientId, apiKey)
.WithAuthenticationByPassword(someUserLogin, someUserPassword)
.Build())
.Create();
```
#### Продуктовая площадка```csharp
// Значения параметров для продуктовой площадки не будут совпадать с аналогичными значениями для тестовой площадки
string apiKey = "..."; // Апи-ключ, назначенный вашему приложению, для использования на ПРОДУКТОВОЙ площадке
string someUserLogin = "..."; // Логин пользователя (на ПРОДУКТОВОЙ площадке), от имени которого выполняется аутентификация
string someUserPassword = "..."; // Пароль пользователя (на ПРОДУКТОВОЙ площадке), от имени которого выполняется аутентификация
string clientId = "..."; // Уникальное сервисное имя вашего приложения (на ПРОДУКТОВОЙ площадке)IExtern externApi = new ExternBuilder()
.WithExternApiUrl(
new Uri("https://extern-api.kontur.ru/"), // урл ПРОДУКТОВОЙ площадки апи Экстерна
log)
.WithPasswordAuthentication( // Дополнительно указывать урл ПРОДУКТОВОЙ площадки сервиса аутентификации не нужно, его значение используется по умолчанию.
// Для более гибкой настройки процесса аутентификации вместо вызова .WithPasswordAuthentication(...) можно воспользоваться
// .WithOpenIdAuthenticator(...), аналогично примеру для тестовой площадки. В этом случае в .WithHttpConfiguration(...) нужно
// будет передать урл ПРОДУКТОВОЙ площадки сервиса аутентификации - "https://identity.kontur.ru"
new Credentials(someUserLogin, someUserPassword),
clientId,
apiKey)
.Create();
```
### Шаг 2. Выполнение запросовПосле создания и настройки объекта IExtern можно использовать его для выполнения запросов к АПИ. Например, загрузить все учетные записи, доступные аутентифицированному пользователю:
```csharp
IReadOnlyList accounts = await externApi.Accounts.List().SliceBy(100).LoadAllAsync();
```## Аутентификация для выполнения запросов
:warning: Дополнительно аутентифицироваться до выполнения запросов не нужно :warning:При запросе сдк автоматически выполнит попытку аутентифицироваться.
Также сдк автоматически выполнит реаутентификакцию при истечении времени жизни токена.
## Другие методы аутентификации
Доступна аутентификация по сертификату, для этого вместо .WithPasswordAuthentication(...) нужно вызвать .WithCertificateAuthentication(...).
Более подробно про процесс аутентификации можно прочитать [ в документации к АПИ](https://developer.kontur.ru/Docs/extern-api/index.html)
## Примеры выполнения запросов
### Загрузка контента документа в Сервис Контентов
```csharp
Stream contentStream = new MemoryStream(new byte[] {1, 2, 3});
Guid contentId = await externApi.Accounts.WithId(accountId).Contents.UploadAsync(contentStream);
```### Создание черновика и документа с подписью в черновике
```csharp
Draft draft = await externApi
.Accounts.WithId(accountId)
.Drafts.CreateDraftAsync(draftMetadata);byte[] signature = new byte[] {1, 2, 3};
IDraftDocument document = DraftDocumentBuilder
.WithNewId()
.WithUploadedContent(contentId, "application/xml", signature)
.ToDocument();await externApi
.Accounts.WithId(accountId)
.Drafts.WithId(draft.Id)
.SetDocumentAsync(document);
```### Проверка черновика
```csharp
ILongOperationAwaiter checkAwaiter = await externApi
.Accounts.WithId(accountId)
.Drafts.WithId(draft.Id)
.Check()
.StartAsync();
DraftCheckingStatus draftCheckingStatus = await checkAwaiter.WaitForCompletion();
```### Отправка черновика
```csharp
ILongOperationAwaiter sendAwaiter = await externApi
.Accounts.WithId(accountId)
.Drafts.WithId(draft.Id)
.TrySend()
.StartAsync();
LongOperationResult draftSendResult = await sendAwaiter.WaitForSuccessOrFailure();
IDocflowWithDocuments docflow = draftSendResult.GetSuccessResult();
```### Получение ДО по идентификатору
```csharp
IDocflowWithDocuments docflow = await externApi
.Accounts.WithId(accountId)
.Docflows.WithId(docflowId)
.GetAsync();
```