В процессе обмена данными между 1С и платформой мониторинга Wialon разработчики часто сталкиваются с ошибками при вызове методов API. Одной из наиболее распространенных проблем является получение ошибки {"error":4}, которая свидетельствует о «неверном вводе» (Invalid input). Давайте разберем по шагам, как правильно сформировать запрос, обработать JSON и избежать проблем с кодировкой.
Сервер Wialon крайне чувствителен к формату передаваемых параметров. Когда мы формируем строку URL вручную, возникает две основные опасности:
JSON-структуре часто интерпретируются сервером как часть URL-адреса, что нарушает структуру вызова метода.token/update требует, чтобы параметр p был строкой, которая сама по себе является сериализованным объектом JSON. Это «двойное» вложение — частая причина ошибок.Чтобы избежать ошибок, лучше не собирать JSON вручную через конкатенацию строк. Используйте штатные механизмы платформы 1С — объекты Структура, Массив и ЗаписьJSON.
Разделим процесс на два этапа: формирование внутреннего объекта для параметра p и формирование основного запроса.
// Формируем внутренние параметры для локатора
ДанныеПараметрыДляП = Новый Структура;
ДанныеПараметрыДляП.Вставить("note", "Delivery");
ДанныеПараметрыДляП.Вставить("zones", 0);
ДанныеПараметрыДляП.Вставить("tracks", 1);
// Настройка сериализации
ПараметрыДжсон = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, " ", Истина);
// Сериализуем внутреннюю структуру
ЗаписьJSON_ДляП = Новый ЗаписьJSON;
ЗаписьJSON_ДляП.УстановитьСтроку(ПараметрыДжсон);
ЗаписатьJSON(ЗаписьJSON_ДляП, ДанныеПараметрыДляП);
ТекстJSON_ДляП = ЗаписьJSON_ДляП.Закрыть();
Теперь создадим основной набор параметров, который требует Wialon API. Важно помнить, что параметр p должен содержать результат предыдущей операции как строку.
ДанныеПараметры = Новый Структура;
ДанныеПараметры.Вставить("callMode", "create");
ДанныеПараметры.Вставить("app", "locator");
ДанныеПараметры.Вставить("at", 0);
ДанныеПараметры.Вставить("dur", 864000);
ДанныеПараметры.Вставить("fl", 256);
ДанныеПараметры.Вставить("p", ТекстJSON_ДляП);
ДанныеПараметры.Вставить("items", МассивИД);
// Сериализуем основной объект
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку(ПараметрыДжсон);
ЗаписатьJSON(ЗаписьJSON, ДанныеПараметры);
ТекстJSON = ЗаписьJSON.Закрыть();
Если вы используете 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Запрос(Ресурс);
Ответ = Соединение.Получить(Запрос);
256 обеспечивает базовое онлайн-слежение. Если вам нужны расширенные права, вы можете суммировать флаги (например, 256 + 512 = 768).864000 равно 10 суткам. Если вы хотите сделать токен бессрочным, установите значение 0.GET, для сложных запросов к API Wialon рекомендуется перейти на POST. При POST-запросе параметры передаются в теле через УстановитьТелоИзСтроки(), что снимает большинство проблем с кодировкой символов в URL.Применяя этот подход, вы сможете избежать ошибок типизации и успешно интегрировать функционал локатора Wialon в любую конфигурацию 1С.