|
Интеграция Wialon и 1С. Внедрение "Локатора" | ☑ | ||
---|---|---|---|---|
0
lav151
22.11.22
✎
10:47
|
Всем Добрый день
Коллеги, нужна ваша помощь в интеграции Локатора (в виалоне) с 1С для получения токена местонахождения объекта. Вот кусок кода в 1С. ----- СерверАГ="hst-api.wialon.com"; SSL=Новый ЗащищенноеСоединениеOpenSSL(); Соединение=Новый HTTPСоединение(СерверАГ,,,,,,SSL); СИД=ПолучениеСИД(); Запрос = Новый HTTPЗапрос("wialon/ajax.html?svc=token/update&sid="+СИД+"¶ms={""callMode"":""create"",""app"":""locator"",""at"":0,""dur"":864000,""fl"":256,""p"":""{\""note\"":\""Delivery test\"",\""zones\"":0,\""tracks\"":1}"",""items"":["+ИД+"]}"); Ответ=Соединение.Получить(Запрос); Если Ответ.КодСостояния=200 Тогда Чтение = Новый ЧтениеJSON; Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку()); СтруктураТест = ПрочитатьJSON(Чтение); КонецЕсли; ----- В структуре я получаю ошибку {"error":4} - Неверный ввод. Если я копирую этот же запрос в строку браузера, приписывая вначале адрес hst-api.wialon.com , то все работает, токен для вывода локатора получаю. Может синтаксис ввода запроса в 1С другой, не знаю, пробовал ставить/убирать символы в запросе, менять местами параметры.. никак не получается. Писал на форум виалона не ответили. Пример готового кода брал от сюда https://forum.wialon.com/viewtopic.php?id=9583 |
|||
1
Kassern
22.11.22
✎
10:53
|
(0) JSON лучше платформенными методами собирать. Строку запроса лучше кодировать в урл. Так же нужно убедиться, что вызывается нужный метод (get, post...). Я обычно ресурс в запросе начинаю с "/" - хз насколько это необходимо. Порт у сервера стандартный? Какой ответ получаете от сервиса?
|
|||
2
hockeyist
22.11.22
✎
10:55
|
(0) Вот эти вот палочки \
они совсем не для того, что ты думаешь |
|||
3
hockeyist
22.11.22
✎
10:58
|
(1) Там JSON в JSONе. Люди знают толк в извращениях
|
|||
4
hockeyist
22.11.22
✎
11:00
|
(2) + просто убери их
|
|||
5
Kassern
22.11.22
✎
11:02
|
(3) ага, проще было в теле запроса передать json, а в строке ресурса лишь основные параметры.
|
|||
6
lav151
22.11.22
✎
11:18
|
(1) В портах все норм, другие данные получается получить из виалоне. Ответ получается вот в строке браузера {"h":"48837859cb8cbda2dab6eaa065af8b1eBA8C41D2019E885E76144797962B4F342A6929E1","app":"locator","at":1669104805,"ct":1669104805,"dur":864000,"fl":256,"items":[23129768],"p":"{\"note\":\"Delivery (test)\",\"zones\":0,\"tracks\":1}"}
|
|||
7
Kassern
22.11.22
✎
11:25
|
(6) "\"note\":\"Delivery (test)\",\"zones\":0..." - вы понимаете что это json? Браузер автоматом делает многие вещи, что в 1с и других инструментах нужно прописывать самостоятельно. Например браузер автоматом кодирует строку в урл. Возможно и json норм передает.
|
|||
8
Kassern
22.11.22
✎
11:26
|
Попробуйте через ЗаписьJSON создать нужную строку с параметрами и передать уже ее.
|
|||
9
lav151
22.11.22
✎
11:30
|
(8) Хорошо, спасибо, как сделаю отпишусь)
|
|||
10
hockeyist
22.11.22
✎
11:58
|
(9) А просто убрать палочки?
|
|||
11
hockeyist
22.11.22
✎
12:08
|
(7) Это не JSON. Это PHP(откуда ТС взял пример) так экранирует кавычки. 1С экранирует кавычки по-другому. Ваш совет мало чем поможет ТС
|
|||
12
Kassern
22.11.22
✎
12:12
|
(11) так а зачем ему эти слеши, если он нормально сформирует текст json и воткнет его?
Создаст нужную структуру и запихнет ее в ЗаписатьJSON |
|||
13
Kassern
22.11.22
✎
12:13
|
И будет что-то вроде:
Ресур="/wialon/ajax.html?svc=token/update&sid="+СИД+"¶ms="+ТекстJSON"; |
|||
14
Kassern
22.11.22
✎
12:13
|
кавычка в конце лишняя)
|
|||
15
hockeyist
22.11.22
✎
12:14
|
(12) Он запихнет вместе со слэшами и получит ту же ошибку. Ему уже сказали "убери палочки", но он не слышит.
|
|||
16
Kassern
22.11.22
✎
12:14
|
(15) "Он запихнет вместе со слэшами" - я думал, что он понимает, что сует)
|
|||
17
hockeyist
22.11.22
✎
12:17
|
Для решения вопроса достаточно просто убрать слэши. А JSON через структуру будет более замороченным. Потому что там надо в одну запись JSON воткнуть другую запись JSON
|
|||
18
Kassern
22.11.22
✎
12:17
|
Тут вообще простая структура, еще и лишние кавычки в "p": у вас походу, так как строку передаете вместо объекта json.
{ "callMode": "create", "app": "locator", "at": 0, "dur": 864000, "fl": 256, "p": { "note": "Delivery test", "zones": 0, "tracks": 1 }, "items": [ "+ИД+" ] } |
|||
19
Kassern
22.11.22
✎
12:18
|
Вот такую примерно структуру нужно получить в ТекстJSON=ЗаписьJSON.Закрыть();
|
|||
20
Kassern
22.11.22
✎
12:19
|
{}- структура, []-массив
|
|||
21
hockeyist
22.11.22
✎
12:19
|
(18) Нет. Свойство "p" это строка. А в этой строке JSON. Отсюда и слэши
|
|||
22
Kassern
22.11.22
✎
12:20
|
Для проверки можете использовать любой онлайн едитор, например https://jsoneditoronline.org
|
|||
23
Kassern
22.11.22
✎
12:21
|
(21) А нафига?) Тогда получается так:
{ "callMode": "create", "app": "locator", "at": 0, "dur": 864000, "fl": 256, "p": "{\"note\":\"Delivery test\",\"zones\":0,\"tracks\":1}", "items": [ "+ИД+" ] } |
|||
24
hockeyist
22.11.22
✎
12:21
|
(23) Я же говорю, Wialon знает толк в извращениях
|
|||
25
Kassern
22.11.22
✎
12:22
|
(24) бредятина, я думал это ТС с кавычками намудрил)
|
|||
26
hockeyist
22.11.22
✎
12:23
|
(23) Вместо слэшей должны быть кавычки
|
|||
27
Kassern
22.11.22
✎
12:24
|
(17) Даже если и так, то все равно лучше через записьjson делать, так как тут как минимум есть массивы, которые по любому нужно будет какой-то логикой заполнять да и параметры изменять. Через структуру/массив сделать это будет гораздо удобнее.
|
|||
28
hockeyist
22.11.22
✎
12:25
|
(27) Согласен. Только надо обратить внимание на вложенный JSON
|
|||
29
lav151
22.11.22
✎
13:59
|
(15) Я изначально, до публикации темы игрался со слэшами.
Попробовал по вашим рекомендациям, пока не получилось исправить. Сделал вложенный JSON. Вставил его в http запрос. Ресурс="/wialon/ajax.html?svc=token/update&sid="+СИД+"¶ms="+ТекстJSON; Запрос = Новый HTTPЗапрос(Ресурс); Адрес ресурса получился следующим: /wialon/ajax.html?svc=token/update&sid=04b0a15537ad3e849b0f02794394e1a0¶ms={ "callMode": "create", "app": "locator", "at": 0, "dur": 864000, "fl": 256, "p": "{\"note\":\"Delivery\",\"zones\":0,\"tracks\":1}", "items": [ "20257630" ] } |
|||
30
Kassern
22.11.22
✎
14:04
|
(29) какой ответ приходит вам? Текст ответа выложите. Попробуйте все же вместо "{\"note\":\"Delivery\",\"zones\":0,\"tracks\":1}" -> создать новый запись json со структурой note,Delivery,tracks и результат вставьте как строку в параметр "p"
|
|||
31
Kassern
22.11.22
✎
14:05
|
Я бы еще попробовал вариант без двойного jsonа на всякий случай. Ну и код покажите, как вы json формируется, а то может вы тупо текст вставляете)
|
|||
32
lav151
22.11.22
✎
14:07
|
(31)
ДанныеПараметры = Новый Структура; ДанныеПараметры.Вставить("callMode", "create"); ДанныеПараметры.Вставить("app", "locator"); ДанныеПараметры.Вставить("at", 0); ДанныеПараметры.Вставить("dur", 864000); ДанныеПараметры.Вставить("fl", 256); СтрокаП="{""note"":""Delivery"",""zones"":0,""tracks"":1}"; ДанныеПараметры.Вставить("p",СтрокаП); ДанныеПараметры.Вставить("items",МассивИД); ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON,ДанныеПараметры); ТекстJSON=ЗаписьJSON.Закрыть(); Ресурс="/wialon/ajax.html?svc=token/update&sid="+СИД+"¶ms="+ТекстJSON; Запрос = Новый HTTPЗапрос(Ресурс); |
|||
33
lav151
22.11.22
✎
14:08
|
(30) Ошибка такая же как и была. {"error":4} - Неверный ввод
|
|||
34
Kassern
22.11.22
✎
14:08
|
(32) Вам же тут несколько раз писали про вложенный json. Создайте еще одну запись json и разберите строчку {""note"":""Delivery"",""zones"":0,""tracks"":1}
|
|||
35
Kassern
22.11.22
✎
14:08
|
(33) код ответа какой от сервиса?
|
|||
36
hockeyist
22.11.22
✎
14:09
|
(29) (31) Ну? Что я говорил? Чел впихнул слэши... а-ха-ха, видимо, это неисправимо
|
|||
37
Kassern
22.11.22
✎
14:09
|
Ну и на по следок Ресурс=КодироватьСтроку(ваша строка, типкодировки);
|
|||
38
Kassern
22.11.22
✎
14:11
|
(36) Кто-то нас обманывает), смотрите в (29) есть слешы, а в (32) их уже нет, чудеса)
|
|||
39
hockeyist
22.11.22
✎
14:18
|
Отличие от примера только в Note
|
|||
40
lav151
23.11.22
✎
10:23
|
(39) Note - это описание, может быть любым.
|
|||
41
lav151
23.11.22
✎
10:23
|
ДанныеПараметры = Новый Структура;
ДанныеПараметры.Вставить("callMode", "create"); ДанныеПараметры.Вставить("app", "locator"); ДанныеПараметры.Вставить("at", 0); ДанныеПараметры.Вставить("dur", 864000); ДанныеПараметры.Вставить("fl", 256); ДанныеПараметрыДляП = Новый Структура; ДанныеПараметрыДляП.Вставить("note", "Delivery"); ДанныеПараметрыДляП.Вставить("zones", 0); ДанныеПараметрыДляП.Вставить("tracks", 1); ПараметрыДжсон = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет," ", Истина); ЗаписьJSON_ДляП = Новый ЗаписьJSON; ЗаписьJSON_ДляП.УстановитьСтроку(ПараметрыДжсон); ЗаписатьJSON(ЗаписьJSON_ДляП,ДанныеПараметрыДляП); ТекстJSON_ДляП=ЗаписьJSON_ДляП.Закрыть(); ДанныеПараметры.Вставить("p",ТекстJSON_ДляП); ДанныеПараметры.Вставить("items",МассивИД); ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(ПараметрыДжсон); ЗаписатьJSON(ЗаписьJSON,ДанныеПараметры); ТекстJSON=ЗаписьJSON.Закрыть(); Ресурс="/wialon/ajax.html?svc=token/update&sid="+СИД+"¶ms="+ТекстJSON; Запрос = Новый HTTPЗапрос(Ресурс); |
|||
42
lav151
24.11.22
✎
17:03
|
Нашел ошибку. Воспользовался сниффером, там и увидел косяк в запросе. Я изначально отправлял верный в 1С http запрос, а сниффер показал что отправляется запрос с обратным слэшом. Пришлось заменить правильный слэш на его кодировку в url. После этого все заработало.
Ресурс="wialon/ajax.html?svc=token/update&sid="+СИД+"¶ms="+СтрЗаменить(ТекстJSON,"\","%5C"); |
|||
43
Kassern
24.11.22
✎
17:05
|
(42) А пробовали использовать КодироватьСтроку()? Если мне не изменяет память, то при кодировани в урл эта проблема уйдет
|
|||
44
lav151
24.11.22
✎
17:18
|
(43) Да, пробовал. Выходила 404 ошибка
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |