Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) 1c 7.7. и обмен с 1с битрикс (число прочтений - 20279 )
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
1c 7.7. и обмен с 1с битрикс
19. Апреля 2013 :: 12:02
Печать  
Хотел узнать, кто нить решал задачу http запросов к битриксу?
Проблема пока авторизации в v7plus нет NTLM а у 1С 8 у HTTPСоединение объекта есть и оно по умолчанию, походу из-за этого и не пускает.
Может какими другими средствами кто решал? по гуглил не нашел ничего вроде.
Подкиньте, если не жалко направление куда копать Улыбка

p.s. Сразу оговорюсь дело перехода на 1С 8 это другое, тут спортивный интерес.
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: 1c 7.7. и обмен с 1с битрикс
Ответ #1 - 20. Апреля 2013 :: 11:26
Печать  
А вот этот ком объект не подойдет?
http://msdn.microsoft.com/en-us/library/windows/desktop/aa384106(v=vs.85).aspx
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: 1c 7.7. и обмен с 1с битрикс
Ответ #2 - 22. Апреля 2013 :: 04:38
Печать  
пишу:
Код
Выбрать все
	сайт = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
        сайт.Open("GET","http://test.ru/bitrix/admin/1c_exchange.php?type=sale&mode=query",0);
	сайт.SetCredentials("pavlo","test",0);
	сайт.SetAutoLogonPolicy(2);
	сайт.Send();
	Сообщить(сайт.ResponseText);
	Сообщить(""+сайт.Status+" - "+сайт.StatusText);
	Сообщить(сайт.GetAllResponseHeaders);
 



возвращает страницу, которая и требует авторизацию Печаль Никаких "success" как в 1С 8 Печаль
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: 1c 7.7. и обмен с 1с битрикс
Ответ #3 - 22. Апреля 2013 :: 06:07
Печать  
я решал

ща поищу

В общем - проблема была точно так же с авторизацией.
Причем, проблема, если мне память не изменяет, была в том, что конкретно в объекте ХТТП из в7плюс.длл криворукие программисты криворуко нах#рачили и оно тупо не работает (поддержка авторизации).

В результате, брался сниффер в руки, курилось взаимодействие через веб-морду...
Итоговое решение такое: через объект WinHttp.WinHttpRequest.5.1 делается ПОСТ-запрос с данными аутентификации, после чего у этого объекта появляется хидер с каким-то хэшем, идентифицирующим эту авторизованную сессию. Т.е. пока объект ВинХТТП жив - авторизация есть.

Код
Выбрать все
Функция УстановитьСоединение(ПХПСкрипт = "1c_exchange.php")
	Если ПустаяСтрока(Адрес) + ПустаяСтрока(Пользователь) + ПустаяСтрока(Пароль) > 0 Тогда
		Сообщить("Не заданы параметры соединения с сайтом!");
		Возврат 0;
	КонецЕсли;

	Если Прав(Адрес, 1) <> "/" Тогда
		Адрес = Адрес + "/";
	КонецЕсли;

	ЗапросАвторизации	= "?login=yes&type=catalog&mode=checkauth";
	ДанныеАвторизации = "AUTH_FORM=Y&TYPE=AUTH&USER_LOGIN=" + Пользователь + "&USER_PASSWORD=" + Пароль;

	ХТТП = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
	ХТТП.Open("POST", Адрес + ПХПСкрипт + ЗапросАвторизации, 0);

	ХТТП.SetRequestHeader("Content-type", "application/x-www-form-urlencoded");
	ХТТП.SetRequestHeader("Content-length", "" + СтрДлина(ДанныеАвторизации));
	ХТТП.Send(ДанныеАвторизации);

	Ответ = ХТТП.ResponseText;
	Если РезультатПодключения(Ответ) <> 1 Тогда
		Сообщение("Ошибка авторизации:", "!");
		Сообщение(Ответ, " ");
		Возврат 0;
	КонецЕсли;

	Возврат ХТТП;
КонецФункции	// УстановитьСоединение 



используется примерно так:

Код
Выбрать все
	ХТТП = УстановитьСоединение();
	Если ХТТП = 0 Тогда
		Возврат 0;
	КонецЕсли;

	ЗапросИнит			= "?type=catalog&mode=init";
	ЗапросОтправкаФайла	= "?type=catalog&mode=file&filename=";
	ЗапросИмпортФайла	= "?type=catalog&mode=import&filename=";

	ХТТП.Open("GET", Адрес + ПХПСкрипт + ЗапросИнит, 0);
	ХТТП.Send();
	Ответ = ХТТП.ResponseText;

	Если РезультатПодключения(Ответ) = -1 Тогда
		Сообщение("Ошибка инициализации:", "!");
		Сообщение(Ответ, " ");
		Возврат 0;
	КонецЕсли;

	//Если Нрег(СтрПолучитьСтроку(Ответ, 1)) = "zip=yes" Тогда

	oADOStream = СоздатьОбъект("ADODB.Stream");
	oADOStream.Type = 1; //тип данных - Binary
	oADOStream.Open();
	oADOStream.LoadFromFile(ПолноеИмяФайла);

	ХТТП.Open("POST", Адрес + ПХПСкрипт + ЗапросОтправкаФайла + ИмяФайлаОтправки, 0);
	ХТТП.SetRequestHeader("Content-type", "application/octet-stream");
	ХТТП.SetRequestHeader("Content-length", "" + oADOStream.Size);
	ХТТП.Send(oADOStream);

	Ответ = ХТТП.ResponseText;
	Если РезультатПодключения(Ответ) = -1 Тогда
		Сообщение("Ошибка отправки файла:");
		Сообщение(Ответ, " ");
	КонецЕсли;

	Ответ = "progress";
	Пока Ответ = "progress" Цикл
		Для тик = 1 По 3 Цикл
			ТекВремя = ТекущееВремя();
			Пока ТекВремя = ТекущееВремя() Цикл
			КонецЦикла;
		КонецЦикла;

		Попытка
			ХТТП.OPEN("GET", Адрес + ПХПСкрипт + ЗапросИмпортФайла + ИмяФайлаНаСервере, 0);
			ХТТП.Send();
		Исключение
			Продолжить;
		КонецПопытки;

		Ответ = ХТТП.ResponseText;
		Если РезультатПодключения(Ответ) <> -1 Тогда
			Сообщение(СтрПолучитьСтроку(Ответ, 2));
			Ответ = Нрег(СтрПолучитьСтроку(Ответ, 1));
		КонецЕсли;
	КонецЦикла;

	Если Ответ <> "success" Тогда
		Сообщение("Файлы отправлены на сервер, но не обработаны");
		Возврат 0;
	КонецЕсли; 



Там, где выделено - можно проверить ответ сервера на разрешенность загрузки файлов в зип-архивах.
В моем случае, сайт упорно возвращал запрет зипов, но при это прекрасно их сжирал.
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: 1c 7.7. и обмен с 1с битрикс
Ответ #4 - 22. Апреля 2013 :: 06:38
Печать  
Забрать файлы с сервера:

Код
Выбрать все
Функция ПринятьФайлыССайта(ПХПСкрипт = "1c_exchange.php")
	ИмяФайла = "" + _GetPerformanceCounter() + ".xml";
	ПолноеИмяФайла = СоздатьКаталогОбмена() + ИмяФайла;

	ХТТП = УстановитьСоединение();
	Если ХТТП = 0 Тогда
		Возврат 0;
	КонецЕсли;

	//ЗапросДанных		= "?type=catalog&mode=query";
	ЗапросДанных		= "?type=sale&mode=query";

	ХТТП.Open("GET", Адрес + ПХПСкрипт + ЗапросДанных, 0);
	ХТТП.Send();

	//потенциально падало на строке большой длины (>500кб) здесь
	Ответ = ХТТП.ResponseText;
	Если РезультатПодключения(Ответ) = -1 Тогда
		Сообщение("Ошибка получения данных:", "!");
		Сообщение(Ответ, " ");
		Возврат 0;
	КонецЕсли;

	Если СтрПолучитьСтроку(Ответ, 1) = "failure" Тогда
		Сообщение("Ошибка получения данных.", "!");
		Возврат 0;
	КонецЕсли;

	//oADOStream = СоздатьОбъект("ADODB.Stream");
	//oADOStream.Type = 1; //тип данных - Binary
	//oADOStream.Mode = 3; //чтение и запись
	//oADOStream.Open();
	//oADOStream.Write(ХТТП.ResponseText);
	////oADOStream.Write(ХТТП.ResponseBody);
	////oADOStream.Write(ХТТП.ResponseStream);
	//oADOStream.SaveToFile(ПолноеИмяФайла);

	//здесь падало на строке большой длины (>500кб)
	//xml_fso=СоздатьОбъект("Scripting.FileSystemObject");
	//xml_fso.CreateTextFile(ПолноеИмяФайла, 1);
	//xml_file=xml_fso.OpenTextFile(ПолноеИмяФайла, 2, 1);
	//xml_file.WriteLine(ХТТП.ResponseText);

	Текст = СоздатьОбъект("Текст");
	Текст.ДобавитьСтроку(ХТТП.ResponseText);
	Текст.Записать(ПолноеИмяФайла);


	Возврат ПолноеИмяФайла;
КонецФункции	// ОтправитьФайлНаСайт
 



Почему не взлетел АДО.Стрим - не помню. Но не взлетел.
Если с сервера ожидается не ХМЛка, а бинарник (например, зип-архив) - то фиг знает, как его получать.
  
Наверх
 
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: 1c 7.7. и обмен с 1с битрикс
Ответ #5 - 22. Апреля 2013 :: 09:47
Печать  
спасибо огромное Подмигивание

я правда авторизацию решил малость по другому, куря инет.
там пара логин:пароль в base64 переводится, а потом через SetRequestHeader("Authorization"," Basic "+Строка(ЛогинПароль)); передается.
В принципе пашет, но особенно спасибо за обмены далее, только с авторизацией разобрался, еще копаться пришлось бы долго с обменами, а тут примеры готовые. Спасибо Подмигивание
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: 1c 7.7. и обмен с 1с битрикс
Ответ #6 - 22. Апреля 2013 :: 10:42
Печать  
Satans Claws писал(а) 22. Апреля 2013 :: 06:07:
я решал

Там, где выделено - можно проверить ответ сервера на разрешенность загрузки файлов в зип-архивах.
В моем случае, сайт упорно возвращал запрет зипов, но при это прекрасно их сжирал.


Суть в том, что сайт походу не возвращает в зипе, он только говорит о том, что принимать умеет в нем.
Мне говорит что поддерживает, и жрет зипы тоже, а вот выплевывает только в XML.
Потому я получил это всё и сохранил через MSXML2.DOMDocument

Сейчас домучаю отсыл об успешной загрузке и можно тестить, спасибо еще раз.
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: 1c 7.7. и обмен с 1с битрикс
Ответ #7 - 22. Апреля 2013 :: 13:50
Печать  
pavlo писал(а) 22. Апреля 2013 :: 09:47:
там пара логин:пароль в base64 переводится, а потом через SetRequestHeader("Authorization"," Basic "+Строка(ЛогинПароль)); передается.

Но это же не NTLM.
Если это заработало, то наверное и такое заработает
сайт.Open("GET","http://Логин:Пароль@test.ru/bitrix/admin/1c_exchange.php?type=sale&mode=query",0...;
но это, как и Authorization Basic, совершенно не безопасно
  

1&&2&&3
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: 1c 7.7. и обмен с 1с битрикс
Ответ #8 - 23. Апреля 2013 :: 01:57
Печать  
Окромя авторизации, все остальное я нагло тащил из восьмерки Улыбка
  
Наверх
 
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: 1c 7.7. и обмен с 1с битрикс
Ответ #9 - 23. Апреля 2013 :: 02:13
Печать  
Satans Claws писал(а) 23. Апреля 2013 :: 01:57:
Окромя авторизации, все остальное я нагло тащил из восьмерки Улыбка

почти это и делаю Улыбка еще почитывая битрикса инструкцию Улыбка
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: 1c 7.7. и обмен с 1с битрикс
Ответ #10 - 23. Апреля 2013 :: 02:16
Печать  
trad писал(а) 22. Апреля 2013 :: 13:50:
pavlo писал(а) 22. Апреля 2013 :: 09:47:
там пара логин:пароль в base64 переводится, а потом через SetRequestHeader("Authorization"," Basic "+Строка(ЛогинПароль)); передается.

Но это же не NTLM.
Если это заработало, то наверное и такое заработает
сайт.Open("GET","http://Логин:Пароль@test.ru/bitrix/admin/1c_exchange.php?type=sale&mode=query",0...;
но это, как и Authorization Basic, совершенно не безопасно


ну так открыто не пашет Улыбка
на счет base64 согласен, но пускает Улыбка
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: 1c 7.7. и обмен с 1с битрикс
Ответ #11 - 14. Июня 2013 :: 07:40
Печать  
Satans Claws писал(а) 23. Апреля 2013 :: 01:57:
Окромя авторизации, все остальное я нагло тащил из восьмерки Улыбка


что то заметил, что запрос подтверждения загрузки заказов не пашет.
Выяснил что нужно послать запрос, Open("POST","http://site.ru/bitrix/admin/1c_exchange.php?type=sale&mode=success",0);
но с именем сессии иначе битрикс не примет, НО нарвался когда передаю ид сессии или может что то другое нужно, SetRequestHeader() не устанавливает этот параметр в шапку Печаль
в начале я получил эту PHPSESSID потом при запросе типа POST делаю установку параметра Set-Cookie
на такой же, но если получаю GetAllResponseHeaders() то там его не оказывается, тоесть по сути параметр не ставится Печаль
Или все же имя сессии это что то другое? Пишут что битрикс какое то имя сессии дает и по нему работает дальше.
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: 1c 7.7. и обмен с 1с битрикс
Ответ #12 - 14. Июня 2013 :: 08:06
Печать  
ааа понятно параметр не Set-Cookie, а Cookie Улыбка
хм, один раз записала и снова не записывает
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
leov-001
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Зарегистрирован: 05. Марта 2009
Re: 1c 7.7. и обмен с 1с битрикс
Ответ #13 - 27. Июня 2013 :: 05:48
Печать  
У меня через проксю ни как авторизация не проходила. Сделал так

Код
Выбрать все
	ДанныеАвторизации = "AUTH_FORM=Y&TYPE=AUTH&USER_LOGIN="+Пользователь+"&USER_PASSWORD="+Пароль;
	ЗапросАвторизации	= "?login=yes&"+ДанныеАвторизации+"&type=catalog&mode=checkauth";
	objWinHttp = СоздатьОбъект("Msxml2.ServerXMLHTTP.6.0");
	objWinHttp.Open("GET",Адрес+ЗапросАвторизации,0,,);
	Если ProxyИспользовать = "1" Тогда
		objWinHttp.SetProxy(2,ProxyServer+":"+ProxyPort);
		objWinHttp.setProxyCredentials(ProxyUserName,ProxyPassword);
	КонецЕсли;

	objWinHttp.Send();

 



И все завелось.
  
Наверх
 
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: 1c 7.7. и обмен с 1с битрикс
Ответ #14 - 27. Июня 2013 :: 06:21
Печать  
Да, для прокси у меня так же Подмигивание
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать