0. user662672_explorer2000 176 09.01.17 09:01 Сейчас в теме

Передаем контакты из 1С в Битрикс24 через REST API

Хочу поделиться опытом использования Битрикс24 REST API для экспорта контактов из 1С УТ 11

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
99. uno-c 116 16.10.19 23:02 Сейчас в теме
(98)Вообще Authorization basic не задокументирована у Б24, в (10) уже отмечалось это. И в будущем, возможно прекратится его поддержка. Хотя у меня сейчас пока еще работает. Возможно, Вы в с логином/паролем или адресом своего портала в коде ошиблись, пробел там где-нибудь лишний в начале/конце затесался, бывает еще символы невидимые подцепляются, если через форму копи-пастом вставлять логин/пароль и проч. Еще к русским символам в пароле непонятно как basic - авторизация отнесется.
100. Flynxx 17.10.19 06:45 Сейчас в теме
(99) Не там другое у нас локальная сеть и база 1с наружу не смотрит. пришлось ngnix настраивать пробросы делать с днс записями что бы битрикс при ответе шел на внутренний сервак со скриптом который мы при публикации приложения в битрикс указали. после этого все заработало. а так данный теперь забираются. правда они скудные до нельзя.
101. uno-c 116 17.10.19 08:54 Сейчас в теме
102. uno-c 116 17.10.19 09:18 Сейчас в теме
(100)Если речь о личном приложении (не для публикации в каталоге) - то согласно обсуждаемой статье, после первого запроса на "https://yourportal.bitrix24.ru/oauth/authorize/?client_id=xxxxx" при успешном прохождении basic авторизации, приходит ответ с кодом 302, а в ответе есть заголовок Location с содержимым "http://idonthavesite.ru?code=xxxxx&state=&domain=test1c.bitrix24.ru&member_id=xxxxx&scope=crm&server_domain=oauth.bitrix.info" Здесь idonthavesite.ru - несуществующий адрес, который я ввел при создании приложения в битриксе.
Если же базовая авторизация не прошла (пользователь или пароль неверные) - то тоже приходит редирект по 302 коду, но на другой Location "https://auth2.bitrix24.net/oauth/authorize/?user_lang= ...", и в этом Location отсутствует параметр code=
Я решил, что Вы об этом, когда говорили "не происходит редиректа на страницу с полем code вместо этого идет редирект на страницу авторизации".
Чтобы получить code, access token и refresh token - базу не обязательно в инет публиковать, у меня база не опубликована, все токены получаю от битрикса обработкой по этой статье. Кстати, пароль из русских символов Б24 принимает на базовой авторизации, проверил.
103. Flynxx 17.10.19 13:25 Сейчас в теме
(102) в том то и проблема что на самом деле если даже указать несуществующий адрес то по схеме битрикса он начинает на него ломиться и требовать от него ответа. а мы указали сайт который у нас в локальной сети лежит естесвенно битрикс его и не видел для чего потребовался проброс и тд и тп. у нас без этого оно не понимало вообще никак . хотя делал все как по статье. но у нас база 1с вообще доступа в инет не имеет. никакого.
104. uno-c 116 17.10.19 14:26 Сейчас в теме
(103)Видимо, у Вас какой-то другой случай, коробочный битрикс с предыдущей схемой авторизации или еще что-то, не из статьи. Вообще как Вы поняли, что он начинает куда-то ломиться, если изначально сайт только в локальной сети был, и битрикс его не видел, т.е. где вы логи ловили, в которых увидели, что битрикс куда-то ломится? Для авторизации и обмена данными 1С с облачным битриксом-24 (*.bitrix24.ru) не нужна опубликованная база, белый IP адрес, доменное имя и т.п. Сейчас как раз пишу интеграцию для самописной конфигурации - все работает.
106. Flynxx 17.10.19 15:52 Сейчас в теме
(104) облачный как раз. как где видел. он же в локейшене возвращает куда оно ломится. дальше просто запустили это все со внешней тачки с внешним ип и все заработало токен прилетел а тачки со внутренним ип токен не приходил потому что доступа из локальной сети к сайту указанному не было, а с тачки со внешним ип он возращал страницу сайта с полем code.
ТОже пишу интеграцию с нашей базой. Но те методды которые есть в битриксе связанные контролем времени жутко корявые и унылые по функционалу
108. uno-c 116 17.10.19 16:20 Сейчас в теме
(106)В Location битрикс никуда не стучится. Б24 просто сообщает 302 код ответа (страница временно перемещена) и адрес, куда она по его мнению перемещена - тот самый несуществующий адрес, который мы указали при создании приложения. Что дальше делать с этим адресом решает программист 1С - стучаться или не стучаться. Можно, конечно попытаться сходить на него, но смысл, если заранее известно, что он не существует. Мне в Location после первого запроса приходит. "http://idonthavesite.ru?code=xxxxx&state=&domain=test1c.bitrix24.ru&member_id=xxxxx&scope=crm&server_domain=oauth.bitrix.info". Выцепляем code оттуда, плюсом берем заранее известные выданные приложению client_id и client_secret, и все это скармливаем серверу авторизации Б24 (сервер один для всех, не зависит от имени Вашего портала - oauth.bitrix.info) "https://oauth.bitrix.info/oauth/token?grant_type=authorization_code&client_id=xxxxx&client_secret=­xxxxx&code=xxxxx". В ответ получаем JSON с нужными токенами. Всё.
109. Flynxx 18.10.19 07:03 Сейчас в теме
(108) ну нам и сообщал 302 только адрес куда перемещена был на страницу авторизации снова. а не на тот вымышленный адрес. в локейшене была в первом же ответе станица авторизации битрикс. Это если с внутри сети долбиться а если снаружи то возвращал че надо.
110. uno-c 116 18.10.19 09:41 Сейчас в теме
(109)
ну нам и сообщал 302 только адрес куда перемещена был на страницу авторизации снова
Не понятно слово "снова". Мы же говорим про самый первый запрос и ответ на него. А первый запрос идет не на страницу авторизации, а на персональный портал: "https://test1c.bitrix24.ru/oauth/authorize/?client_id=xxxxx", в заголовке отправляется "Authorization: Basic хххххх=", этот заголовок 1С формирует автоматически, если в Новый HTTPСоединение() указать логин и пароль. Если все верно - в ответ получим 302 на вымышленный сайт и там же code ""http://idonthavesite.ru?code=ххххх&...". Если же ошибиться с логином, паролем или адресом существующего персонального портала - то в ответ получим 302 на страницу авторизации Location "https://auth2.bitrix24.net/oauth/authorize/?user_lang=...", и code в этом случае отсутствует.

