Как в 1С получить JSON и изображение чека из сервиса Мой налог (lknpd.nalog.ru)

Программист 1С v8.3 (Управляемые формы) Налоговый учет IT и автоматизация бизнеса
← На главную

При интеграции 1С с сервисами Федеральной налоговой службы часто возникает задача получения данных о чеках самозанятых. Сервис lknpd.nalog.ru предоставляет API для этих целей, однако при программном доступе разработчики часто сталкиваются с рядом ошибок: от неправильного формата URL до проблем с авторизацией и обработкой перенаправлений. В этой статье мы подробно разберем, как правильно настроить обмен данными, обработать специфические ответы сервера и получить нужную информацию в формате JSON или в виде печатной формы чека. Для комплексной работы со стороны учета продаж можно использовать расширение для формирования чеков самозанятого через API.

Различие между GET и POST запросами при работе с чеками

Первое, на что стоит обратить внимание — это тип используемого HTTP-метода. Часто разработчики по ошибке пытаются отправить POST запрос там, где требуется GET. Рассмотрим ситуацию: если вы вводите адрес чека в строку браузера и видите результат, браузер выполняет именно GET запрос. В 1С для этого используется метод Получить объекта HTTPСоединение. Попытка отправить POST запрос на эндпоинт, предназначенный для получения данных, приведет к ошибке сервера или некорректному ответу.

Обработка перенаправлений (HTTP статус 302 Found)

Одной из самых частых проблем при работе с ресурсами ФНС является получение ответа с кодом состояния 302 Found. Проанализируем, что это значит для системы: сервер сообщает, что запрашиваемый ресурс временно находится по другому адресу. Платформа 1С при использовании HTTPСоединение не всегда автоматически следует по пути перенаправления, особенно если меняется протокол или требуются дополнительные заголовки.

Для решения этой проблемы нам необходимо программно извлечь новый адрес из заголовка Location, который приходит в ответе сервера. Разберем пример кода, реализующий эту логику:


// Инициализируем защищенное соединение
Защита = Новый ЗащищенноеСоединениеOpenSSL();
Соединение = Новый HTTPСоединение("lknpd.nalog.ru", 443, , , , , Защита);

// Формируем запрос к API
ПутьКРесурсу = "/api/v1/receipt/" + ИНН_Продавца + "/" + ИД_Чека + "/JSON";
Запрос = Новый HTTPЗапрос(ПутьКРесурсу);

// Выполняем запрос
Ответ = Соединение.Получить(Запрос);

// Проверяем на наличие редиректа
Если Ответ.КодСостояния = 302 Тогда
    НовыйАдрес = Ответ.Заголовки.Получить("Location");
    // Здесь необходимо выполнить новый запрос по полученному адресу
    // ВАЖНО: Новый адрес может быть абсолютным (с указанием домена)
КонецЕсли;

Аутентификация и использование Bearer токенов

Даже если адрес указан верно, сервис может вернуть ошибку 401 Unauthorized или 403 Forbidden. Это происходит потому, что для доступа к защищенным методам API требуется авторизация. В системе "Мой налог" используется протокол OAuth 2.0, где в заголовках запроса необходимо передавать токен доступа.

Рассмотрим структуру заголовков, которые необходимо добавить в объект HTTPЗапрос:

  1. Authorization: Должен содержать строку вида Bearer [ваш_токен].
  2. User-Agent: Рекомендуется указывать актуальный заголовок браузера или официального приложения, так как сервер ФНС может блокировать стандартные запросы от библиотек автоматизации.
  3. Accept: Обычно используется application/json.

Проанализируем пример формирования запроса с авторизацией:


Запрос = Новый HTTPЗапрос(ПутьКРесурсу);
Запрос.Заголовки.Вставить("Authorization", "Bearer " + ТокенДоступа);
Запрос.Заголовки.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36");
Запрос.Заголовки.Вставить("Accept", "application/json");

Ответ = Соединение.Получить(Запрос);

Получение печатной формы и изображения чека

Если ваша задача — "насовать в 1С картинок", то есть загрузить визуальное представление чека, следует использовать соответствующий эндпоинт. Обычно для получения печатной формы вместо суффикса /JSON в URL используется суффикс /print или специализированные методы для генерации PDF/PNG.

Выясним причину, почему иногда изображение не загружается: сервер может отдавать бинарные данные, которые необходимо правильно прочитать в 1С. Для этого используется метод ПолучитьТелоКакДвоичныеДанные() объекта HTTPОтвет, после чего данные можно сохранить в справочник или прикрепить к документу.

Инструменты отладки и тестирования

Прежде чем приступать к написанию кода в 1С, настоятельно рекомендуем проверить работоспособность запросов во внешних инструментах. Это позволит исключить ошибки в параметрах API.

Посмотрим на последовательность действий при отладке: сначала добейтесь успешного получения JSON в Postman, убедитесь, что вы правильно обрабатываете Bearer токен, и только после этого переносите логику в код 1С, используя объекты HTTPСоединение и HTTPЗапрос. Для тестирования и настройки таких веб-запросов без сторонних утилит подойдёт обработка для проверки REST API непосредственно в 1С.

Важные замечания по безопасности и лимитам

При работе с API налоговой службы следует помнить о Rate Limiting (ограничении частоты запросов). Массовая загрузка данных в режиме "Загрузка = Истина" может привести к временной блокировке вашего IP-адреса. Рекомендуется устанавливать небольшие паузы между запросами при обработке больших массивов чеков.

Также обратите внимание на версию TLS. Современные сервисы ФНС требуют протокол TLS 1.2 или выше. Если вы используете старую версию платформы 1С на старой операционной системе, убедитесь, что компоненты OpenSSL обновлены и поддерживают современные алгоритмы шифрования, иначе соединение будет разорвано на этапе инициализации рукопожатия (Handshake).

← На главную