|   |   | 
| 
 | 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) спасибо, уже написал в пятницу, глухо пока что )     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |