Отправка и получение данных с сайта (xml.adeo.pro)

1. binom-a 07.08.17 11:37 Сейчас в теме
День добрый.

Есть сайт xml.adeo.pro
По сайту есть документация, в т.ч. описан пример запроса данных на php

?php
$xml='<?xml version="1.0" encoding="UTF-8" ?>
<message>
<param>
<action>priceBatch</action>
<login>mylogin</login>
<password>maypassword</password>
<dayLimit>5</dayLimit>
</param>
<items>
<pn>34216775287</pn>

BMW</brand>
</items>
<items>
<pn>288909U100</pn>

NISSAN</brand>
</items>
<items>
</message>
';
$data = array('xml' => $xml);
$address="http://xml.adeo.pro";
$ch = curl_init($address);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$result=curl_exec($ch);
echo $result;
?>
Показать


Пытаюсь преобразовать и получить данные в 1С, процедуры в 1С такие:

Процедура КнопкаСформироватьНажатие(Кнопка)
	Структура = ПолучитьСтруктуруПараметров();
	ОтправитьPOSTНаСервер(Структура);

	ИмяФайла = Структура.ИмяФайлаПолучения;
	Чтение = новый ЧтениеТекста(ИмяФайла);

	Стр = Чтение.ПрочитатьСтроку();

	Пока Стр <> Неопределено Цикл
		Сообщить(Стр);
		Стр = Чтение.ПрочитатьСтроку();
	КонецЦикла;
	Чтение.Закрыть();
КонецПроцедуры

Функция ПолучитьСтруктуруПараметров();
	СтруктураПараметров = Новый Структура();
	
	ИмяФайлаОтправки =   ПолучитьИмяВременногоФайла("txt");
	ИмяФайлаПолучения =   ПолучитьИмяВременногоФайла("txt");

	
	СтруктураПараметров.Вставить("ИмяФайлаОтправки", ИмяФайлаОтправки);
	СтруктураПараметров.Вставить("ИмяФайлаПолучения",ИмяФайлаПолучения);

	ПараметрыСкрипта = Новый ТаблицаЗначений();
	ПараметрыСкрипта.Колонки.Добавить("Наименование");
	ПараметрыСкрипта.Колонки.Добавить("Значение");

	НовСтрока = ПараметрыСкрипта.Добавить();
	НовСтрока.Наименование = "action";
	НовСтрока.Значение = "price";

	НовСтрока = ПараметрыСкрипта.Добавить();
	НовСтрока.Наименование = "login";
	НовСтрока.Значение = СокрЛП(Логин);

	
	НовСтрока = ПараметрыСкрипта.Добавить();
	НовСтрока.Наименование = "password";
	НовСтрока.Значение = СокрЛП(Пароль);

	НовСтрока = ПараметрыСкрипта.Добавить();
	НовСтрока.Наименование = "code";
	НовСтрока.Значение = СокрЛП(КодДетали);
	
	СтруктураПараметров.Вставить("ПараметрыСкрипта",ПараметрыСкрипта);
	СтруктураПараметров.Вставить("Сервер","xml.adeo.pro");
	СтруктураПараметров.Вставить("СкриптПриема","pricedetals2.php");
	Возврат СтруктураПараметров;
КонецФункции

Функция ОтправитьPOSTНаСервер(СтруктураПараметров) Экспорт
	ИмяФайлаОтправки = СтруктураПараметров.ИмяФайлаОтправки;
	ИмяФайлаПолучения = СтруктураПараметров.ИмяФайлаПолучения;
	ЗаголовокHTTP = Новый Соответствие();
	//ЗаголовокHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded");
	ЗаголовокHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded" + Символы.ВК + Символы.ПС + "charset:UTF-8");
	ФайлОтправки = Новый ЗаписьТекста(ИмяФайлаОтправки, КодировкаТекста.ANSI, Символы.ПС, ЛОЖЬ);
	СтрокаПараметров="";
	Для каждого Строка из СтруктураПараметров.ПараметрыСкрипта Цикл
		СтрокаПараметров = СтрокаПараметров+Строка.Наименование+ "=" + Строка.Значение+"&";
	КонецЦикла;
	Если Прав(СтрокаПараметров,1)="&" Тогда
		СтрокаПараметров = Сред(СтрокаПараметров,1,СтрДлина(СтрокаПараметров)-1);
	КонецЕсли;
	
	ФайлОтправки.Записать(СтрокаПараметров);
	ФайлОтправки.Закрыть();
	ФайлОтправки = Новый Файл(ИмяФайлаОтправки);
	
	РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
	ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);

	//НТТР = Новый HTTPСоединение(СтруктураПараметров.Сервер,,СокрЛП(Логин),СокрЛП(Пароль),,,);
	НТТР = Новый HTTPСоединение(СтруктураПараметров.Сервер,,,,,,);
	НТТР.ОтправитьДляОбработки(ИмяФайлаОтправки,СтруктураПараметров.СкриптПриема,ИмяФайлаПолучения,ЗаголовокHTTP);
КонецФункции
Показать


На вход подается временный тектовый файл вида:
action=price&login=ЛОГИН&password=ПАРОЛЬ&code=2630035503

На выходе получаю пустой файл, при этом ошибок вроде как нет.
Не понимаю, где делаю не так?
+
Найденные решения
4. binom-a 07.08.17 13:16 Сейчас в теме
Вот корректная функция, с которой сработало:

Функция ОтправитьPOSTНаСервер(СтруктураПараметров) Экспорт
	ИмяФайлаОтправки = СтруктураПараметров.ИмяФайлаОтправки;
	ИмяФайлаПолучения = СтруктураПараметров.ИмяФайлаПолучения;
	ЗаголовокHTTP = Новый Соответствие();
	ЗаголовокHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded" + Символы.ВК + Символы.ПС + "charset:UTF-8");
	
	Файл = Новый ЗаписьXML; 
	Файл.ОткрытьФайл(ИмяФайлаОтправки);
	Файл.ЗаписатьНачалоЭлемента("message");
		Файл.ЗаписатьНачалоЭлемента("param");
			Файл.ЗаписатьНачалоЭлемента("action");
				Файл.ЗаписатьТекст("price");
			Файл.ЗаписатьКонецЭлемента();
			Файл.ЗаписатьНачалоЭлемента("login");
				Файл.ЗаписатьТекст(СокрЛП(Логин));
			Файл.ЗаписатьКонецЭлемента();
			Файл.ЗаписатьНачалоЭлемента("password");
				Файл.ЗаписатьТекст(СокрЛП(Пароль));
			Файл.ЗаписатьКонецЭлемента();
			Файл.ЗаписатьНачалоЭлемента("code");
				Файл.ЗаписатьТекст(СокрЛП(КодДетали));
			Файл.ЗаписатьКонецЭлемента();
		Файл.ЗаписатьКонецЭлемента();
	Файл.ЗаписатьКонецЭлемента();
	Файл.Закрыть();		

	
	
	
	ФайлОтправки = Новый Файл(ИмяФайлаОтправки);
	
	РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
	ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);

	//НТТР = Новый HTTPСоединение(СтруктураПараметров.Сервер,,СокрЛП(Логин),СокрЛП(Пароль),,,);
	НТТР = Новый HTTPСоединение(СтруктураПараметров.Сервер,,,,,,);
	НТТР.ОтправитьДляОбработки(ИмяФайлаОтправки,СтруктураПараметров.СкриптПриема,ИмяФайлаПолучения,ЗаголовокHTTP);
КонецФункции
Показать
+
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. japopov 68 07.08.17 11:54 Сейчас в теме
А сайт принимает запросы по HTTP или по HTTPS? Возможно, нужно устанавливать защищенное соединение?
+
3. binom-a 07.08.17 12:55 Сейчас в теме
Разобрался. Там где файл запроса отправляю на сайт - переделал в файл xml - и все заработало.
+
4. binom-a 07.08.17 13:16 Сейчас в теме
Вот корректная функция, с которой сработало:

Функция ОтправитьPOSTНаСервер(СтруктураПараметров) Экспорт
	ИмяФайлаОтправки = СтруктураПараметров.ИмяФайлаОтправки;
	ИмяФайлаПолучения = СтруктураПараметров.ИмяФайлаПолучения;
	ЗаголовокHTTP = Новый Соответствие();
	ЗаголовокHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded" + Символы.ВК + Символы.ПС + "charset:UTF-8");
	
	Файл = Новый ЗаписьXML; 
	Файл.ОткрытьФайл(ИмяФайлаОтправки);
	Файл.ЗаписатьНачалоЭлемента("message");
		Файл.ЗаписатьНачалоЭлемента("param");
			Файл.ЗаписатьНачалоЭлемента("action");
				Файл.ЗаписатьТекст("price");
			Файл.ЗаписатьКонецЭлемента();
			Файл.ЗаписатьНачалоЭлемента("login");
				Файл.ЗаписатьТекст(СокрЛП(Логин));
			Файл.ЗаписатьКонецЭлемента();
			Файл.ЗаписатьНачалоЭлемента("password");
				Файл.ЗаписатьТекст(СокрЛП(Пароль));
			Файл.ЗаписатьКонецЭлемента();
			Файл.ЗаписатьНачалоЭлемента("code");
				Файл.ЗаписатьТекст(СокрЛП(КодДетали));
			Файл.ЗаписатьКонецЭлемента();
		Файл.ЗаписатьКонецЭлемента();
	Файл.ЗаписатьКонецЭлемента();
	Файл.Закрыть();		

	
	
	
	ФайлОтправки = Новый Файл(ИмяФайлаОтправки);
	
	РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
	ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);

	//НТТР = Новый HTTPСоединение(СтруктураПараметров.Сервер,,СокрЛП(Логин),СокрЛП(Пароль),,,);
	НТТР = Новый HTTPСоединение(СтруктураПараметров.Сервер,,,,,,);
	НТТР.ОтправитьДляОбработки(ИмяФайлаОтправки,СтруктураПараметров.СкриптПриема,ИмяФайлаПолучения,ЗаголовокHTTP);
КонецФункции
Показать
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот