Имя: Пароль:
1C
1С v8
POST запрос из 1С
,
0 loken2
 
25.02.15
21:04
Подскажите как это сделать через пост запрос:

<?php
$data = array(
   'login' => 'client1', // логин (обязательное поле)
   'token' => 'hash.token', // код авторизации (обязательное поле)
   'comments_client' => 'comment к накл', //комментарий к накладной
   'punkt_id' => 'Moskovskaya-A16', // идентификатор ПВ (Moskovskaya-A16, Pionerskaya-K15k2)

   'orders' => array(
     // Заказ N2047 стоимостью 123р
     array(
       'sku' => '2047', //номер заказа (обязательное поле)
       'price' => 123, //сумма к оплате клиентом (обязательное поле)
       'buyer_phone' => '123-34-45', //тел. клиента
       'buyer_fio'   => 'Владимир Петров', //имя клиента
       'comment'     => 'comment1' //коммент к заказу
     ),
     array(
       'sku' => '2049',
       'price' => 1234,
       'payed' => 1, //признак, что заказ предоплачен
       'buyer_phone' => '123-56-89',
       'buyer_delivery_needed' => 1, // нужна доставка
       'buyer_address' => 'адрес', // адрес доставки
       'buyer_delivery_time' => 'пожелания к дате/времени доставки', // пожелания к дате/времени доставки
       'comment'     => 'comment1' //коммент к заказу
     ),
   )
);

$post_body = http_build_query($data);
echo $post_body;
1 loken2
 
25.02.15
21:05
как передать параметры  которые являются массивом?
2 DrZombi
 
гуру
25.02.15
21:07
Через XML
3 loken2
 
25.02.15
21:09
пример кода можно?
4 PR
 
25.02.15
21:11
5 DirecTwiX
 
25.02.15
21:13
Так посмотреть, как работает функция http_build_query() и оттуда уже плясать.

Пример #3. Пример использования http_build_query() с многомерными массивами...
http://php.net/manual/ru/function.http-build-query.php
6 loken2
 
25.02.15
21:40
так из 1С это как передать? )
7 PR
 
25.02.15
21:45
(6) А что, у тебя пост 27 в Отправка POST запроса к 1С враги вырезали?
8 loken2
 
25.02.15
22:04
похоже долго разбираться придется, нужно до Пн сделать, есть желающие помочь? по стоимости пишите в ICQ.
9 PR
 
25.02.15
22:11
(8) Фига се поворот событий.
10 loken2
 
25.02.15
22:16
просто нет у меня сейчас времени разбираться, сможешь помочь?
11 PR
 
25.02.15
23:37
(10) Хм. Ну хоккей. Давай попробуем. Стучись в скайп или напиши на почту.
12 loken2
 
26.02.15
06:41
если это простой параметр, то можно сделать так:
       WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
         WinHttp.Option(2,"utf-8");
         WinHttp.Open("POST","http://public.services.dellin.ru/tracker/XML/",0);
         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");
         ПараметрыПОСТ = "rwID=" + СокрЛП(НомерНакладной);
         WinHttp.Send(ПараметрыПОСТ);
         ТекстОтвета = WinHttp.ResponseText();
13 loken2
 
26.02.15
06:42
а если параметр массив?
14 magicSan
 
26.02.15
06:47
в пхп массив это строка
15 loken2
 
26.02.15
07:05
как передать блок "orders" - там массив из нескольких документов должен быть, как разделить разные документы?
16 loken2
 
26.02.15
07:26
как выглядит тело POST запроса:

