AtolOnlineNet 1.0.0
dotnet add package AtolOnlineNet --version 1.0.0
NuGet\Install-Package AtolOnlineNet -Version 1.0.0
<PackageReference Include="AtolOnlineNet" Version="1.0.0" />
<PackageVersion Include="AtolOnlineNet" Version="1.0.0" />
<PackageReference Include="AtolOnlineNet" />
paket add AtolOnlineNet --version 1.0.0
#r "nuget: AtolOnlineNet, 1.0.0"
#:package AtolOnlineNet@1.0.0
#addin nuget:?package=AtolOnlineNet&version=1.0.0
#tool nuget:?package=AtolOnlineNet&version=1.0.0
AtolOnlineNet
.NET SDK для облачной фискализации АТОЛ Онлайн (сервис possystem v4, ФФД 1.05): авторизация, регистрация чеков прихода/расхода/возврата, чеков коррекции и получение результата фискализации.
SDK работает с облачным API регистрации чеков (
/possystem/v4/...). Версияv5(ФФД 1.2) пока не реализована — см. Roadmap.
Установка
dotnet add package AtolOnlineNet
Целевые платформы: netstandard2.0, net8.0, net10.0 (работает на .NET Framework 4.6.1+, .NET Core 2.0+, .NET 8/10).
Быстрый старт
using AtolOnlineNet;
using AtolOnlineNet.V1_05;
var options = new AtolOnlineClientOptions
{
Login = "your-login",
Password = "your-password",
GroupCode = "your-group-code",
BaseAddress = AtolOnlineClientOptions.TestBaseAddress, // или ProductionBaseAddress
};
using var client = new AtolOnlineClient(options); // или new AtolOnlineClient(httpClient, options)
// Токен запрашивается автоматически и кешируется на 24 часа.
var registered = await client.SellAsync(new ReceiptRegistrationRequest
{
ExternalId = Guid.NewGuid().ToString("N"),
Timestamp = DateTime.Now,
Receipt = new Receipt
{
Client = new Client { Email = "buyer@example.com" },
Company = new Company
{
Email = "shop@example.com",
Sno = TaxationSystem.Osn,
Inn = "5544332219",
PaymentAddress = "https://shop.example.com",
},
Items =
[
new Item
{
Name = "Носки хлопковые",
Price = 199.00m,
Quantity = 2m,
Sum = 398.00m,
PaymentMethod = PaymentMethod.FullPayment,
PaymentObject = PaymentObject.Commodity,
Vat = new Vat { Type = VatType.Vat20 },
},
],
Payments = [new Payment { Type = PaymentType.Cashless, Sum = 398.00m }],
Total = 398.00m,
},
});
Console.WriteLine($"UUID: {registered.Uuid}, статус: {registered.Status}");
// Получение результата по UUID (опрос до терминального статуса).
var report = await client.GetReportAsync(registered.Uuid!);
if (report.Status == DocumentStatus.Done)
{
Console.WriteLine($"ФД №{report.Payload!.FiscalDocumentNumber}, ФПД {report.Payload.FiscalDocumentAttribute}");
Console.WriteLine($"Чек ОФД: {report.Payload.OfdReceiptUrl}");
}
Среды
| Среда | Базовый адрес |
|---|---|
| Тестовая (ФФД 1.05) | AtolOnlineClientOptions.TestBaseAddress → https://testonline.atol.ru/possystem/ |
| Боевая | AtolOnlineClientOptions.ProductionBaseAddress → https://online.atol.ru/possystem/ |
Поддерживаемые методы
| Метод | Операция | Описание |
|---|---|---|
GetTokenAsync |
getToken |
Авторизация, получение токена (кешируется на 24 ч). |
SellAsync |
sell |
Чек «Приход». |
SellRefundAsync |
sell_refund |
Чек «Возврат прихода». |
BuyAsync |
buy |
Чек «Расход». |
BuyRefundAsync |
buy_refund |
Чек «Возврат расхода». |
SellCorrectionAsync |
sell_correction |
Чек «Коррекция прихода». |
BuyCorrectionAsync |
buy_correction |
Чек «Коррекция расхода». |
GetReportAsync |
report/{uuid} |
Результат обработки документа. |
Сам AtolOnlineClient версионно-нейтрален: транспорт (токен / регистрация / результат) одинаков для
всех версий ФФД. Типобезопасные методы SellAsync/BuyAsync/… — это методы-расширения из пространства
имён AtolOnlineNet.V1_05 (ФФД 1.05), работающие с моделями чека этой версии. Для динамического
выбора операции есть нейтральные RegisterAsync(ReceiptOperation, object) и
RegisterCorrectionAsync(CorrectionOperation, object). Модели чека ФФД 1.2 будут добавлены в
AtolOnlineNet.V1_2; версия выбирается через AtolOnlineClientOptions.ApiVersion.
К каждому запросу автоматически добавляется заголовок User-Agent вида AtolOnlineNet/<версия>,
если на HttpClient не задан собственный.
Чек коррекции
var correction = await client.SellCorrectionAsync(new CorrectionRegistrationRequest
{
ExternalId = Guid.NewGuid().ToString("N"),
Timestamp = DateTime.Now,
Correction = new Correction
{
Company = new Company { Email = "shop@example.com", Sno = TaxationSystem.Osn, Inn = "5544332219", PaymentAddress = "https://shop.example.com" },
CorrectionInfo = new CorrectionInfo
{
Type = CorrectionType.Self,
BaseDate = new DateTime(2026, 6, 1),
},
Payments = [new Payment { Type = PaymentType.Cashless, Sum = 100m }],
Vats = [new Vat { Type = VatType.Vat20, Sum = 16.67m }],
},
});
Обработка ошибок
Бизнес-результат возвращается в объектах ответа — статус (Wait / Done / Fail) и Error
не выбрасываются как исключения, их нужно проверять:
var report = await client.GetReportAsync(uuid);
switch (report.Status)
{
case DocumentStatus.Done: /* реквизиты в report.Payload */ break;
case DocumentStatus.Wait: /* ещё обрабатывается — повторить позже */ break;
case DocumentStatus.Fail: Console.WriteLine($"Ошибка {report.Error?.Code}: {report.Error?.Text}"); break;
}
Исключения выбрасываются только в исключительных ситуациях:
| Исключение | Когда |
|---|---|
AtolOnlineApiException |
Ошибка авторизации (getToken вернул error). Содержит Error (код, текст, тип). |
AtolOnlineTransportException |
Сетевая ошибка / таймаут — ответ не получен. |
AtolOnlineProtocolException |
Получен непарсируемый ответ (не JSON, пустое тело). Содержит статус и превью тела. |
AtolOnlineUnknownEnumValueException |
ATOL вернул значение enum, неизвестное этой версии SDK (как правило, добавленное уже после релиза пакета). Это пробел в SDK — сообщите о нём: https://github.com/ai-iskuzhin/AtolOnlineNet/issues/new. |
Символьные имена кодов ошибок сервиса — в AtolServiceErrorCodes (например ExpiredToken = 11).
Истёкший токен обрабатывается автоматически (повторная авторизация и один повтор запроса).
Внедрение зависимостей
Ядро не зависит от Microsoft.Extensions.*. Регистрация через IHttpClientFactory:
services.AddHttpClient("atol-online");
services.AddSingleton<IAtolOnlineClient>(sp =>
{
var http = sp.GetRequiredService<IHttpClientFactory>().CreateClient("atol-online");
return new AtolOnlineClient(http, new AtolOnlineClientOptions
{
Login = "...",
Password = "...",
GroupCode = "...",
BaseAddress = AtolOnlineClientOptions.ProductionBaseAddress,
});
});
Разработка
dotnet build AtolOnlineNet.slnx -c Release
dotnet test tests/AtolOnlineNet.Tests/AtolOnlineNet.Tests.csproj -c Release # модульные тесты
dotnet pack src/AtolOnlineNet/AtolOnlineNet.csproj -c Release -o artifacts/packages
Интеграционные тесты (tests/AtolOnlineNet.Tests.Integration) выполняются против тестовой среды АТОЛ
только при заданных учётных данных — скопируйте .env.example в .env. Без учётных данных они
пропускаются.
Документация
- Протокол фискализации v4 (ФФД 1.05)
- Сервис информации о ККТ и ФН (отдельный API)
- Соглашения проекта · История изменений
Roadmap
- Поддержка
possystemv5 (ФФД 1.2). Транспорт (токен/регистрация/результат) общий; добавляются только модели чека ФФД 1.2, версия выбирается черезAtolOnlineClientOptions.ApiVersion.
Лицензия
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- System.Net.Http.Json (>= 9.0.0)
- System.Text.Json (>= 9.0.0)
-
net10.0
- No dependencies.
-
net8.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0 | 102 | 6/18/2026 |
| 0.1.0-preview.2 | 101 | 6/17/2026 |
| 0.1.0-preview.1 | 52 | 6/17/2026 |