Задать вопрос

Как из 1C сделать POST запрос к скрипту на сайте с передачей JSON данных?

Доброго всем дня. Не могу разобраться с отправкой POST запроса скрипту на сайте данных в формате json из 1С.

В php скрипте просто
var_dump($_POST);
var_dump($_GET);

В 1с
тЗаписьJSON = Новый ЗаписьJSON;
    тПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, " ", Истина);  
    тЗаписьJSON.УстановитьСтроку(тПараметрыJSON);   
    массивЧегото    = Новый Массив; 
    сЗаказы         = Новый Структура;  
    тДанные = Новый Структура;
    тДанные.Вставить("ЧислоJSON", 100);
    тДанные.Вставить("СтрокаJSON", "test");
    массивЧегото.Добавить(тДанные); 
    тДанные = Новый Структура;
    тДанные.Вставить("ЧислоJSON", 101);
    тДанные.Вставить("СтрокаJSON", "test1");
    массивЧегото.Добавить(тДанные); 
    сЗаказы.Вставить("xxx", массивЧегото);
    ЗаписатьJSON(тЗаписьJSON, сЗаказы);
    strJSON = тЗаписьJSON.Закрыть();

    Соединение = Новый HTTPСоединение(ИмяСайта);
    HTTPЗапрос = Новый HTTPЗапрос(ИмяСкрипта); 
    HTTPЗапрос.Заголовки.Вставить("Content-type", "application/json");
    HTTPЗапрос.УстановитьТелоИзСтроки(strJSON,КодировкаТекста.UTF8,ИспользованиеByteOrderMark.НеИспользовать);
    ИмяФайлаОтвета = ПолучитьИмяВременногоФайла("txt"); 
    Соединение.ОтправитьДляОбработки(HTTPЗапрос, ИмяФайлаОтвета);   
    ФайлОтвета = Новый Файл(ИмяФайлаОтвета);

На выходе в файле ответа имею
array(0) {
}
array(0) {
}

Что я не так делаю?
  • Вопрос задан
  • 11281 просмотр
Подписаться 1 Оценить Комментировать
Решения вопроса 2
@Dementor
программист, архитектор, аналитик
А вы что ожидали увидеть? Все правильно - согласно листингу вы в ваш скрипт не передали ни единой переменной ни методом GET, ни методом POST.

Подсказка. Тело запроса <> передача параметров методом POST. Параметр - это как минимум название, а у вас только содержимое.

Или оформите правильно содержимое в переменной strJSON (если лень читать RFC, то подсмотрите правильную структуру снифером), или берите в вашем скрипте PHP полностью содержимое запроса ($HTTP_RAW_POST_DATA) - это и будет ваш JSON.
Ответ написан
izoldin
@izoldin Автор вопроса
Вообщем проблемы как таковой не было - было просто незнание и непонимание HTTP заголовков.
Для начала не
HTTPЗапрос.Заголовки.Вставить("Content-type", "application/json");

А
HTTPЗапрос.Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded;charset=utf-8");

Во вторых не
HTTPЗапрос.УстановитьТелоИзСтроки(strJSON,
А
HTTPЗапрос.УстановитьТелоИзСтроки("motherFuckerData="strJSON,
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
mobilz
@mobilz
На самом деле всё вы верно делаете, кроме var_dump($_POST);
когда вы шлёте через application/json, запрос придёт в echo file_get_contents('php://input');
как, в общем, и написал Дмитрий Кинаш
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы