Skip to content

Releases: shoman4eg/go-moy-nalog

v0.1.0 — порт PHP-клиента «Мой налог» на Go

Choose a tag to compare

@shoman4eg shoman4eg released this 27 Jul 01:38
v0.1.0
f20b41d

Первый тегированный релиз Go-клиента для lknpd.nalog.ru («Мой налог») — полный порт PHP-библиотеки shoman4eg/moy-nalog.

Структура клиента повторяет google/go-github: один общий service-тип, NewRequest / Do / BareDo, обёртка Response, сигнатура методов (*T, *Response, error).

Установка

go get github.com/shoman4eg/go-moy-nalog@v0.1.0

Требуется Go 1.25 или новее.

Возможности

Реализованы все семь групп API PHP-версии:

Сервис Методы
Auth CreateAccessToken, CreatePhoneChallenge, CreateAccessTokenByPhone, Refresh
Income Create, CreateItem, List, Cancel
Invoice Create, CreateItem
Receipt JSON, PrintURL, Print
Users Get
PaymentType Table, Favorite
Tax Get, History, Payments
Taxpayer Debts, Bonus

Аутентификация

Поддержаны оба способа: по ИНН и паролю и по номеру телефона через SMS (эндпоинты challenge живут на API v2, клиент переключает версию сам). Протухший access-токен обновляется автоматически: при ответе 401 клиент вызывает Auth.Refresh и повторяет запрос, не более двух раз. Актуальный токен доступен через Token().

Ошибки

Неуспешные ответы оборачиваются в *ErrorResponse и разворачиваются в sentinel-значения, поэтому работают оба способа:

errors.Is(err, moynalog.ErrUnauthorized)   // 400/401/403/404/406/422/500 и прочее

var errResp *moynalog.ErrorResponse
errors.As(err, &errResp)                   // StatusCode, Code, Message, AdditionalInfo, Body

Device ID

deviceId вычисляется один раз при создании клиента и дальше не меняется — API привязывает чеки и refresh-токен к устройству. Стратегия настраивается: NewPlatformDeviceIDGenerator (по умолчанию, стабилен для машины), NewStaticDeviceIDGenerator (свой ID на каждого самозанятого), NewRandomDeviceIDGenerator, либо своя реализация через DeviceIDFunc / IDStrategyFunc.

Деньги и время

Все денежные поля — decimal.Decimal из shopspring/decimal, без потерь на float. Тип Time разбирает все форматы, которые смешивает API: полные RFC 3339, метки без зоны, голые даты (2022-11-12) и null.

Замечания

  • Клиент проверялся только на httptest с фикстурами из PHP-проекта и слепками реальных ответов; на живом API не гонялся. Поэтому версия v0.x — API библиотеки ещё может измениться.
  • Invoice.Cancel и Invoice.UpdatePaymentInfo возвращают ErrNotImplemented: соответствующих эндпоинтов в API нет. Это повторяет поведение PHP-версии.
  • Валидация строже PHP в одном месте: ИНН проверяется через strconv.ParseUint, тогда как is_numeric в PHP пропускает значения вроде 1234.56789.
  • Limit: 0 в IncomeListOptions означает «не задано» и даёт 100; PHP при явном limit: 0 зажимает до 1.

Разработка

make check   # формат, линтеры, тесты и go.mod — ничего не изменяя

Покрытие пакета — 87.6%.