|
REST POST JSON запрос к СберМегаМаркет "Unexpected token Т in JSON at position 0" | ☑ | ||
---|---|---|---|---|
0
espanol
29.11.21
✎
07:56
|
Пытаюсь синтегрироваться с этой платформой, с кучей платформ уже синтегрировался, все отрабатывают кроме этой, при интеграции выдает код 200 и текст
"{"success":0,"error":{"errorText":"Unexpected token Т in JSON at position 0","errorCode":"SyntaxError"}}" Что за ошибка? Как ее обойти? Я строго следовал всех им инструкция, и авторизация по токену, и пост запрос с джейсоном, и все все все.... Как я только не крутил не вертел, ничего не получается, код прикладываю: Функция ПолучитьЯрлыкЗаказа() ИсходящиеДанные = Новый Структура(); ИсходящиеДанные.Вставить("ЕстьОшибка", Ложь); ИсходящиеДанные.Вставить("ДвоичныеДанные", ""); АдресРесурса = ПолучитьАдресСервера(); АдресРесурса = АдресРесурса + "order/shipping"; ЗаголовокHTTP = ПолучитьЗаголовки(); Параметры = ОбщегоНазначенияКлиентСервер.СтруктураURI(АдресРесурса); HTTPСоединение = Новый HTTPСоединение(Параметры.Хост,443,,,,600,Новый ЗащищенноеСоединениеOpenSSL); HTTPЗапрос = Новый HTTPЗапрос(Параметры.ПутьНаСервере, ЗаголовокHTTP); JSON = ДанныеОтправкиПоАПИ(); ФайлРезультата = ПолучитьИмяВременногоФайла(); ФайлЗапроса = ПолучитьИмяВременногоФайла(); ТекстовыйФайл = Новый ТекстовыйДокумент; ТекстовыйФайл.УстановитьТекст(JSON.СтрокаJSON); ТекстовыйФайл.Записать(ФайлЗапроса, КодировкаТекста.UTF8); HTTPЗапрос.УстановитьТелоИзСтроки(ТекстовыйФайл); Попытка Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос, ФайлРезультата); Если Ответ.КодСостояния = 200 Тогда СтрокаОтвет = Ответ.ПолучитьТелоКакСтроку(); Ответ = Новый ТекстовыйДокумент(); Ответ.Прочитать(ФайлРезультата, КодировкаТекста.UTF8); ТекстОтвета = Ответ.ПолучитьТекст(); УдалитьФайлы(ФайлЗапроса); УдалитьФайлы(ФайлРезультата); Сообщить(ТекстОтвета); Если Найти(НРег(ТекстОтвета), "error") = 0 Тогда ДвоичныеДанные = Ответ.ПолучитьТелоКакДвоичныеДанные(); ИсходящиеДанные.Вставить("ДвоичныеДанные", ДвоичныеДанные); Иначе ТекстОшибки = "Не удалось получить ярлык заказа!"; МассивОшибок.Добавить(ТекстОшибки); ИсходящиеДанные.Вставить("ЕстьОшибка", Истина); КонецЕсли; Иначе ИсходящиеДанные.Вставить("ЕстьОшибка", Истина); ТекстОшибки = "Сбой подключения!" + Символы.ПС + "Код ответа: " + Формат(Ответ.КодСостояния, "ЧРГ=' '; ЧН=0; ЧГ=0"); МассивОшибок.Добавить(ТекстОшибки); КонецЕсли; Исключение ИсходящиеДанные.Вставить("ЕстьОшибка", Истина); ТекстОшибки = ОписаниеОшибки(); МассивОшибок.Добавить(ТекстОшибки); КонецПопытки; Возврат(ИсходящиеДанные); КонецФункции Функция ДанныеОтправкиПоАПИ() datain = Новый Структура; datain.Вставить("token", СокрЛП(Токен)); shipmentIdИboxes = Новый Массив; shipmentId = Новый Структура; shipmentId.Вставить("shipmentId", "980820641"); shipmentIdИboxes.Добавить(shipmentId); boxes = Новый Массив; boxIndexboxCode = Новый Структура; boxIndexboxCode.Вставить("boxIndex", 1); boxIndexboxCode.Вставить("boxCode", "194*980820641*1"); boxes.Добавить(boxIndexboxCode); shipmentId.Вставить("boxes", boxes); shipping = Новый Структура; shippingDate = Новый Структура; shippingDate.Вставить("shippingDate", "2020-06-05T17:56:38"); shipmentId.Вставить("shipping", shippingDate); datain.Вставить("shipments", shipmentIdИboxes); data = Новый Структура; data.Вставить("data", datain); data.Вставить("meta", Новый Структура); //ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Windows, " ", Истина); ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет); ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON); ЗаписатьJSON(ЗаписьJSON, data); СтрокаJSON = ЗаписьJSON.Закрыть(); СтруктураВозврата = Новый Структура; СтруктураВозврата.Вставить("СтрокаJSON", СтрокаJSON); Чтение = Новый ЧтениеJSON; Чтение.УстановитьСтроку(СтрокаJSON); СтруктураОтвета = ЗаполнитьСтруктуруИзОтветаJSON(Чтение); Возврат СтруктураВозврата; КонецФункции Функция ПолучитьЗаголовки() Заголовки = Новый Соответствие; //Заголовки.Вставить("Authorization" , "OAuth oauth_token="""+СокрЛП(Токен)+""); //Заголовки.Вставить("Authorization" , "OAuth oauth_token="""+СокрЛП(Токен)+""", oauth_client_id="""+СокрЛП(КлиентID)+""""); //Заголовки.Вставить("User-Agent" ,"Beru-Modul 1.7.20 UT/"+Метаданные.Версия+""); Заголовки.Вставить("Content-Type", "application/json; charset=utf-8"); Заголовки.Вставить("Authorization", Токен);//Боевой Fkj214SA9asdmxASDj12!@kcLdspX //Тестовый kS43Dl234jasd@$32dN //Заголовки.Вставить("Authorization", "Basic " + СоздатьСтрокуBase64("goods:goods2019")); Заголовки.Вставить("Accept", "application/json"); //Заголовки.Вставить("Authorization", "Token " + Токен); Возврат Заголовки; КонецФункции Функция ПолучитьАдресСервера() Сервер = "https://partner.goodsteam.tech/api/market/v1/orderService/"; Возврат Сервер; КонецФункции Подскажите что не так, что за ошибка такая, как её обойти? |
|||
1
ДенисЧ
29.11.21
✎
08:01
|
BOM отключи в записи Джозефа Сталина.
|
|||
2
espanol
29.11.21
✎
08:12
|
Сделал без Bom
ЗТ = Новый ЗаписьТекста(ФайлРезультата,,, Истина, Символы.ПС); ЗТ.Записать(JSON.СтрокаJSON); ЗТ.Закрыть(); Теперь ругается немножко по другому {"success":0,"error":{"errorText":"Unexpected token З in JSON at position 0","errorCode":"SyntaxError"}} Куда копать? |
|||
3
ДенисЧ
29.11.21
✎
08:16
|
Проверь обращение к серверу. Сервер и путь на нём должны быть в разных местах. А у тебя (лень в портянке ковыряться) - похоже в одном.
|
|||
4
espanol
29.11.21
✎
08:36
|
Прикольно, теперь он ругается так:
{"success":0,"error":{"errorText":"Unexpected token C in JSON at position 0","errorCode":"SyntaxError"}} И на сколько я понимаю он ругается на символ C в токене CCB48D59-A768-494C-87A2-A9C4A9CED33C Как такое вообще может быть? |
|||
5
espanol
29.11.21
✎
08:45
|
Хотя нет, он ругается не на символы токена, а на чтото другое
|
|||
6
espanol
29.11.21
✎
09:15
|
А в Taland API Tester возвращает это:
{ "success": 0, "error":{"errorText": "Unexpected token \" in JSON at position 0", "errorCode": "SyntaxError"} } Плиз хелп! |
|||
7
Kassern
29.11.21
✎
09:25
|
(6) " ТекстовыйФайл = Новый ТекстовыйДокумент;
ТекстовыйФайл.УстановитьТекст(JSON.СтрокаJSON); ТекстовыйФайл.Записать(ФайлЗапроса, КодировкаТекста.UTF8); " Вот это зачем? Можно же проще: ТелоДляОтправки=JSON.Закрыть(); HTTPЗапрос.УстановитьТелоИзСтроки(ТелоДляОтправки); В адресе ресурса случаем нет символов которые нужно преобразовать в урл? |
|||
8
Kassern
29.11.21
✎
09:26
|
и надеюсь json вы через Новый ЗаписьJSON собирали соблюдая теги.
|
|||
9
espanol
29.11.21
✎
09:40
|
В адресе ресурса случаем нет символов которые нужно преобразовать в урл?
нет, там все нормально. и надеюсь json вы через Новый ЗаписьJSON собирали соблюдая теги. именно так |
|||
10
Kassern
29.11.21
✎
09:46
|
(9) а зачем вы именно текстовый файл пихаете в тело, а не сам текст?
|
|||
11
espanol
29.11.21
✎
09:46
|
(10) нет, не катит ) не работает так вообще, код ответа даже не 200 выдавало
|
|||
12
Kassern
29.11.21
✎
09:48
|
Если уж вам нужно было записать в файл json, так вместо УстановитьСтроку использовали бы указание файла, при закрытии json он бы автоматом записался по пути. Зачем текстовый документ то?
|
|||
13
Kassern
29.11.21
✎
09:48
|
(11) по API, в документации, что в теле нужно бередать? Бинарный файл с данными, или все же json строку?
|
|||
14
Kassern
29.11.21
✎
09:49
|
(13) *передать
|
|||
15
Kassern
29.11.21
✎
09:50
|
такое ощущение, что вы просто подбором пытаетесь вопрос решить, не понимая, что действительно нужно передать и как.
|
|||
16
espanol
29.11.21
✎
09:51
|
(13) инструкция у них очень скудная, вот что на счет джесона
Запрос Order/Shipping 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 { "data": { "token": "FC1E36EE-1885-426E-8A46-FB1B9591253E", "shipments": [{ "shipmentId": "980820641", "boxes": [{ "boxIndex": 1, "boxCode": "194*980820641*1" } ], "shipping": { "shippingDate": "2020-06-05T17:56:38" } } ] }, "meta": {} } |
|||
17
espanol
29.11.21
✎
09:52
|
order/shipping - стандарт
Подтверждение отгрузки Мерчантом Описание метода Order/Shipping URL метода: /order/shipping Запрос выполняется Мерчантом. Сообщает о выполнении отгрузки Отправления курьеру. Формат даты в поле shippingDate - YYYY-MM-DDThh:mm:ss+hh:mm |
|||
18
espanol
29.11.21
✎
09:52
|
и всё )
|
|||
19
Kassern
29.11.21
✎
10:01
|
(16) значит все верно я вам написал
Собирайте json через структуры верно: Как-то так: ЗаписьJson=Новый ЗаписьJSON; ЗаписьJson.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJson,СтруктураДанных); Результат=ЗаписьJson.Закрыть(); Далее в теле отправляете: Именно Результат. Зачем вы делаете лишние "телодвижения"? Вот это закоментите СтруктураВозврата = Новый Структура; СтруктураВозврата.Вставить("СтрокаJSON", СтрокаJSON); Чтение = Новый ЧтениеJSON; Чтение.УстановитьСтроку(СтрокаJSON); СтруктураОтвета = ЗаполнитьСтруктуруИзОтветаJSON(Чтение); Возврат СтруктураВозврата; И вот это для чего вам? ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет); Попробуйте не указывать параметры записи. |
|||
20
Kassern
29.11.21
✎
10:03
|
Собранный json проверьте на корректность, чтобы все теги совпадали с документацией (переменная Результат).
|
|||
21
espanol
29.11.21
✎
10:05
|
(19) там мой джесон валидный, от перестановки слагаемых, сумма не меняется. Всегда везде работало...
|
|||
22
Kassern
29.11.21
✎
10:06
|
(21) какая ошибка, если вы json вставляете в тело, а не текстовый документ?
|
|||
23
Галахад
гуру
29.11.21
✎
10:15
|
(22) + 1.
|
|||
24
espanol
29.11.21
✎
10:15
|
(22) {"meta":{},"success":0,"error":{"message":"No valid token.","code":0}}
|
|||
25
Kassern
29.11.21
✎
10:16
|
(24) ну вот и все "No valid token" - токен значит не верный. Уже ошибки с синтаксисом нет. Напишите им по поводу вашего токена в поддержку
|
|||
26
espanol
29.11.21
✎
10:17
|
(25) так я же беру токен по инструкции с личного кабинета и работаю с ним....
|
|||
27
Kassern
29.11.21
✎
10:21
|
(26) может его надо активировать, или еще какие то манипуляции сделать, перед тем как работать с ним. В любом случае напишите им в поддержку по поводу вашего токена
|
|||
28
espanol
29.11.21
✎
10:41
|
(27) спасибо, уже написал в пятницу, глухо пока что )
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |