|
Помогите с JSON | ☑ | ||
---|---|---|---|---|
0
picom
31.10.22
✎
08:54
|
Задача, получить информацию от сюда
https://help.plusofon.ru/API/FlashCall_API Код в 1С, который возвращает синтаксическую ошибку Сервер = "new-api.plusofon.ru"; Ресурс = "/flash-call/send"; HTTP = Новый HTTPСоединение(Сервер,443,,,,,Новый ЗащищенноеСоединениеOpenSSL); имяФайлаСПараметрами = ПолучитьимяВременногоФайла("txt"); // файл, содержащий параметры ЗаписьТекста = Новый ЗаписьТекста(имяФайлаСПараметрами); ЗаписьТекста.ЗаписатьСтроку("{"); ЗаписьТекста.ЗаписатьСтроку("""jsonrpc"": ""2.0"","); ЗаписьТекста.ЗаписатьСтроку("""method"": ""flash-call/send"","); ЗаписьТекста.ЗаписатьСтроку("""params"": {"); ЗаписьТекста.ЗаписатьСтроку("""phone"": ""7999999999"""); ЗаписьТекста.ЗаписатьСтроку("}, "); ЗаписьТекста.ЗаписатьСтроку("""id"": 1"); ЗаписьТекста.ЗаписатьСтроку("}"); ЗаписьТекста.Закрыть(); ФайлРезультата = ПолучитьИмяВременногоФайла(); HTTPЗапрос = Новый HTTPЗапрос(Ресурс); HTTPЗапрос.Заголовки.Вставить("Authorization","Bearer podfupofjuswofkjwfoihf"); HTTPЗапрос.Заголовки.Вставить("Content-Type","application/json"); HTTPЗапрос.УстановитьИмяФайлаТела(имяФайлаСПараметрами); Результат = HTTP.ОтправитьДляОбработки(HTTPЗапрос, ФайлРезультата); Что я делаю не так? |
|||
1
Кир Пластелинин
31.10.22
✎
08:57
|
1. что за ошибку?
2. откройте для себя платформенные методы работы с json |
|||
2
Smit1C
31.10.22
✎
08:59
|
(0) JSON лучше сделать через "Новый ЗаписьJSON" из структуры, а не через запись текста.
И без текста ошибки с сервера мы тут ничем не поможем. |
|||
3
picom
31.10.22
✎
08:59
|
Текст ошибки/возврата
{"jsonrpc":"2.0","id":null,"result":null,"error":{"code":0,"message":"Invalid JSON data in request body: Syntax error."}} |
|||
4
alarm2020
31.10.22
✎
09:05
|
(3) Что непонятного в сообщении об ошибке? Неправильный JSON. Сделайте правильный
|
|||
5
picom
31.10.22
✎
09:12
|
Пробую, а как вот это собрать? Массив, начало объекта ... что енто?
"params": { "phone": "79376198612" }, |
|||
6
Kassern
31.10.22
✎
09:14
|
(5) В json все просто. {}-Объект []-массив
|
|||
7
alarm2020
31.10.22
✎
09:15
|
(5) Структура
|
|||
8
Kassern
31.10.22
✎
09:16
|
И да, в объекте может быть еще объект. Как в данном случае
|
|||
9
KJlag
31.10.22
✎
09:20
|
(5) любой json online converter
и в нем прочекать итоговый вариант ваш. а так, да - как уже сказано в (1) - есть платформенные методы перевода в json |
|||
10
alarm2020
31.10.22
✎
09:21
|
Похоже, что вместо
("""method"": ""flash-call/send"",") надо писать ("""method"": ""flash-call\/send"",") |
|||
11
Builder
31.10.22
✎
09:22
|
(6) Ну все таки применительно к 1С точнее так:
{} - Структура [] - Массив И в (5) - структура в структуре. |
|||
12
picom
31.10.22
✎
09:30
|
(7) а как имя структуры указать, как в (5)? в СП нет
|
|||
13
alarm2020
31.10.22
✎
09:35
|
(12) У структуры нет имени. У структуры есть набор пар ключ-значение. При этом значение в какой-либо паре может быть тоже структурой. В этом случае можешь считать, что ключ и есть имя
|
|||
14
Builder
31.10.22
✎
09:35
|
(12) Как то так:
СтруктураТов = Новый Структура; СтруктураТов.Вставить("status","delivered"); СтруктураЗапроса= Новый Структура; СтруктураЗапроса.Вставить("dir","ASC"); СтруктураЗапроса.Вставить("filter",СтруктураТов); СтруктураЗапроса.Вставить("offset",0); СтруктураЗапроса.Вставить("limit",1000); ИтоговыйЗапрос = СтруктураВJson(СтруктураЗапроса); |
|||
15
Kassern
31.10.22
✎
09:37
|
(14) Сразу видно работу с API маркетплейсов)
|
|||
16
Builder
31.10.22
✎
09:38
|
+ к (14)
Ну и дальше как то так HTTPЗапрос.УстановитьТелоИзСтроки(ИтоговыйЗапрос, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать); (15) А то :) |
|||
17
alarm2020
31.10.22
✎
09:40
|
Но ошибка все-таки здесь;
flash-call/send ТС может не мучаться с ЗаписьJSON, а просто добавить слэш в свой исходный текст |
|||
18
picom
31.10.22
✎
09:47
|
(17) это не помогает
|
|||
19
Смотрящий от 1С
31.10.22
✎
10:00
|
через отладчик посмотрите, что находится внутри имяФайлаСПараметрами
|
|||
20
Kassern
31.10.22
✎
10:08
|
(18) Переделайте уже через Запись json. При этом не нужно создавать временные файлы, а просто через метод Установить строку начать запись. и Результат=ЗаписьJSON.Закрыть() - получить готовый текст для отправки.
Далее, с помощью УстановитьТелоИзСтроки(Результат) - запихнуть json в запрос. И да, у вас там в API черным по белому написано - "phone integer". Номер телефона нужно числом выгружать, а не строкой. |
|||
21
picom
31.10.22
✎
10:12
|
(14) СтруктураВJson Такой нет...
|
|||
22
Kassern
31.10.22
✎
10:14
|
(21) Есть такой волшебный метод ЗаписатьJSON() Прочитайте про него.
|
|||
23
Builder
31.10.22
✎
10:14
|
(21)
Функция СтруктураВJson(Объект, ПараметрыПреобразования = Неопределено) Экспорт ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON( ЗаписьJSON, Объект); Возврат ЗаписьJSON.Закрыть(); КонецФункции |
|||
24
Garykom
гуру
31.10.22
✎
10:14
|
(0) ЗаписьТекста.ЗаписатьСтроку("""id"": 1");
1 надо не числом а текстом |
|||
25
Kassern
31.10.22
✎
10:15
|
(23) Зря вы используете переменные с именами Объект
|
|||
26
Kassern
31.10.22
✎
10:16
|
Лучше вообще от системных переменных отказаться, таких как Объект, Элементы, Форма, Параметры и т.д.
|
|||
27
Garykom
гуру
31.10.22
✎
10:18
|
(24)+ хотя странно в описании для postman одно https://docs.plusofon.ru/api/plusofon_flash_call.postman_collection.json
а в примерах curl другое https://help.plusofon.ru/API/FlashCall_API |
|||
28
Garykom
гуру
31.10.22
✎
10:19
|
(0) Проверь как оно работает через curl и postman
а затем пытаешься сделать это же из 1С перехватывать для отладки можно Fiddler'ом |
|||
29
Kassern
31.10.22
✎
10:21
|
(27) Я бы просто попробовал разные варианты и строкой и числом. Там комбинаций минимум
|
|||
30
Builder
31.10.22
✎
10:22
|
(25) ХЗ откуда этот кусок кода выдрал, но замечание справедливое, надо поправить :)
|
|||
31
Garykom
гуру
31.10.22
✎
10:31
|
(29) У ТС d (0) возможно классическая трабла с BOM
|
|||
32
picom
31.10.22
✎
10:31
|
(23) Спасибо! Все заработало.
|
|||
33
Dzenn
гуру
31.10.22
✎
11:37
|
Для работы с JSON предусмотрены объекты методы ПрочитатьJSON(...) ЗаписатьJSON(...) ЧтениеJSON ЗаписьJSON
Использование других способов, типа ЗаписьТекста — это ошибка и усложнение |
|||
34
Dzenn
гуру
31.10.22
✎
11:39
|
(33) использование данных способов позволяет превращать массивы и структуры в JSON — это сильно облегчает взаимодействие
|
|||
35
picom
07.11.22
✎
08:01
|
Блин, понедельник...
На платформе 8.3.20 в режиме совместимости 8.2.13 не работает.... На свежих все ОК. Что делать, куда копать? |
|||
36
Ryzeman
07.11.22
✎
08:05
|
(35) >>Доступен, начиная с версии 8.3.6.
Похоже, копать в сторону сбора ручками, как ты это изначально и пытался сделать :-D |
|||
37
picom
07.11.22
✎
08:09
|
В том то и дело, что эти методы все работаю, но даже собирая ручками, синтаксическая ошибка...
{"jsonrpc":"2.0","id":null,"result":null,"error":{"code":0,"message":"Invalid JSON data in request body: Syntax error."}} Эта же обработка на чуть более свежей 10.3 уже работает. Как буд-то ID по дороге теряет ... |
|||
38
picom
07.11.22
✎
08:16
|
Вроде продвинулся
HTTPЗапрос.УстановитьТелоИзСтроки(ИтоговыйЗапрос, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |