Как исправить ошибку 405 Not Allowed при работе с API "Честный знак" в 1С?

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

При разработке интеграции с системой «Честный знак» (ГИС МТ) из 1С можно столкнуться с ситуацией, когда при попытке отправить документ вывода из оборота через HTTP-запрос возвращается ошибка от веб-сервера (nginx): 405 Not Allowed. Разберем по шагам причины возникновения этой проблемы и способы её устранения.

Обычно проблема возникает при отправке POST-запроса на создание документа, например, по адресу /lk/documents/create?pg=water. Рассмотрим подробнее, что может приводить к ошибке и как правильно сформировать запрос.

Очистка строки Base64 от символов переноса строк

Одной из частых проблем при формировании тела JSON для «Честного знака» является наличие скрытых символов переноса строки в закодированных данных. Когда мы преобразуем двоичные данные файла в формат Base64 с помощью функции Base64Строка, платформа 1С по умолчанию может добавлять символы перевода каретки и переноса строки.

Если эти символы попадут в итоговый JSON или структуру запроса, сервер может некорректно разобрать данные, что иногда приводит к отклонению запроса на уровне балансировщика с неочевидной ошибкой. Чтобы избежать этого, после получения строки Base64 необходимо принудительно удалить эти символы.

Посмотрим на пример правильной обработки:


Base64 = Base64Строка(ДвоичныеДанные);
// Удаляем символы переноса строк и возврата каретки
Base64 = СтрЗаменить(Base64, Символы.ПС, "");
Base64 = СтрЗаменить(Base64, Символы.ВК, "");

Проверка актуальности URL и редиректы (Смена POST на GET)

Ошибка 405 Method Not Allowed на стороне Nginx чаще всего возникает не из-за самого тела запроса, а из-за использования неверного HTTP-метода (например, получение сервером метода GET вместо POST). Выясним причину такого поведения.

Если используемый вами URL устарел, сервер может попытаться перенаправить запрос, возвращая статусы 301 или 302. Платформа 1С при автоматическом следовании по редиректу меняет метод запроса с POST на GET. Конечный адрес, ожидающий данные через POST, закономерно отклоняет GET-запрос с ошибкой 405.

Проанализируем ситуацию с адресами API. Путь /lk/documents/create?pg=water может быть устаревшим для современных спецификаций True API. В актуальных версиях (v3 или v4) требуются префиксы. Попробуйте изменить адрес ресурса в запросе на актуальный, например:


// Пример использования полного пути True API
HTTPЗапрос = Новый HTTPЗапрос("/api/v3/true-api/lk/documents/create?pg=water", Заголовки);

Также следует учитывать, что адреса тестовых контуров (песочниц), такие как water.sandbox.crptech.ru, могли быть изменены на унифицированные шлюзы единого личного кабинета. Обращение без правильного префикса может попадать на балансировщик, который не поддерживает POST-запросы в корневой каталог.

Проверка доступности документа и формата подписи

Помимо технических аспектов отправки запроса, важно проверить логические ограничения системы:

  1. Допустимость документа: Проверьте по документации API «Честного знака», допустим ли вообще документ типа LK_RECEIPT (или MANUAL) для выбранной товарной группы и операции.
  2. Передача подписи: В новых версиях API может требоваться передача открепленной подписи не в теле JSON (поле signature), а в специализированном HTTP-заголовке X-Signature. Сам документ при этом может передаваться в сыром виде или как multipart/form-data. Рекомендуем свериться с актуальной документацией True API.
  3. Переход на ЭДО: Обратите внимание, что ЦРПТ планомерно отключает возможность ручного вывода из оборота при реализации (продаже) для многих товарных групп. Если вывод происходит по причине отгрузки другому участнику оборота, система может блокировать такие документы, так как требуется использование электронного УПД через оператора ЭДО. Прямой вывод через API (или ЛК) обычно остается доступен для собственных нужд, порчи, списания и розничных продаж через онлайн-кассы.

Таким образом, для исправления ошибки 405 необходимо убедиться в чистоте строки Base64, использовать актуальные адреса (с префиксом /api/v3/true-api/...) и актуальные способы авторизации/подписания, указанные в свежей документации True API.

← На главную