Интеграция с личным кабинетом самозанятого (Мой налог)

04.08.25

Интеграция - WEB-интеграция

Привет! Меня зовут Дарья, я 1С-разработчик. В свободное время преподаю математику — раньше это было моей основной работой, и мне захотелось автоматизировать создание чеков в ФНС и их отправку ученикам в Telegram. Если у Telegram API хорошо документировано, то для ЛК самозанятого я ничего подобного не нашла — пришлось разбираться самостоятельно. Надеюсь, эта статья поможет начинающим разработчикам.

Нет документации по API? Не беда!

Захожу на сайт ЛК самозанятого, открываю консоль разработчика (вкладка Network → Fetch/XHR), авторизуюсь и наблюдаю что-то страшное... Здесь отображаются все запросы, которые браузер отправляет на сервер.


 

Регистрирую покупку вручную, к списку добавляется запрос income, а на экране появился чек.


 


Нажимаем на incomeи разбираем подробнее:

Это POST-запрос, принимающий JSON с данными клиента (вкладка Payload) и возвращающий УИД чека (вкладка Response/Preview)





Сам чек появляется через GET-запрос print, он также появился в списке, а во вкладке Preview доступно его изображение.

URL запроса print: https://lknpd.nalog.ru/api/v1/receipt/ваш_ИНН/УИД_чека/print



Авторизация

ЛК самозанятого использует OAuth2 с Bearer-токеном. При каждом запросе нужно передавать access_token в заголовке, его можно увидеть в любом запросе из списка. 
Этот токен живёт 1 час, поэтому его нужно регулярно обновлять.





 

Как получить access_token?

Через запрос на /api/v1/auth/token с таким JSON:

{
  "deviceInfo": {
    "sourceDeviceId": "*******",
    "sourceType": "WEB",
    "appVersion": "1.0.0",
    "metaDetails": {
      "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36"
    }
  },
  "refreshToken": "ваш_refresh_token"
}

Как видим, что в запросе для получения access_token закрался еще один refresh_token.
 

Да кто этот ваш refresh_token?

Это токен обновления, который живёт около года. Получить его можно:

  1. Через POST запрос на /api/v1/auth/lkfl, где тело:

    {
      "deviceInfo": {
        "sourceDeviceId": "*******",
        "sourceType": "WEB",
        "appVersion": "1.0.0",
        "metaDetails": {
          "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36"}
      },
      "username": "*******",
      "password": "*******"
    }

    В ответе будет refresh_token.

  2. "Ленивым" способом: взять из запроса verify из списка при авторизации и записать в регистр сведений ТокеныАвторизации или в константу, но его всё равно нужно обновлять раз в год вручную.
     

Логика работы с токенами

Перед каждым запросом проверяю:

  1. Не истёк ли refresh_token

  2. Не истёк ли access_token
    При необходимости обновляю их.

Пример кода на 1С для обновления access_token:

