Как правильно интегрировать Wialon API и 1С для получения токена локатора?

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

В процессе обмена данными между 1С и платформой мониторинга Wialon разработчики часто сталкиваются с ошибками при вызове методов API. Одной из наиболее распространенных проблем является получение ошибки {"error":4}, которая свидетельствует о «неверном вводе» (Invalid input). Давайте разберем по шагам, как правильно сформировать запрос, обработать JSON и избежать проблем с кодировкой.

Анализ причин ошибки

Сервер Wialon крайне чувствителен к формату передаваемых параметров. Когда мы формируем строку URL вручную, возникает две основные опасности:

  1. Некорректная обработка спецсимволов: Фигурные скобки, кавычки и слэши в JSON-структуре часто интерпретируются сервером как часть URL-адреса, что нарушает структуру вызова метода.
  2. Неправильная структура вложенного JSON: Метод token/update требует, чтобы параметр p был строкой, которая сама по себе является сериализованным объектом JSON. Это «двойное» вложение — частая причина ошибок.

Шаг 1: Правильное формирование структуры данных

Чтобы избежать ошибок, лучше не собирать JSON вручную через конкатенацию строк. Используйте штатные механизмы платформы 1С — объекты Структура, Массив и ЗаписьJSON.

Разделим процесс на два этапа: формирование внутреннего объекта для параметра p и формирование основного запроса.


// Формируем внутренние параметры для локатора
ДанныеПараметрыДляП = Новый Структура;
ДанныеПараметрыДляП.Вставить("note", "Delivery");
ДанныеПараметрыДляП.Вставить("zones", 0);
ДанныеПараметрыДляП.Вставить("tracks", 1);

// Настройка сериализации
ПараметрыДжсон = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, " ", Истина);

// Сериализуем внутреннюю структуру
ЗаписьJSON_ДляП = Новый ЗаписьJSON;
ЗаписьJSON_ДляП.УстановитьСтроку(ПараметрыДжсон);
ЗаписатьJSON(ЗаписьJSON_ДляП, ДанныеПараметрыДляП);
ТекстJSON_ДляП = ЗаписьJSON_ДляП.Закрыть();

Шаг 2: Формирование основного тела запроса

Теперь создадим основной набор параметров, который требует Wialon API. Важно помнить, что параметр p должен содержать результат предыдущей операции как строку.


ДанныеПараметры = Новый Структура;
ДанныеПараметры.Вставить("callMode", "create");
ДанныеПараметры.Вставить("app", "locator");
ДанныеПараметры.Вставить("at", 0);
ДанныеПараметры.Вставить("dur", 864000);
ДанныеПараметры.Вставить("fl", 256);
ДанныеПараметры.Вставить("p", ТекстJSON_ДляП);
ДанныеПараметры.Вставить("items", МассивИД);

// Сериализуем основной объект
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку(ПараметрыДжсон);
ЗаписатьJSON(ЗаписьJSON, ДанныеПараметры);
ТекстJSON = ЗаписьJSON.Закрыть();

Шаг 3: Работа с URL и экранированием

Если вы используете GET-запросы для вызова ajax.html, возникает проблема с обратными слэшами, которые 1С может добавлять автоматически при сериализации. Чтобы запрос успешно прошел проверку на стороне сервера Wialon, необходимо заменить слэши на их URL-кодированный аналог.


// Формируем ресурс для HTTPЗапрос
// Заменяем '\' на '%5C', чтобы сервер корректно распарсил JSON внутри параметра
Ресурс = "wialon/ajax.html?svc=token/update&sid=" + СИД 
       + "¶ms=" + СтрЗаменить(ТекстJSON, "\", "%5C");

// Создаем и отправляем запрос
Соединение = Новый HTTPСоединение("hst-api.wialon.com",,,, , 60, Новый ЗащищенноеСоединениеOpenSSL());
Запрос = Новый HTTPЗапрос(Ресурс);
Ответ = Соединение.Получить(Запрос);

Важные рекомендации по настройке параметров

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

← На главную