Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.97/58: Рейтинг темы: голосов - 58, средняя оценка - 4.97
0 / 0 / 1
Регистрация: 22.01.2015
Сообщений: 37

Передача json массива POST методом на сервер

08.12.2015, 20:45. Показов 11197. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть сервис, на другом домене (не мой сайт), там по специально выданному url, можно отправлять массив json и получать ответ, произошла операция или нет. В документации указан только пример json массива и адрес куда его отправлять. Написал такой код

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
$cart = array(
  "orders" => array(
   "112233" => array(
      "ordertype" => 1,
      "ordernumber" => "LP750-22",
      "date_from" => "2015-12-08",
      "date_to" => "2015-12-08"
    )
   )
);
                                                                 
$json_str = json_encode($cart);                                                                                   
                                                                                                                     
$ch = curl_init('http://site.ru');                                                                      
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
    'Content-Type: application/json',                                                                                
    'Content-Length: ' . strlen($data_string))                                                                       
);  
 
$result = curl_exec($ch);
echo $result;
?>
Он формирует json из php массива, отправляет его на нужный адрес, и получает ответ с сервера.
Не могу понять в чем ошибка, наверное массив не доходит, но в ответе получаю такое
JSON
1
{"result":0,"error":"Array orders is null","get":[],"post":[]}
он говорит что массив orders пуст, но я же его вроде заполнял?

Помогите, в чем ошибка?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.12.2015, 20:45
Ответы с готовыми решениями:

Передача json данных методом POST через AJAX
нужно передать данные на сервер методом post передача на сервер req.open(&quot;POST&quot;, &quot;/controller/ajax.php&quot;) ...

Передача изображения на сервер методом POST
Прощу прощения за возможно глупый вопрос, но уже третий день бъюсь. Суть: Есть онлайн галерея с возможность загрузки изображений. ...

Передача массива методом GET / POST
Всем привет, у меня такой вопросик: как принять массив с формы которая родила такой ЮРЛ (...

21
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
08.12.2015, 21:18
Цитата Сообщение от Fetch13 Посмотреть сообщение
PHP
13
$json_str = json_encode($cart);
Цитата Сообщение от Fetch13 Посмотреть сообщение
PHP
17
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
$json_str != $data_string, вы не находите? Да и вообще, откуда она вдруг взялась, эта самая $data_string ?

Добавлено через 38 секунд

Не по теме:

вывод всех ошибок надо включать и быть внимательнее, чтобы избежать подобных ситуаций..

0
0 / 0 / 1
Регистрация: 22.01.2015
Сообщений: 37
08.12.2015, 21:28  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
$json_str != $data_string, вы не находите? Да и вообще, откуда она вдруг взялась, эта самая $data_string ?
да это я кода из кода копировал напутал, там конечно же нету этой $data_string, а отправляется $json_str.
вот так
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
$cart = array(
  "orders" => array(
   "112233" => array(
      "ordertype" => 1,
      "ordernumber" => "LP750-22",
      "date_from" => "2015-12-08",
      "date_to" => "2015-12-08"
    )
   )
);
                                                                 
$json_str = json_encode($cart);                                                                                   
                                                                                                                     
$ch = curl_init('http://site.ru');                                                                      
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_str);                                                                  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
    'Content-Type: application/json',                                                                                
    'Content-Length: ' . strlen($json_str))                                                                       
);  
 
$result = curl_exec($ch);
echo $result;
?>
но ошибка есть, точнее не ошибка, а сервер отвечает якобы я не отправил ему массив. вот где я ошибся?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
08.12.2015, 21:32
А так?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
$cart = array(
  "orders" => array(
   "112233" => array(
      "ordertype" => 1,
      "ordernumber" => "LP750-22",
      "date_from" => "2015-12-08",
      "date_to" => "2015-12-08"
    )
   )
);
                                                                 
$json_str = json_encode($cart);                                                                                   
                                                                                                                     
$ch = curl_init('http://site.ru');                                                                      
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_str);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Content-Length: ' . strlen($json_str))
);  
 
$result = curl_exec($ch);
echo $result;
?>
0
0 / 0 / 1
Регистрация: 22.01.2015
Сообщений: 37
08.12.2015, 21:54  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
А так?
JSON
1
{"result":0,"error":"Array orders is null","get":[],"post":[]}
тот же самый ответ ошибки
0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13440 / 7534 / 830
Регистрация: 09.09.2009
Сообщений: 29,554
08.12.2015, 21:59
по моему, у POST должно быть две вещи - имя параметра и его значение. В смысле, если на чистом html:
HTML5
1
<input name="Param_1" value="Value_1">
может вам нужно указать имя параметра, значение которого вы пытаетесь передать в запросе?
0
0 / 0 / 1
Регистрация: 22.01.2015
Сообщений: 37
08.12.2015, 22:02  [ТС]
Цитата Сообщение от Dmitry Посмотреть сообщение
может вам нужно указать имя параметра, значение которого вы пытаетесь передать в запросе?
а как и где его указать?
http://www.lornajane.net/posts... h-php-curl я отсюда брал пример, тут ничего не указывали
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
08.12.2015, 22:03
Dmitry, ну почему же, я ведь могу передать и массив.
HTML5
1
2
3
4
<input name="orders[112233][ordertype]" value="Value_1">
<input name="orders[112233][ordernumber]" value="LP750-22">
<input name="orders[112233][date_from]" value="2015-12-08">
<input name="orders[112233][date_to]" value="2015-12-08">
и получу как раз такой массив, как указан..
0
08.12.2015, 22:07

Не по теме:

Цитата Сообщение от KOPOJI Посмотреть сообщение
Dmitry, ну почему же, я ведь могу передать и массив.
я лишь предположил в объеме моих познаний...

0
0 / 0 / 1
Регистрация: 22.01.2015
Сообщений: 37
08.12.2015, 22:08  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
Dmitry, ну почему же, я ведь могу передать и массив.
вы не знаете в чем может быть ошибка? со стороны сервера все правильно, это популярный сервис, а вот с моей стороны не знаю. нужно как то отправить туда json массив, нашел только такой способ как у меня, но отвечает что массив пуст. кстати если даже не отправлять массив orders, то ответ будет такой же. то есть он вообще его не видит. если просто в браузере перейти по ссылке, куда должен отправлятся массив, будет такой же ответ
JSON
1
{"result":0,"error":"Array orders is null","get":[],"post":[]}
0
Эксперт PHP
 Аватар для Fedor Vlasenko
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
08.12.2015, 22:10
Цитата Сообщение от Fetch13 Посмотреть сообщение
В документации указан только пример json массива и адрес куда его отправлять
ссылку в студию. Может там объект и он GETотправляется. А curl запросы запрещены совсем
0
0 / 0 / 1
Регистрация: 22.01.2015
Сообщений: 37
08.12.2015, 22:20  [ТС]
Цитата Сообщение от Poznakomlus Посмотреть сообщение
ссылку в студию. Может там объект и он GETотправляется. А curl запросы запрещены совсем
http://my-files.ru/ymslxv ссылка на документ, там пишут что POST
0
Эксперт PHP
 Аватар для Fedor Vlasenko
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
08.12.2015, 22:38
Цитата Сообщение от Fetch13 Посмотреть сообщение
там пишут что POST
PHP
1
2
3
4
5
6
7
8
9
10
11
12
$cart = array(
    "orders" => array(
        "order_id" => array(
            "ordertype" => 1,
            "ordernumber" => "LP750-22",
            "date_from" => "2015-12-08",
            "date_to" => "2015-12-08"
        )
    )
);
 
echo json_encode($cart);
0
0 / 0 / 1
Регистрация: 22.01.2015
Сообщений: 37
08.12.2015, 22:39  [ТС]
Цитата Сообщение от Poznakomlus Посмотреть сообщение
в примере указан совсем не массив, а объект/ Можете им об этом написать. Пусть правят свою горе документацию. А вам положен бонус за указание ошибки.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$res = new stdClass();
$res->orders = new  stdClass();
$res->orders->ordertype = 10;
$res->orders->ordernumber = 20;
$json_str = json_encode($res);                                         
                                                                                                                   
$ch = curl_init('http://site.ru');                                                                      
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_str);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Content-Length: ' . strlen($json_str))
);  
 
$result = curl_exec($ch);
echo $result;
?>
сделал так, отвечает тоже самое
JSON
1
{"result":0,"error":"Array orders is null","get":[],"post":[]}
0
Эксперт PHP
 Аватар для Fedor Vlasenko
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
08.12.2015, 22:41
Гляньте выше я поправил сообщение
0
0 / 0 / 1
Регистрация: 22.01.2015
Сообщений: 37
08.12.2015, 22:45  [ТС]
Цитата Сообщение от Poznakomlus Посмотреть сообщение
Гляньте выше я поправил сообщение
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
$cart = array(
    "orders" => array(
        "order_id" => array(
            "ordertype" => 1,
            "ordernumber" => "LP750-22",
            "date_from" => "2015-12-08",
            "date_to" => "2015-12-08"
        )
    )
);
 
$json_str = json_encode($cart);                                                                                                                                                             
$ch = curl_init('http://site.ru');                                                                      
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_str);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Content-Length: ' . strlen($json_str))
);  
 
$result = curl_exec($ch);
echo $result;
?>
так сделал, в итоге ничего не изменилось
0
Эксперт PHP
 Аватар для Fedor Vlasenko
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
08.12.2015, 22:48
Цитата Сообщение от Fetch13 Посмотреть сообщение
так сделал, в итоге ничего не изменилось
у них в доках больше полей, вы все передаете ?
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
{
"orders":{
order_id:{          *   // идентификатор заявки заказчика       varchar 
"ordertype",        *   // id тип услуги               int
"ordernumber",      *   // номер заявки                  varchar(20)
"ordernumberclient",        // номер заявки   заказчика         varchar(20)
"date_from",        *   // дата получения у отправителя        date(Y-m-d)
"time1_from",       *   // время “от” получения у отправителя       time(H:i)
"time2_from",       *   // время “до” получения у отправителя   time(H:i)
"date_to",      *   // дата доставки получателю           date(Y-m-d)
"time1_to",         // время “от” доставки получателю      time(H:i)
"time2_to",         // время “до” доставки получателю      time(H:i)
"value",            // объемный, м3                    float
"weight",       *   // вес, кг                 float
"pieces",           // количество мест                int
"comment",          // комментарий                   varchar
"order_barcode",        // значение баркода              varchar
"appraised_value",      // оценочная стоимость                float
"COD_amount",           // сумма наложенного платежа         float
"cityfrom",         // id города отправителя           int
"streetfrom",           // улица отправителя                varchar
"buildingfrom",         // дом   отправителя              varchar
"roomfrom",         // кв/офис/дом отправителя          varchar
"latfrom",          // координата lat адреса отправителя     float
"lngfrom",          // координата lng адреса отправителя     float
"clientnamefrom",   *   // Название отправителя          varchar
"clientcontactfrom",    *   // Контактное лицо                varchar
"clientphonefrom",      // Телефон отправителя                int
"pickuppointfrom",      // id пункта самовывоза отправления      int
"clientphonefrom",      // Телефон отправителя                int
"cityto",           // id города получателя         int
"streetto",         // улица получателя              varchar
"buildingto",           // дом   получателя                varchar
"roomto",           // кв/офис/дом получателя            varchar
"latto",            // координата lat адреса получателя       float
"lngto",            // координата lng адреса получателя       float
"clientnameto",     *   // название получателя                varchar
"clientcontactto",  *   // контактное лицо получателя           varchar
"clientphoneto",    *   // телефон получателя              int
"pickuppointto" *       // id пункта самовывоза получателя        int
}
}
0
0 / 0 / 1
Регистрация: 22.01.2015
Сообщений: 37
08.12.2015, 22:49  [ТС]
Цитата Сообщение от Poznakomlus Посмотреть сообщение
у них в доках больше полей, вы все передаете ?
не все, а это влияет? там в документации есть пример правильного ответа с сервера и написано, если в каких то полях будет ошибка, или их не достаточно, то вернет ответ с описанием ошибок для полей. а он возвращает что вообще нету массива
0
Эксперт PHP
 Аватар для Fedor Vlasenko
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
08.12.2015, 22:51
ради теста можно и все отправить
0
0 / 0 / 1
Регистрация: 22.01.2015
Сообщений: 37
08.12.2015, 23:04  [ТС]
Цитата Сообщение от Poznakomlus Посмотреть сообщение
ради теста можно и все отправить
отправил, тот же ответ. отправил вообще пустой массив для проверки, тоже такой же ответ. вообще ничего не отправлял. во всех случаях ответ тот же. мне кажется что он вообще не доходит до сервера. только так можно отправить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.12.2015, 23:04
Помогаю со студенческими работами здесь

Передача массива методом POST (foreach)
Ребят что та не могу понять передаю вот такую информацию в массиве: &lt;? $arr = array(&quot;icq&quot;, &quot;skype&quot;, &quot;1С...

Передача массива POST-методом в PHP-файл
Здравствуйте! У меня есть массив данных и я его хочу записать в файл. Я делал так, mass= ; // какой то массив mass2 =...

Отправить JSON методом POST
Нужно отправить JSON методом POST на удаленный сервер. Как правильно сделать? Получаю массив с формы: $user = array( ...

Передача переменной методом POST
Подскажите пожалуйста, как получить значение переменной на странице bat.php. : session_start(); if(!$_SESSION) { header...

Передача данных методом POST
Приветствую!! Есть две обычные формы, В первой есть текстовое поле: &lt;form action=&quot;1.php method=&quot;post&quot;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru