При разработке интеграции с системой «Честный знак» (ГИС МТ) из 1С можно столкнуться с ситуацией, когда при попытке отправить документ вывода из оборота через HTTP-запрос возвращается ошибка от веб-сервера (nginx): 405 Not Allowed. Разберем по шагам причины возникновения этой проблемы и способы её устранения.
Обычно проблема возникает при отправке POST-запроса на создание документа, например, по адресу /lk/documents/create?pg=water. Рассмотрим подробнее, что может приводить к ошибке и как правильно сформировать запрос.
Одной из частых проблем при формировании тела JSON для «Честного знака» является наличие скрытых символов переноса строки в закодированных данных. Когда мы преобразуем двоичные данные файла в формат Base64 с помощью функции Base64Строка, платформа 1С по умолчанию может добавлять символы перевода каретки и переноса строки.
Если эти символы попадут в итоговый JSON или структуру запроса, сервер может некорректно разобрать данные, что иногда приводит к отклонению запроса на уровне балансировщика с неочевидной ошибкой. Чтобы избежать этого, после получения строки Base64 необходимо принудительно удалить эти символы.
Посмотрим на пример правильной обработки:
Base64 = Base64Строка(ДвоичныеДанные);
// Удаляем символы переноса строк и возврата каретки
Base64 = СтрЗаменить(Base64, Символы.ПС, "");
Base64 = СтрЗаменить(Base64, Символы.ВК, "");
Ошибка 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-запросы в корневой каталог.
Помимо технических аспектов отправки запроса, важно проверить логические ограничения системы:
LK_RECEIPT (или MANUAL) для выбранной товарной группы и операции.signature), а в специализированном HTTP-заголовке X-Signature. Сам документ при этом может передаваться в сыром виде или как multipart/form-data. Рекомендуем свериться с актуальной документацией True API.Таким образом, для исправления ошибки 405 необходимо убедиться в чистоте строки Base64, использовать актуальные адреса (с префиксом /api/v3/true-api/...) и актуальные способы авторизации/подписания, указанные в свежей документации True API.