Загружаем картинки товаров в Битрикс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

См. также

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

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

120000 руб.

19.08.2020    26675    26    1    

28

Внешние источники данных Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

Готовая интеграция для управляемых форм. Встраивается в вашу 1С как расширение. Реализует автоматический обмен данными между 1С (1С:Фитнес клуб и аналогов) и СКУД RusGuard, автоматизирует бизнес-процессы по созданию и учету сотрудников в СКУД. Значительно упрощает работу специалистов отдела кадров и отдела безопасности: избавляет от двойного ввода информации в 1С и СКУД.

94999 руб.

11.07.2024    1347    1    0    

3

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

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

13200 руб.

19.12.2016    48791    99    106    

70

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

Представлена обработка для импорта документов из розничной программы учета товара в торговых точках и аптеках, необходимых для ведения бухгалтерского и налогового учёта, в Бухгалтерию 3.0. При загрузке данных в бухгалтерию переносятся документы поступлений, реализации, возвратов и перемещений в торговых точках и формируются все бухгалтерские и налоговые отчеты с учетом этих документов для любой системы налогообложения. Обработка позволяет загрузить данные из ПО ТрейдФарм. Имеются варианты для других розничных программ (ПО Manuscript Solution, Е-Фарма и S-Market).

18000 руб.

09.04.2020    18728    13    8    

9
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 96 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Соединение..... А вот дальше как, что не могу понять....

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