Или Вы называете страницу персонального портала страницей авторизации ("https://test1c.bitrix24.ru/oauth/authorize/")? И в ответе на самый первый запрос приходил Location "https://test1c.bitrix24.ru/oauth/authorize/" - снова тот же самый, на который вы и делали первый запрос?
111. Flynxx 18.10.19 13:44 Сейчас в теме
(110)
первый запрос на персональный портал был https://хххххххххххх.bitrix24.ru/oauth/authorize/?client_id=xxxxx". он возвращает 302 а в локейшене было переброс https://auth2.bitrix24.net а не на тот сайт который был указан (на вымышленный сайт) а со внешнего айпи было нормальный ответ 302 и в локейшене на сайт который указан (на вымышленный сайт)
112. uno-c 116 19.10.19 19:35 Сейчас в теме
Контакт можно создавать методом POST, отправляя данные контакта в формате JSON
Процедура СоздатьКонтактНаСервере()
		
	fields = Новый Структура;
	fields.Вставить("NAME", Взаимодействие.Клиент.Наименование);//NAME	Имя контакта. Обязательное поле
	fields.Вставить("OPENED", "Y"); //OPENED	Флаг "Доступен для всех"
	fields.Вставить("TYPE_ID", "CLIENT");//TYPE_ID	Тип контакта
	fields.Вставить("SOURCE_ID", "SELF");//SOURCE_ID	Источник
	
	мМассив = Новый Массив;
	мМассив.Добавить(Новый Структура("VALUE, VALUE_TYPE", Взаимодействие.Клиент.Телефон, "WORK"));
	fields.Вставить("PHONE", мМассив);
	
	fields.Вставить("COMMENTS", Взаимодействие.Клиент.Комментарий);//COMMENTS	Комментарии
	fields.Вставить("ORIGIN_ID", XMLСтрока( Взаимодействие.Клиент));//ORIGIN_ID	Идентификатор объекта внешней информационной базы.
	
	СтруктураЖсон = Новый Структура;
	СтруктураЖсон.Вставить("auth", AccessToken);
	СтруктураЖсон.Вставить("fields", fields);
	СтруктураЖсон.Вставить("params", Новый Структура("REGISTER_SONET_EVENT", "Y")); //оповещение в браузере
	
	ЗаписьЖсон = Новый ЗаписьJSON;
	ЗаписьЖсон.УстановитьСтроку();
	ЗаписатьJSON(ЗаписьЖсон, СтруктураЖсон);
	СтрокаЖсон = ЗаписьЖсон.Закрыть();
	
	ХттпСоединение = Новый HTTPСоединение(АдресБитрикс24,,,,, 60, Новый ЗащищенноеСоединениеOpenSSL, Ложь);
	ХттпЗапрос = Новый HTTPЗапрос("/rest/crm.contact.add");
	ХттпЗапрос.Заголовки.Вставить("Content-type", "application/json");
	ХттпЗапрос.УстановитьТелоИзСтроки(СтрокаЖсон);
	ХттпОтвет = ХттпСоединение.ОтправитьДляОбработки(ХттпЗапрос);
	СтрокаОтвета = ХттпОтвет.ПолучитьТелоКакСтроку();
	ЧтениеЖсон = Новый ЧтениеJSON;
	ЧтениеЖсон.УстановитьСтроку(СтрокаОтвета);
	СтруктураЖсон = ПрочитатьJSON(ЧтениеЖсон);
	ИдКонтакта = СтруктураЖсон.result;
	
	КлиентОбъект = Взаимодействие.Клиент.ПолучитьОбъект();
	КлиентОбъект.Б24ИдКонтакта = ИдКонтакта;
	КлиентОбъект.Записать();
	
КонецПроцедуры
Показать
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Тольятти
зарплата от 70 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата от 110 000 руб. до 150 000 руб.
Полный день

Ведущий программист 1С (с функцией наставничества)
Екатеринбург
зарплата от 100 000 руб.
Полный день

Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству

Бизнес-аналитик 1С
Москва
зарплата от 150 000 руб.
Полный день