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

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С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Онлайн-заказ - это решение для автоматизации процесса оформления заказов на сайте в торговых организациях. Продукт обеспечивает легкое взаимодействие между компанией и клиентами через веб-интерфейс, интегрированный с 1С:Предприятие. Система позволяет снизить операционные расходы, повысить лояльность клиентов и оптимизировать работу отдела продаж.

57600 руб.

26.11.2024    4864    4    3    

7

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

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

14400 руб.

20.12.2024    2549    14    2    

16

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

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

60000 руб.

07.05.2019    37572    72    45    

31

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

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

12000 руб.

02.02.2021    19849    57    52    

35

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

В расширении реализован механизм интеграции между системой поставщика и Личным кабинетом СДТ. Реализован обмен заказами и реализациями (накладными), предусмотрено отслеживание статусов документов. Расширение предназначено для 1С:УТ 11.4.

35856 руб.

27.11.2024    1102    1    0    

1
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SerVer1C 936 07.08.25 12:39 Сейчас в теме
+ за исследование
Странно, что нет описания API. Нашел, что уже народ заморачивался данной темой
надо сделать свой велосипед для вывода с ИС )
Оставьте свое сообщение