Имя: Пароль:
1C
1С v8
Как передать структуру в post запросе?
0 Law_Of_Evi1
 
28.06.17
07:43
Используя вебхук на bitrix24 получаю элементы справочника.
Пример на php :
var params = {
        'IBLOCK_TYPE_ID': 'bitrix_processes',
        'IBLOCK_ID': 'rest_1'
    };
    BX24.callMethod(
        'lists.element.get',
        params,
        function(result)
        {
            if(result.error())
                alert("Error: " + result.error());
            else
                console.log(result.data());
        }
    );

В 1с делаю следующим образом:

ПараметрыПОСТ = "IBLOCK_TYPE_ID=bitrix_processes&IBLOCK_ID="+ИдСправочника; //

WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
        WinHttp.Option(2,"utf-8");
        WinHttp.Open("POST",urlHook, Ложь);
        WinHttp.SetRequestHeader("Accept-Language", "ru");
        WinHttp.SetRequestHeader("Accept-Charset","utf-8");
        WinHttp.setRequestHeader("Content-Language", "ru");
        WinHttp.setRequestHeader("Content-Charset", "utf-8");
        WinHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");//application/x-www-form-urlencoded; charset=utf-8
        WinHttp.Send(ПараметрыПОСТ);//ПараметрыПОСТ
        ТекстОтветаJSON = WinHttp.ResponseText();

Отрабатывает все корректно, но для добавления элемента справочника (другая функция) нужно в "ПараметрыПОСТ" Передать следующие данные:

var params = {
        'IBLOCK_TYPE_ID': 'bitrix_processes',
        'IBLOCK_CODE': 'rest_1',
        'ELEMENT_CODE': 'element_1',
        'FIELDS': {
            'NAME': 'Test element'            
        }
    };

Есть идеи как передать структуру FIELDS  в параметры пост?
Пробовал передавать через запятую, в скобках, в фигурных и т.п., но в ответ получаю лишь Status 400 и {"error":"error_save_element","error_description":"Не введено название.\u003cbr\u003e"}
1 Имитация работы
 
28.06.17
07:47
О, в php реализовали alert, клёво!
2 Law_Of_Evi1
 
28.06.17
07:59
На JS
3 Имитация работы
 
28.06.17
08:25
Fiddler что говорит про успешную передачу по помощи js?
4 Law_Of_Evi1
 
28.06.17
10:00
ОТВЕТ:
Для передачи подобной структуры:

ПараметрыВСтруктуре = Новый Структура("IBLOCK_TYPE_ID, IBLOCK_ID, ELEMENT_CODE, FIELDS", "bitrix_processes", "276", "102903", новый Структура("NAME", "Test name element"));

, которая имеет вложенную, накидал функцию, которая преобразует ее в строку нужного формата.

Функция ПреобразоватьСтруктураПараметровВСтроку(Знач ПараметрыСтруктурой);
    ПараметрыСТрокой = "";
    Для Каждого Стр Из ПараметрыСтруктурой Цикл
        Если ТипЗнч(Стр.Значение) = Тип("Структура") Тогда
            Для Каждого СтрПодчиненное Из Стр.Значение Цикл
                ПараметрыСТрокой = ПараметрыСТрокой+"&"+Стр.Ключ+"%5B"+СтрПодчиненное.Ключ+"%5D"+"="+СтрЗаменить(СтрПодчиненное.Значение," ","+");
            КонецЦикла;                  
        Иначе
            ПараметрыСТрокой = ПараметрыСТрокой+"&"+Стр.Ключ+"="+СтрЗаменить(Стр.Значение," ","+");
        КонецЕсли;
        
    КонецЦикла;
    Возврат ПараметрыСТрокой;    
КонецФункции
5 Имитация работы
 
28.06.17
10:29
Вместо безумства, которое после Стр.Ключ+"=" передай просто значение, прикрытое урленкодом, который КодироватьСтроку со способом URLEncoding. Вместе со скобками {} которые у тебя %5B, и %5D. И пробелы там без тебя заменят.

Иначе зачем ты contenttype указывал?
6 Имитация работы
 
28.06.17
10:30
со скобками []
сбил ты меня своим js