Имя: Пароль:
1C
1C 7.7
v7: Передача JSON в API, в BOXBERY. У кого каким образом получалось?
0 Владимир1С
 
09.08.17
12:50
Сообщение, собственно, в теме. Загвоздка , в данный момент, в передаче массива массивов, то есть в передаче спецификации(табличной части). Каким образом что там объявлять?
1 Владимир1С
 
09.08.17
12:53
Поддержка от боксберри тупо написала, что мне нужно учить JSON, и пока от неё внятного ответа добиться не удалось. Может быть, кто нибудь здесь уже решал подобную задачу?
2 Sserj
 
09.08.17
12:55
(1) Ну собственно правильно же написали - учить JSON.
:)
Это же обычный текстовый файлик. Бери форматируй и посылай.
3 v77
 
09.08.17
12:57
(2) да вы все сговорились
4 Владимир1С
 
09.08.17
12:59
Форматирую и посылаю. В ответ получаю одну общую фразу: "  Ошибка входящих данных. Не удалось преобразовать JSON строку обратно в массив."

Никаких подробностей, в каком поле ошибка, ничего. и как его понять?
5 Numerus Mikhail
 
09.08.17
12:59
(1) http://v8.1c.ru/o7/201410json/

вы уверены, что формируете правильно?
6 Владимир1С
 
09.08.17
13:02
(5) Видимо нет, но понять где не так, сервер мне не даёт. Поэтому, собственно, я и здесь.
7 Владимир1С
 
09.08.17
13:02
(5) Пишу я на 7.7, если что. не на 8.х
8 v77
 
09.08.17
13:03
(7) ну так показывай свой JSON уже
9 Владимир1С
 
09.08.17
13:04
{
"token" : "10000.rbpqbafb",
"updateByTrack" : "0",
"order_id" : "Из-ЦО-0042601",
"PalletNumber" : "0",
"barcode" : "0",
"price" : 4741,
"payment_sum" : 4741,
"delivery_sum" : 0,
"vid" : 1,
"Shop" : {
    "name" : "",
    "name1" : ""
    },
"customer" : {
    "fio" : "Мизерак Иван Иосифович",
    "Phone" : "9153919582",
    "Phone2" : "9153919582",
    "email" : "",
    "name" : "Мизерак Иван Иосифович",
    "adress" : "М.о.,ЛМС, Центральный, д.9,кв.19",
    "inn" : "",
    "kpp" : "",
    "r_s" : "",
    "bank" : "",
    "kor_s" : "",
    "bik" : ""
    },
"kurdost" : {
    "index" : "",
    "city" : "",
    "addressp" : "",
    "timesfrom1" : "",
    "timesto1" : "",
    "timesfrom2" : "",
    "timesto2" : "",
    "timep" : "",
    "comentk" : ""
    },
"items" : {
    "1" : {
        "id" : "8060",
        "name" : "варежки жен 8060 OCEAN",
        "UnitName" : "шт.",
        "nds" : "18",
        "price" : "290",
        "quantity" : "1"
        },
    "2" : {
        "id" : "2035",
        "name" : "шапка муж 2035 MIDNIGHT",
        "UnitName" : "шт.",
        "nds" : "18",
        "price" : "790",
        "quantity" : "1"
        },
    "3" : {
        "id" : "4000",
        "name" : "Кошелек Mano 20100 SETRU dark blue, Размер: 2.5 * 10 * 18.5 см, цвет: темно-синий",
        "UnitName" : "шт.",
        "nds" : "18",
        "price" : "3661",
        "quantity" : "1"
        }
    },
"weights" : {
    "weight" : 0.466,
    "barcode" : "",
    "weight2" : "0",
    "barcode2" : "",
    "weight3" : "0",
    "barcode3" : "",
    "weight4" : "0",
    "barcode4" : "",
    "weight5" : "0",
    "barcode5" : ""
    }
}
10 Sserj
 
09.08.17
13:06
(9) Ну сразу в глаза бросается - массивы не фигруными скобками а квадратными обрамляются.
11 Владимир1С
 
09.08.17
13:08
(10) : расшифровка, присланная поддержкой Боксберри:
Регина Галимова
http://prntscr.com/g5tb9w

Образец массива на PHP:

