Загружаем картинки товаров в Битрикс24 через REST API

17.10.17

Интеграция - Внешние источники данных

Пример обработки для загрузки и выгрузки картинки товара из Битрикс24 через REST API.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Загружаем картинки товаров в Битрикс24 через REST API
.epf 10,51Kb ver:1
33
33 Скачать (1 SM) Купить за 1 850 руб.

В продолжении к статье решил разобраться с загрузкой изображений товара в Битрикс24. Были вопросы на эту тему в обсуждении да и сам решил не ждать, пока срочно не понадобится. Так-как по опыту уже знаю, что документации минимум и не все сразу понятно.

И так. Есть товар товар, необходимо загрузить детальную картинку.

В обработке задаю параметры подключения. Где взять client_id, client_secret описано здесь

Параметры подключения

Жмем "Загрузить картинку из файла", выбираем картинку для загрузки.  Необходимо указать ИД товара (смотрим его на форме)

ID товара

ID товара в Битрикс24

ID товара в Битрикс24

 

После чего жмем "Отправить картинку в битрикс". И смотрим результат.

Результат

 

Теперь немного кода. Как передавать картинку нашел в инструкции. Для файла будет сформирована очень длинная строка, которую через метод GET уже не передать. Используем POST.

Функция ОтправитьКартинкуТовара(ИДТовара, Адрес, ИмяФайла) Экспорт
	
	Если ИДТовара = "" Тогда
		Возврат "";
	КонецЕсли;
	
	
	Картинка = ПолучитьИзВременногоХранилища(Адрес);
	СтрокаBase64 = Base64Строка(Картинка.ПолучитьДвоичныеДанные());
	СтрокаBase64 = КодироватьСтроку(СтрокаBase64, СпособКодированияСтроки.КодировкаURL);

	Рез = ОтправитьRESTЗапросPOST("crm.product.update", "id=" + ИДТовара + "&fields[DETAIL_PICTURE][fileData][0]=" + ИмяФайла + "&fields[DETAIL_PICTURE][fileData][1]=" + СтрокаBase64, "");
	
	Возврат "";
	
КонецФункции

И сама функция отправки POST-запроса

Функция ОтправитьRESTЗапросPOST(RESTЗапрос, Параметры, Тело)
	
	ПроверитьТокен();
	
	
	ssl = Новый ЗащищенноеСоединениеOpenSSL(
				//Новый СертификатКлиентаWindows(
				//                СпособВыбораСертификатаWindows.Выбирать),
				Новый СертификатКлиентаWindows(),
                Новый СертификатыУдостоверяющихЦентровWindows());   
                         
	Соединение = Новый HTTPСоединение(
                            АдресБитрикс24,
							, // порт
							, // пользователь
							, // пароль
							, // прокси
                            60, // таймаут в секундах
                            ssl // защищенное HTTPS соединение
                        );
						
	Заголовки = Новый Соответствие;
	Заголовки.Вставить("Cookie", Cookie);

	Запрос = Новый HTTPЗапрос("rest/" + RESTЗапрос, Заголовки);											
	
	Если Параметры = "" Тогда
		ТелоСтрока = "auth=" + AccessToken;		
	Иначе
		ТелоСтрока = "auth=" + AccessToken + "&" + Параметры;
	КонецЕсли;
	
	Запрос.УстановитьТелоИзСтроки(ТелоСтрока, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
			
	Ответ = Соединение.ОтправитьДляОбработки(Запрос);

	РезСтр = Ответ.ПолучитьТелоКакСтроку();
	
	Чтение = Новый ЧтениеJSON;
	Чтение.УстановитьСтроку(РезСтр);
	
	Отв = ПрочитатьJSON(Чтение);

	Возврат Отв;
	
КонецФункции

 

Как подключиться к Битрикс24 и получить токен все описано в предыдущей статье.

Бонусом в обработку добавил пример, как скачать  картинку товара из Битрикс24. Тут намного попроще. В описании товара возвращается ссылка на картинку. По этой ссылке качаем файл изображения.

Функция ПолучитьКартинкуТовара(ИДТовара) Экспорт
	
	Рез = ОтправитьRESTЗапрос("crm.product.get", "id=1", ""); 
	
	Если Рез.Свойство("result") И Рез.result.Свойство("DETAIL_PICTURE") И Рез.result.DETAIL_PICTURE.Свойство("downloadUrl") Тогда
		
		ИмяВремФайла = ПолучитьИмяВременногоФайла();
		
		
		КопироватьФайл("https://" + АдресБитрикс24 + Рез.result.DETAIL_PICTURE.downloadUrl, ИмяВремФайла);
			
			
		Попытка
			
			Картинка = Новый Картинка(ИмяВремФайла);
			
		Исключение
		
		КонецПопытки;
		
		УдалитьФайлы(ИмяВремФайла);
		
		Возврат Картинка;
		
	Иначе
		
		Возврат Неопределено;
		
	КонецЕсли;
	
	
	
КонецФункции

 

Обработка тестировалась в УНФ 1.6.10.50. Должна работать в любой конфигурации, созданной под УФ на 8.3.

Битрикс24 REST API bitrix24

См. также

Внешние источники данных Программист Бизнес-аналитик Пользователь Платформа 1С v8.3 Управляемые формы Анализ и прогнозирование Конфигурации 1cv8 Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

28500 руб.

15.11.2022    21617    22    49    

39

Внешние источники данных Зарплата Бюджетный учет Программист Бухгалтер Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактическим удержаниям, НДФЛ, вычетам, страховым взносам из базы Парус 7.хх учреждений (далее Парус) в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (далее 1С) и начать с ней работать с любого месяца года.

84000 руб.

24.04.2017    51866    104    165    

91

Зарплата Внешние источники данных Бюджетный учет Перенос данных 1C Системный администратор Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактическим удержаниям, НДФЛ, вычетам, страховым взносам из базы Парус 8 учреждений (далее Парус) в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (далее 1С) и начать с ней работать с любого месяца года.

120000 руб.

19.08.2020    25699    25    1    

27

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Перенос данных 1C Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактическим удержаниям, НДФЛ, вычетам, страховым взносам из базы Парус 10 учреждений (далее Парус) в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (далее 1С) и начать с ней работать с любого месяца года.

84000 руб.

05.10.2022    11287    13    8    

15

Розничная торговля Внешние источники данных Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Бухгалтерский учет 1С:Бухгалтерия 3.0 Фармацевтика, аптеки Россия Бухгалтерский учет Платные (руб)

Внешняя обработка загрузки данных из файла-выгрузки, сформированного в программе F3 TAIL версии 3.4 (и выше) или еФарма версии 2.1, в базу конфигурации 1С: Бухгалтерия предприятия 8, ред. 3.0 (базовая, ПРОФ, КОРП, ФРЕШ).

13200 руб.

19.12.2016    47777    88    105    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. isaev2016 07.11.17 04:24 Сейчас в теме
А можно ли работать с файлами в других сущностях - например - "Коммерческое предложение" или "Счет". Пока нашел в описании только у задач.
2. user662672_explorer2000 229 07.11.17 07:36 Сейчас в теме
Смотрим в документацию, если у задач есть метод task.item.addfile, то у счетов и коммерческих предложений ничего подобного нет. У коммерческого предложения есть товарные позиции, которые в свою очередь могут содержать изображения. Ничего больше, чем дает API не придумать
3. isaev2016 07.11.17 17:45 Сейчас в теме
(2) Списался с техподдержкой. Добавили пользовательское поле с типом файл и туда получилось прикрепить.

"&fields[UF_CRM_1510048875][fileData][0]=" + Формат(Выборка.Номер,"ЧРГ=' '; ЧГ=0")+".pdf" + "&fields[UF_CRM_1510048875][fileData][1]=" + СтрокаBase64
4. user662672_explorer2000 229 07.11.17 18:39 Сейчас в теме
(3) Интересно, спасибо за информацию!
14. Westbound 16.08.19 16:30 Сейчас в теме
(3) а как обратно получить имя файла с сайта?
5. g_b 95 14.09.18 17:00 Сейчас в теме
а картинки для каталогов можно? , то покапался поменял обработку а на сайте ничего(
6. MaiorovYury 10 28.01.19 22:57 Сейчас в теме
(0) Спасибо огромное!!!
пару часов не понимал что не так, пока не нашел этот топик
Вот эта строка кода меня спасла

СтрокаBase64 = КодироватьСтроку(СтрокаBase64, СпособКодированияСтроки.КодировкаURL);
7. MaiorovYury 10 28.01.19 22:58 Сейчас в теме
(0) а есть идеи как прикрепить файл к комментарию?
Через сам битрикс 24 это сделать можно, и получить их тоже можно... вернее получить ссылку на их скачивание
А вот как их добавить я в документации не нашел
8. novatrade 02.02.19 18:10 Сейчас в теме
	Запрос = Новый HTTPЗапрос("rest/" + RESTЗапрос, Заголовки);											

у меня запустилось только, если
	Запрос = Новый HTTPЗапрос("rest/" + RESTЗапрос+"?auth=" + AccessToken, Заголовки);											

ну и пришлось поменять в соответствии с рекомендацией "DETAIL_PICTURE" на "PREVIEW_PICTURE".
Добавлю как комментарий. ИмяФайла в параметрах Rest - это имя, под каким файл будет сохранен на Б24
MaiorovYury; +1 Ответить
9. user662672_explorer2000 229 04.02.19 07:31 Сейчас в теме
(8)
у меня запустилось только, если


в статье используется функция ОтправитьRESTЗапросPOST, которая в том числе цепляет токен в параметры
MaiorovYury; +1 Ответить
11. novatrade 06.02.19 22:24 Сейчас в теме
(9)
в статье используется функция ОтправитьRESTЗапросPOST, которая в том числе цепляет токен в параметры

именно в Вашей функции ОтправитьRESTЗапросPOST эту строчку я и подкорректировал.
	Заголовки = Новый Соответствие;
	Заголовки.Вставить("Cookie", Cookie);

	Запрос = Новый HTTPЗапрос("rest/" + RESTЗапрос, Заголовки);											
13. user662672_explorer2000 229 07.02.19 06:53 Сейчас в теме
(11) странно, токен передается в теле POST запроса и так работало всегда. Но очевидно можно и в адресе ресурса токен передавать
10. MaiorovYury 10 05.02.19 00:49 Сейчас в теме
(8)
RESTЗапрос
а что в переменной RESTЗапрос ?
12. novatrade 06.02.19 22:26 Сейчас в теме
(10) у меня как и у автора
"crm.product.update"
15. Tanis 05.05.20 20:23 Сейчас в теме
Доброго времени!

Судя по всему эта обработка для битрикса. Подскажите, если кто сталкивался, как просто выгружать на сайт, не в битрикс? Начало такое же через HTTPСоединение..... А вот дальше как, что не могу понять....

Спасибо!
Оставьте свое сообщение