Функция AccessToken(Соединение, RefreshToken) Экспорт
 
    МенеджерЗаписи           = РегистрыСведений.ТокеныАвторизации.СоздатьМенеджерЗаписи();
    МенеджерЗаписи.Ресурс    = Соединение.Сервер;
    МенеджерЗаписи.ТипТокена = Перечисления.ТипыТокенов.AccessToken;
    МенеджерЗаписи.Прочитать();
    
    Если Не ИстекСрокДействия(МенеджерЗаписи.СрокДействия) И МенеджерЗаписи.Токен <> Неопределено Тогда
        
        Возврат МенеджерЗаписи.Токен;

    Иначе

        JSONАвторизации = ПолучитьJSONАвторизации(RefreshToken); //строка json вида из пункта access_token
        
        ЗапросPOST = Новый HTTPЗапрос();
        ЗапросPOST.АдресРесурса = "/api/v1/auth/token";
        ЗапросPOST.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
        ЗапросPOST.УстановитьТелоИзСтроки(JSONАвторизации, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
        
        Ответ = Соединение.ОтправитьДляОбработки(ЗапросPOST);
        
        Если Ответ.КодСостояния = 200 Тогда

            ОтветСтрокой = Ответ.ПолучитьТелоКакСтроку();
            Чтение = Новый ЧтениеJSON;
            Чтение.УстановитьСтроку(ОтветСтрокой);
            Объект = ПрочитатьJSON(Чтение, Истина);
            Token = Объект["token"];
            
            МенеджерЗаписи.СрокДействия = ТекущаяДатаСеанса() + 3600;
            МенеджерЗаписи.Токен        = Token;
            МенеджерЗаписи.Записать();
            
            Возврат Token;

        Иначе
            Возврат Неопределено;
        КонецЕсли;

    КонецЕсли;

КонецФункции


Пример формирования продажи:

JSONПродажи = ПолучитьJSONПродажи(Источник.Услуга, Источник.Оплачено); //строка json вида из пункта запроса income

ЗапросPOST  = Новый HTTPЗапрос();
ЗапросPOST.АдресРесурса = "/api/v1/income";
ЗапросPOST.Заголовки.Вставить("Authorization", "Bearer " + AccessToken);
ЗапросPOST.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
ЗапросPOST.УстановитьТелоИзСтроки(JSONПродажи, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);

Ответ = HTTP.ОтправитьДляОбработки(ЗапросPOST);

Если Ответ.КодСостояния = 200 Тогда

    ОтветСтрокой = Ответ.ПолучитьТелоКакСтроку();

    Чтение = Новый ЧтениеJSON;
    Чтение.УстановитьСтроку(ОтветСтрокой);
    Объект = ПрочитатьJSON(Чтение, Истина);
    IDЧека = Объект["approvedReceiptUuid"];
    
    // Отправка чека ученику в Telegram
    ОбменТелеграм.ЗаписатьСсылкуВОчередьОтправки(
        "Чек оплаты занятия", 
        "https://lknpd.nalog.ru/api/v1/receipt/" + INN + "/" + IDЧека + "/print",
        ОбщегоНазначенияСервер.РеквизитОбъекта(Источник.Ученик, "ТелеграмID"));

Иначе
     ЗаписьЖурналаРегистрации("ФормированиеЧекаОплаты",
        УровеньЖурналаРегистрации.Ошибка, 
        Источник.Занятие,
        ,
        СтрШаблон("Ошибка формирования чека оплаты. Код состояния: %1, Тело: %2",
            Ответ.КодСостояния,
            ОтветСтрокой));
КонецЕсли;

 

Вступайте в нашу телеграмм-группу Инфостарт

API ФНС ЛК самозанятого Мой налог OAuth2 Bearer Token автоматизация чеков refresh_token access_token интеграция с ФНС DevTools HTTP-запросы

См. также

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь 1С v8.3 1C:Бухгалтерия 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM / LOGICSTARS. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM / LOGICSTAR разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    22094    32    24    

26

SALE! 15%

WEB-интеграция Программист Бизнес-аналитик 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Оптовая торговля, дистрибуция, логистика ИТ-компания Платные (руб)

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

17280 14688 руб.

20.12.2024    4293    22    4    

23

WEB-интеграция Программист Руководитель проекта 1С v8.3 1C:Бухгалтерия 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки. Основные преимущества: 1. Документация API создаётся автоматически. Удобна для программной обработки. 2. Изменить API столь же просто как настроить отчёт. Можно опубликовать существующий вариант отчёта. 3. Отчёты в API поддерживают параметры (Период, ДатаНачала и др.) 4. При создании простых методов не требуется изменять конфигурацию. 5. Поддерживается работа с планами обмена.<br/> 6. Возможно настроить отправку из 1С данных корреспондирующей системе, для случаев когда 1С сама "знает" какие данные нужно отправить. 7. После записи в 1С Ле Мурр может возвращать соответствие полученных идентификаторов созданным в 1С объектам данных.

36000 руб.

27.09.2024    9778    7    5    

11

Оптовая торговля WEB-интеграция Бюджетный учет Обмен с ГосИС Бухгалтер Пользователь 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Государственные, бюджетные структуры Россия Бухгалтерский учет Управленческий учет Платные (руб)

Обмен данными с "Порталом поставщиков" zakupki.mos.ru Москвы и Московской области с целью создания оферт для закупок государственными учреждениями. Модуль устраняет рутину, минимизирует ошибки и помогает выигрывать больше закупок. Работает строго по требованиям 44-ФЗ.

14400 руб.

13.12.2016    41638    54    39    

37

WEB-интеграция Программист 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разработана для автоматизации передачи данных между сервисом Vetmanager с 1С: Бухгалтерия 3.0. Решение позволяет загружать документы и справочники из Ветменеджер в 1С:Бухгалтерию, сокращая время на ручной ввод данных и минимизируя ошибки.

12000 руб.

02.02.2021    20882    60    52    

38
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SerVer1C 993 07.08.25 12:39 Сейчас в теме
+ за исследование
Странно, что нет описания API. Нашел, что уже народ заморачивался данной темой
надо сделать свой велосипед для вывода с ИС )
2. ErmakovAlexey 29.08.25 13:27 Сейчас в теме
А есть ли готовое решение интеграции?
Для отправки сообщения требуется регистрация/авторизация