Имя: Пароль:
1C
1С v8
1C и отправка POST запроса с JSON на сайт
0 VarIzo
 
02.12.16
14:09
Доброго всем дня. Не могу разобраться с отправкой 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) {
}
Что я не так делаю?
1 Glenas
 
02.12.16
14:16
(0) https?
Соединение = Новый HTTPСоединение(ИмяСайта);
2 Живой Ископаемый
 
02.12.16
14:16
а почему понял что делаешь не так?
3 VarIzo
 
02.12.16
14:18
Ну я ожидал на var_dump($_POST); увидеть мою строку json которая
4 Живой Ископаемый
 
02.12.16
14:19
с чего бы?
5 VarIzo
 
02.12.16
14:19
Подкинул все это дело в socketTest. Строка уходит. Непонятно
6 Живой Ископаемый
 
02.12.16
14:20
Серверный код в курсе твоих ожиданий?
Если выполнить тот же код только  помощью утилиты curl - строка возвращается?
7 VarIzo
 
02.12.16
14:20
Живой - а почему нет? ОтправитьДляОбработки - Отправляет данные на указанный адрес для обработки при помощи HTTP-запроса POST. Может я не так понял помощника
8 VarIzo
 
02.12.16
14:21
"Серверный код в курсе твоих ожиданий?" - скрипт к которому я обращаюсь разве не получает данные $_POST?
9 Живой Ископаемый
 
02.12.16
14:24
2(8) Капец, Получает и возвращает тебе ответом - 200.
Что не так?
10 Живой Ископаемый
 
02.12.16
14:25
var_dump($_POST); - это кусок серверного кода? чтото типа Сообщить()?
Я думал это клиентский скрипт
11 Mauser
 
02.12.16
14:25
>HTTPЗапрос.Заголовки.Вставить("Content-type", "application/json");
...
>var_dump($_POST);

Это с какой версии php так может?
12 VarIzo
 
02.12.16
14:26
Живой будь человек поясни по-русски, 3 года здороваться при встрече буду. Никогда раньше 1с с сайтом не дружил, а тут понадобилось. Нужно строчку в php скрипт передать чтоб он ее клятую обработал. Чего не так я делаю?
13 Живой Ископаемый
 
02.12.16
14:26
То есть я правильно понял - ты хочешь чтобы на 1Сном форуме тебе помогли серверный пхп-код отладить?
14 Живой Ископаемый
 
02.12.16
14:27
в 1С ты все так делаешь. Наверное.
По крайне мере до того, пока не доказано обратное.
Докажи что код 1С лажает.
15 VarIzo
 
02.12.16
14:30
Да чего там отлаживать то? Он простой как автомат калашникова. Дерни его сейчас аяксом любым он тебе вернет то что ты ему отправишь. Тут видимо Mauser прав - не то я в заголовке пишу
16 Mauser
 
02.12.16
14:32
(15) Ты вообще с чего взял, что $_POST будет тебе JSON разбирать?
17 VarIzo
 
02.12.16
14:34
В пост я ожидал увидеть данные которые я передал. JSOn это просто для примера. Да хоть слово "Х*Й" туда передай
18 Mauser
 
02.12.16
14:36
(17) Передай туда файл ёкселя и негодуй что он не показывает тебе вложенные картинки, чо.
19 VarIzo
 
02.12.16
14:44
Пока что как решил:
Во первых не application/json а x-www-form-urlencoded
Во вторых в скрипте не $_POST а $HTTP_RAW_POST_DATA. Хотя решение мне это не нравиться
20 DTX 4th
 
02.12.16
14:44
Попробуй php://input

private function retrieveJsonPostData()
  {
    // get the raw POST data
    $rawData = file_get_contents("php://input");

    // this returns null if not valid json
    return json_decode($rawData);
  }


http://php.net/manual/ru/wrappers.php.php
http://stackoverflow.com/questions/8893574/php-php-input-vs-post
21 Fragster
 
гуру
02.12.16
14:44
анализируй php:input
22 Fragster
 
гуру
02.12.16
14:45
(20) опередил :)
23 Fragster
 
гуру
02.12.16
14:45
вот тут пример http://catalog.mista.ru/public/348215/
24 Fragster
 
гуру
02.12.16
14:46
(23)+ при незначительных изменениях преобразуется под любой прокси, например для обеспечения cross-domail ajax вызова 1ски, когда запрос options должен идти без авторизации, а остальное - с ней
25 VarIzo
 
02.12.16
14:47
(20) пусто. Совсем ничего
26 VarIzo
 
02.12.16
14:57
Проблема решена
27 DTX 4th
 
02.12.16
14:58
Что в итоге было не так?

Вот тут есть пример с реализацией на 1С и PHP:
https://linemedia.atlassian.net/wiki/pages/viewpage.action?pageId=17170467
Мб пригодится кому.
28 VarIzo
 
02.12.16
14:59
Сейчас напишу
29 VarIzo
 
02.12.16
15:03
Вообщем проблемы как таковой не было - было просто незнание и непонимание HTTP заголовков.
Для начала не
HTTPЗапрос.Заголовки.Вставить("Content-type", "application/json");

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

Во вторых не
HTTPЗапрос.УстановитьТелоИзСтроки(strJSON,
А
HTTPЗапрос.УстановитьТелоИзСтроки("motherFuckerData="strJSON,
30 Mauser
 
02.12.16
16:16
(29) Это непонимание не заголовков, а http протокола вообще.

В mime типе "application/x-www-form-urlencoded" буквочки "encoded" не просто так стоят.
31 Fragster
 
гуру
02.12.16
17:00
(29) ты решил не ту задачу