login=client1&token=hash.token&comments_client=comment+%D0%BA+%D0%BD%D0%B0%D0%BA%D0%BB&punkt_id=Moskovskaya-A16&orders%5B0%5D%5Bsku%5D=2047&orders%5B0%5D%5Bprice%5D=123&orders%5B0%5D%5Bbuyer_phone%5D=123-34-45&orders%5B0%5D%5Bbuyer_fio%5D=%D0%92%D0%BB%D0%B0%D0%B4%D0%B8%D0%BC%D0%B8%D1%80+%D0%9F%D0%B5%D1%82%D1%80%D0%BE%D0%B2&orders%5B0%5D%5Bcomment%5D=comment1&orders%5B1%5D%5Bsku%5D=2049&orders%5B1%5D%5Bprice%5D=1234&orders%5B1%5D%5Bpayed%5D=1&orders%5B1%5D%5Bbuyer_phone%5D=123-56-89&orders%5B1%5D%5Bbuyer_delivery_needed%5D=1&orders%5B1%5D%5Bbuyer_address%5D=%D0%B0%D0%B4%D1%80%D0%B5%D1%81&orders%5B1%5D%5Bbuyer_delivery_time%5D=%D0%BF%D0%BE%D0%B6%D0%B5%D0%BB%D0%B0%D0%BD%D0%B8%D1%8F+%D0%BA+%D0%B4%D0%B0%D1%82%D0%B5%2F%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B8+%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8&orders%5B1%5D%5Bcomment%5D=comment1
17 loken2
 
26.02.15
07:59
если смотреть пример как должно выглядеть тело запроса, все заказы идут одной строкой

&orders%5B0%5D%5Bprice%5D=123 вопрос что это "%5B0%5D%5B" между orders и price для одного заказа оно одинаково, т.е. все заказы идут в строку с каким то разделителем между их параметрами
18 Мигрень
 
26.02.15
10:19
Боюсь, что параметр типа массив передать невозможно. Даже через XML, даже через SOAP. Во всяком случае два дня гугленья и изучение примеров на ИТС результата не дали. Остался одиноко висеть и мой вопрос на Мисте..

Создание Заказа покупателя через веб-сервис
19 loken2
 
26.02.15
11:16
структра через XML передается без проблем, у параметра вложенные параметры со своими значениями, так я уже делал обмен заказами с DPD, но тут немного по другому ...
20 Новиков
 
26.02.15
11:16
(17) >> вопрос что это "%5B0%5D%5B" между orders и price для одного заказа оно одинаково

Мде. В (12) ты сам установил:
>>WinHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");

А теперь так девственно. А "что это" (с).

Ну ладно. Переведу за тебя. Для всех твоих параметров, ты устанавливаешь тип x-www-form-urlencoded, при этом кодируешь их в кодировке utf-8. А т.к. у тебя массив, то сюрприз, надо ж как-то определить порядковый номер элемента массива. Как? --> "что это" (с).
21 loken2
 
26.02.15
11:19
(20) это не я, это был однин из примеров из инета )
22 loken2
 
26.02.15
11:19
я нев веб программист для меня это темный лес )
23 loken2
 
26.02.15
11:21
(20) так как правильно передать здесь элементы массива?
24 Новиков
 
26.02.15
11:38
(23) Создаешь обычный файл. Кодируешь строчку параметров ручками. Затем набираешь в синтакст-помошнике HTTPСоединение и долго и нудно читаешь пример по методу ОтправитьДляОбработки. Потом не забудь написать о результатах. Потомки, нагуглившие это поклонются тебе :)
25 loken2
 
26.02.15
11:58
(24) >Затем набираешь в синтакст-помошнике HTTPСоединение и долго и нудно читаешь пример по методу ОтправитьДляОбработки

да знаю я про это, вопрос был в том как правильно параметры массива передать
26 Новиков
 
26.02.15
12:07
(25) я надеюсь, я ответил как и ты понял ответ. Не так ли? :) Нет больше вопроса  "а что это?" (с) Или есть? :)))
27 loken2
 
26.02.15
12:14
(26) только не считай себя умником, так другие знают то о чем ты даже представления не имеешь))), я же сказал веб не моя область
28 Новиков
 
26.02.15
12:26
(27) кстати, отлично поблагодарил за единственный дельный совет в ветке. Пожалуйста, если что.
29 loken2
 
26.02.15
12:31
(28) за совет спасибо, но не зазнавайся ), но я как раз нехотел все кодировать ручками поэтому и возникла тема как передавть параметры массива, все остальное было и так ясно примеров полно.
30 Zyka
 
26.02.15
12:49
Хех...

ФайлОтправки = Новый ЗаписьТекста(ИмяФайлаОтправки);
        
ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");
    ФайлОтправки.ЗаписатьСтроку("content-disposition: form-data; name=""login""" + Символы.ВК + Символы.ПС);
ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");

ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");
    ФайлОтправки.ЗаписатьСтроку("content-disposition: form-data; name=""login""" + Символы.ВК + Символы.ПС);
    ФайлОтправки.ЗаписатьСтроку(login);
ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");

ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");
    ФайлОтправки.ЗаписатьСтроку("content-disposition: form-data; name=""token""" + Символы.ВК + Символы.ПС);
ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");

ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");
    ФайлОтправки.ЗаписатьСтроку("content-disposition: form-data; name=""token""" + Символы.ВК + Символы.ПС);
    ФайлОтправки.ЗаписатьСтроку(token);
ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");

ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");
    ФайлОтправки.ЗаписатьСтроку("content-disposition: form-data; name=""comments_client""" + Символы.ВК + Символы.ПС);
ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");

ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");
    ФайлОтправки.ЗаписатьСтроку("content-disposition: form-data; name=""comments_client""" + Символы.ВК + Символы.ПС);
    ФайлОтправки.ЗаписатьСтроку(comments_client);
ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");

ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");
    ФайлОтправки.ЗаписатьСтроку("content-disposition: form-data; name=""punkt_id""" + Символы.ВК + Символы.ПС);
ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");

ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");
    ФайлОтправки.ЗаписатьСтроку("content-disposition: form-data; name=""punkt_id""" + Символы.ВК + Символы.ПС);
    ФайлОтправки.ЗаписатьСтроку(punkt_id);
ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");
    
ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");
    ФайлОтправки.ЗаписатьСтроку("content-disposition: form-data; name=""orders[" + Строка(Индекс) + "][sku]""" + Символы.ВК + Символы.ПС);
    ФайлОтправки.ЗаписатьСтроку(Формат(Заказ.Номер, "ЧЦ=11"));
ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");

ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");
    ФайлОтправки.ЗаписатьСтроку("content-disposition: form-data; name=""orders[" + Строка(Индекс) + "][price]""" + Символы.ВК + Символы.ПС);
    ФайлОтправки.ЗаписатьСтроку(Формат(Заказ.Оплата, "ЧРД=.; ЧН=0; ЧГ=0"));
ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");

ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");
    ФайлОтправки.ЗаписатьСтроку("content-disposition: form-data; name=""orders[" + Строка(Индекс) + "][payed]""" + Символы.ВК + Символы.ПС);
    ФайлОтправки.ЗаписатьСтроку(Формат(Заказ.Предоплачен, "БЛ=0; БИ=1"));
ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");

ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");
    ФайлОтправки.ЗаписатьСтроку("content-disposition: form-data; name=""orders[" + Строка(Индекс) + "][buyer_phone]""" + Символы.ВК + Символы.ПС);
    ФайлОтправки.ЗаписатьСтроку(Заказ.Телефон);
ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");

ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");
    ФайлОтправки.ЗаписатьСтроку("content-disposition: form-data; name=""orders[" + Строка(Индекс) + "][buyer_fio]""" + Символы.ВК + Символы.ПС);
    ФайлОтправки.ЗаписатьСтроку(Заказ.КонтактноеЛицо);
ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");

ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");
    ФайлОтправки.ЗаписатьСтроку("content-disposition: form-data; name=""orders[" + Строка(Индекс) + "][comment]""" + Символы.ВК + Символы.ПС);
    ФайлОтправки.ЗаписатьСтроку(Заказ.ДополнительнаяИнформация);
ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");

ФайлОтправки.Закрыть();

ЗаголовокHTTP = Новый Соответствие();
ЗаголовокHTTP.Вставить("Content-Type", "multipart/form-data; boundary=My1cV8bNdr");

ИмяФайлаОтвета = ПолучитьИмяВременногоФайла();

Попытка
    Соединение.ОтправитьДляОбработки(ИмяФайлаОтправки, HTTPАдресСкрипта, ИмяФайлаОтвета, ЗаголовокHTTP);
Исключение
    Сообщить("Не удалось получить данные с сервера.Проверьте правильность адреса сервера,"
    + Символы.ПС + "а также настройки подключения к Интернет.");
    Возврат;
КонецПопытки;