$SDATA=array();
$SDATA['updateByTrack']='Трекинг-код ранее созданной посылки';
$SDATA['order_id']='ID заказа в ИМ';
$SDATA['PalletNumber']='Номер палеты';
$SDATA['barcode']='Штрих-код заказа';
$SDATA['price']='Объявленная стоимость';
$SDATA['payment_sum']='Сумма к оплате';
$SDATA['delivery_sum']='Стоимость доставки';
$SDATA['vid']='Тип доставки (1/2)';
$SDATA['weights']=array(
                    'weight'=>'Вес 1-ого места',
                    'barcode'=>'Баркод 1-го места',
                    'weight2'=>'Вес 2-ого места',
                    'barcode2'=>'Баркод 2-го места',
                    'weight3'=>'Вес 3-его места',
                    'barcode3'=>'Баркод 3-го места',
                    'weight4'=>'Вес 4-ого места',
                    'barcode4'=>'Баркод 4-го места',
                    'weight5'=>'Вес 5-ого места',
                    'barcode5'=>'Баркод 5-го места'
                );

В JSON будет иметь вид:

{

"updateByTrack":"Трекинг-код ранее созданной посылки",
"order_id":"ID заказа в ИМ",
"PalletNumber":"Номер палеты",
"barcode":"Штрих-код заказа",
"price":"Объявленная стоимость",
"payment_sum":"Сумма к оплате",
"delivery_sum':'Стоимость доставки",
"vid":"Тип доставки (1/2)",
"weights":{
    "weight":"Вес 1-ого места",
    "barcode":"Баркод 1-го места",
    "weight2":"Вес 2-ого места",
    "barcode2":"Баркод 2-го места",
    "weight3":"Вес 3-его места",
    "barcode3":"Баркод 3-го места",
    "weight4":"Вес 4-ого места",
    "barcode4":"Баркод 4-го места",
    "weight5":"Вес 5-ого места",
    "barcode5":"Баркод 5-го места"
    }
}
12 Владимир1С
 
09.08.17
13:08
Скобки фигурные.
13 spock
 
09.08.17
13:09
(0) Учи JSON: http://jsoneditoronline.org/
14 Владимир1С
 
09.08.17
13:11
(10) - а как же тогда имена полей-элементов массива JSON ? Разве квадратные скобки предполагают наличие имён?
15 spock
 
09.08.17
13:18
Скорее всего должно быть так:
"weights":[
    {"weight":"Вес 1-ого места", "barcode":"Баркод 1-го места"},
    {"weight":"Вес 2-ого места", "barcode":"Баркод 2-го места"},
    {"weight":"Вес 3-его места", "barcode":"Баркод 3-го места"},
    {"weight":"Вес 4-ого места", "barcode":"Баркод 4-го места"},
    {"weight":"Вес 5-ого места", "barcode":"Баркод 5-го места"}
]
16 Sserj
 
09.08.17
13:18
(14) Да нет, но ты в 0 написал - передача массива массивов. Поэтому и ищу у тебя [].
А теперь уточняется что это не массивы а наборы объектов передаются.
17 Владимир1С
 
09.08.17
13:21
(15) С чего бы? Поддержка прислала
"weights":{
    "weight":"Вес 1-ого места",
    "barcode":"Баркод 1-го места",
    "weight2":"Вес 2-ого места",
    "barcode2":"Баркод 2-го места",
    "weight3":"Вес 3-его места",
    "barcode3":"Баркод 3-го места",
    "weight4":"Вес 4-ого места",
    "barcode4":"Баркод 4-го места",
    "weight5":"Вес 5-ого места",
    "barcode5":"Баркод 5-го места"
    }
18 Владимир1С
 
09.08.17
13:34
А как понимать вот это: ?
Регина Галимова
Добрый день
array(
     array(),
     array(),
     array(),
     array(),
     array(),
)

Эквивалент:

array(
     "0" => array(
                        'id'=>'Артикул товара в БД',
                        'name'=>'Наименование товара',
                        'UnitName'=>'Единица измерения',
                        'nds'=>'Процент НДС',
                        'price'=>'Цена товара',
                        'quantity'=>'Количество'
      ),
     "1" => array(
                        'id'=>'Артикул товара в БД',
                        'name'=>'Наименование товара',
                        'UnitName'=>'Единица измерения',
                        'nds'=>'Процент НДС',
                        'price'=>'Цена товара',
                        'quantity'=>'Количество'
      ),
     "2" => array(
                        'id'=>'Артикул товара в БД',
                        'name'=>'Наименование товара',
                        'UnitName'=>'Единица измерения',
                        'nds'=>'Процент НДС',
                        'price'=>'Цена товара',
                        'quantity'=>'Количество'
      ),
     "3" => array(
                        'id'=>'Артикул товара в БД',
                        'name'=>'Наименование товара',
                        'UnitName'=>'Единица измерения',
                        'nds'=>'Процент НДС',
                        'price'=>'Цена товара',
                        'quantity'=>'Количество'
     ),
     "4" => array(
                        'id'=>'Артикул товара в БД',
                        'name'=>'Наименование товара',
                        'UnitName'=>'Единица измерения',
                        'nds'=>'Процент НДС',
                        'price'=>'Цена товара',
                        'quantity'=>'Количество'
     ),
)
19 Владимир1С
 
09.08.17
13:35
По схеме  "items":{"0":{ .....},"1":{......}  }   ?
20 Владимир1С
 
09.08.17
13:37
Может быть, здесь есть кто нибудь, кто работал с JSON c Boxberry?
21 Numerus Mikhail
 
09.08.17
13:58
(20) Вообще странно тогда, ваш JSON выглядит вполне рабочим.
Да и парсеры его нормально съедают. Возможно вы просто не посылаете те поля, которые нужны другой стороне?
22 Владимир1С
 
09.08.17
14:07
(21) Так... Версию об отсутствии необходимых полей мы сейчас проверим.
23 v77
 
09.08.17
14:18
мож число в ковычки записать?

    "weight" : 0.466,
    "barcode" : "",
    "weight2" : "0",
    "barcode2" : "",
24 v77
 
09.08.17
14:20
а то чота половина в ковычках половина нет
25 Владимир1С
 
09.08.17
14:23
(24)В кавычках было всё. Ответ - с ошибкой.
26 Бубр
 
09.08.17
17:43
(18) ты бы для начала запрос  свой к серваку потестил   в строке браузера...  а дальше уже бы и код  написал
27 Бубр
 
09.08.17
17:44
(20)  к Wialon  подключался.
28 Бубр
 
09.08.17
17:46
(18) json  это  структуры  пар  ключ:значение
29 PLUT
 
09.08.17
17:48
(0) проверяй свой "жейсон" в отладчике браузера гугл хрома на валидность (кнопка F12), закладка Concole и копипаста твоего сформированного текста в 1С7.7
30 d4rkmesa
 
09.08.17
22:04
Может, вам стоит накидать в 8.3 "рыбу" обработки, формирующую валидный тестовый файл (заполнение через объект Записьjson много времени не займет) и сравнить с тем, что у вас получается в 7ке?
31 dmitryds
 
09.08.17
23:17
(0) попросите пример валидного файла...

мне кажется в items дело

items:[
{
        "id" : "8060",
        "name" : "варежки жен 8060 OCEAN",
        "UnitName" : "шт.",
        "nds" : "18",
        "price" : "290",
        "quantity" : "1"
        },
     {
        "id" : "2035",
        "name" : "шапка муж 2035 MIDNIGHT",
        "UnitName" : "шт.",
        "nds" : "18",
        "price" : "790",
        "quantity" : "1"
        },
     {
        "id" : "4000",
        "name" : "Кошелек Mano 20100 SETRU dark blue, Размер: 2.5 * 10 * 18.5 см, цвет: темно-синий",
        "UnitName" : "шт.",
        "nds" : "18",
        "price" : "3661",
        "quantity" : "1"
        }
]
32 dmitryds
 
09.08.17
23:23
+
weights - правильно, если именованный массив({"a":"1","b":"2"}), то только в {}, если обычный массив [0,1,2,3, {"2":3},{"f":"22"}]  тогда в []

еще стоит проверить, что бы в начале файла не было символов до {
33 Владимир1С
 
10.08.17
16:31
Разобрались.  
Надо было вот так:
    ТокенАвторизации="10000.rbpqbafb";
    Метод="ParselCreate";
    ДанныеЗаказаУТФ8=глСлужебныеСкрипты.Run("encodeURIComponent",ДанныеЗаказаJSON);
    
    ТелоЗапроса="token="+ТокенАвторизации+"&method="+Метод+"&sdata="+ДанныеЗаказаУТФ8;

    ВинХТТП=глПолучитьОбъектВинХТТП();
    
    ВинХТТП.Open("POST",АдресСкрипта,0);

    ВинХТТП.SetRequestHeader("Content-Language","ru");
    ВинХТТП.SetRequestHeader("Content-Charset","utf-8");
    ВинХТТП.SetRequestHeader("Content-Type","application/x-www-form-urlencoded");
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший