Управление магазином ECWID из 1С

01.02.16

Интеграция - Сайты и интернет-магазины

Вероятно многие (в том числе и я) используют для поддержки интернет-магазина стороннего поставщика, выплачивая ему энную сумму денег в месяц. Я выбрал ECWID. Не реклама, но не жалуюсь. Услуги вполне качественные. В этой статье пойдет речь  об инструментах, с помощью которых можно  из 1С через API Эквида общаться с их движком.

Для начала я завел на их сайте учетку, которой присваивают ИДМагазина. Затем я почитал их форумы и документацию про API на сайте api.ecwid.com. После этого решил приступить к написанию обработки, которая будет из 1С закачивать и обновлять данные о товарах в выделенную мне базу на Эквиде. Для начала таки мне пришлось купить первый платный пакет, чтобы получать обратную связь от техподдержки и оперировать сотней товаров ради отладки.

Чтобы ваша обработка имела доступ к оперированию данными в базе необходимо ее зарегистрировать и авторизовать.

Для этого вы сначала направляете через форму, которую найдете на сайте Эквида, запрос на регистрацию внешнего приложения. Получаете от тех. поддержки client_id и client_secret  (client_id это не ИДМагазина!).

Затем в адресной строке браузера вводите строку формата: «https://my.ecwid.com/api/oauth/authorize?client_id=<ВАШ client_id>&redirect_uri=urn:ietf:wg:oauth:2.0:oob&response_type=code&scope=read_store_profile+update_store_profile+read_catalog+update_catalog+create_catalog+read_orders+update_orders+create_orders+read_customers+update_customers+create_customers+read_discount_coupons+update_discount_coupons+customize_storefront». В параметре scope плюсуются уровни доступа. Я перечислил все для полного охвата. После ввода этой строки в адресной строке браузера появится строка, которая будет в себя включать строку формата «?code=<временный код>». «ВременныйКод» ниже пригодится при авторизации.

Далее надо один раз для получения токена авторизовать ваше предложение. Я сделал это следующим кодом:

 

&НаКлиенте
Процедура Авторизоваться(Команда)    
    Если НЕ ЗначениеЗаполнено(ВременныйКод) Тогда    
    	Сообщить("Не введен временный код. Его можно получить из адресной строки браузера.");    
    КонецЕсли;     
    HTTPСоединение = Новый HTTPСоединение("my.ecwid.com" ,,,,,Истина);//подключимся через https   
	HTTPЗапрос = Новый HTTPЗапрос("/api/oauth/token?client_id=<ВАШ client_id>&client_secret=<Ваш client_secret >&code="+СокрЛП(ВременныйКод)+"&redirect_uri=urn:ietf:wg:oauth:2.0:oob&grant_type=authorization_code");
    Результат =  HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); //POST
    ЧтениеJson = Новый ЧтениеJson;
	ЧтениеJson.УстановитьСтроку(Результат.ПолучитьТелоКакСтроку("UTF-8"));
	ПолучСтруктура = ПрочитатьJSON(ЧтениеJson);
	Для каждого стр Из ПолучСтруктура Цикл
    
    	Если стр.Ключ = "access_token" Тогда
        
            Объект.Токен = стр.Значение;	
        
        КонецЕсли;     
    КонецЦикла; 
КонецПроцедуры

Объект.Токен надо куда-нибудь присвоить как константу, для его последующего использования для подключения к базе.

Токен получен, теперь можно манипулировать данными в базе Эквида для вашего магазина!

Добавить группу товаров (Объект.ИмяСервера = "app.ecwid.com"):

&НаКлиенте
Функция ДобавитьГруппу(стртаб, паренткод)
	Заголовки = Новый Соответствие;
	Заголовки.Вставить("Host",Объект.ИмяСервера);
	Заголовки.Вставить("Content-Type","application/json;charset=utf-8");
	Заголовки.Вставить("Cache-Control","no-cache");   
    СтрокаЗапроса = "{""name"": "+""""+стртаб.Наименование+""""+", ""description"": """", ""enabled"": true, ""orderBy"": 1"+?(ЗначениеЗаполнено(паренткод),", ""parentId"": "+паренткод,"")+"}";

    HTTPСоединение = Новый HTTPСоединение(Объект.ИмяСервера ,,,,,Истина);//подключимся через https
    HTTPЗапрос = Новый HTTPЗапрос("/api/v3/"+Объект.ИДМагазина+"/categories?token="+Объект.Токен, Заголовки);
    HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаЗапроса,"UTF-8", ИспользованиеByteOrderMark.НеИспользовать);
    Результат =  HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);//POST
    ЧтениеJson = Новый ЧтениеJson;
    ЧтениеJson.УстановитьСтроку(Результат.ПолучитьТелоКакСтроку());
    ПолучСтруктура = ПрочитатьJSON(ЧтениеJson);
    Для каждого стр Из ПолучСтруктура Цикл    
    	Если стр.Ключ = "id" Тогда        
            Возврат стр.Значение;        
        КонецЕсли;     
    КонецЦикла;
    Возврат Неопределено;
КонецФункции

Получить группы товаров:

&НаКлиенте
Функция ПолучитьСписокГруппНаСайте()
	Заголовки = Новый Соответствие;
	Заголовки.Вставить("Host",Объект.ИмяСервера);
	Заголовки.Вставить("Content-Type","application/json;charset=utf-8");
	Заголовки.Вставить("Cache-Control","no-cache");
	HTTPСоединение = Новый HTTPСоединение(Объект.ИмяСервера ,,,,,Истина);//подключимся через https
	HTTPЗапрос = Новый HTTPЗапрос("/api/v3/"+Объект.ИДМагазина+"/categories?token="+Объект.Токен, Заголовки);
	Результат =  HTTPСоединение.Получить(HTTPЗапрос); //GET
	ЧтениеJson = Новый ЧтениеJson;
	ЧтениеJson.УстановитьСтроку(Результат.ПолучитьТелоКакСтроку());
	ПолучСтруктура = ПрочитатьJSON(ЧтениеJson);
    ТабГрупп = ПолучитьТаблицуГрупп();
   	Для каждого стр Из ПолучСтруктура Цикл    
    	Если стр.Ключ = "items" Тогда        
            МассивГрупп = стр.Значение;	
            Для каждого стр Из МассивГрупп Цикл            
            	НоваяСтрокаГруппы = ТабГрупп.Добавить();
                НоваяСтрокаГруппы.ИД = стр.id;
                Попытка
                    НоваяСтрокаГруппы.ИДРодителя = стр.parentId;
                Исключение
                    НоваяСтрокаГруппы.ИДРодителя = "";
                КонецПопытки;
                НоваяСтрокаГруппы.Наименование = стр.name;            
            КонецЦикла;         
        КонецЕсли;    
    КонецЦикла; 
    Возврат ТабГрупп;
КонецФункции
&НаСервере
Функция ПолучитьТаблицуГрупп()
     ТаблицаГруппаСайта = Новый ТаблицаЗначений;
    ТаблицаГруппаСайта.Колонки.Добавить("ИД");
    ТаблицаГруппаСайта.Колонки.Добавить("ИДРодителя");
    ТаблицаГруппаСайта.Колонки.Добавить("Наименование");
    Возврат ТаблицаГруппаСайта ;
КонецФункции 
 

Создать товар в магазине:

&НаКлиенте
Функция СоздатьТоварНаСайте(строкатовара)
    СтруктураТовара     = ПолучитьСтруктуруТовараИзБазы(строкатовара);
    СтрокаЗапроса ="{""name"": "+""""+СтруктураТовара.Наименование+""","+
                     """sku"": "+""""+СтруктураТовара.Артикул+""","+
	                 """quantity"": "+СтруктураТовара.Количество+","+
                     """price"": "+СтруктураТовара.ЦенаПродажи+","+
                     ?(ЗначениеЗаполнено(СтруктураТовара.Вес),"""weight"": "+СтруктураТовара.Вес+",","")+
                     """description"": "+""""+СтруктураТовара.Описание+""","+
                     """categoryIds"": "+"["+СтруктураТовара.НомерКатегории+"],"+
                     """attributes"": "+"[{""id"": 7894117, ""value"": "+""""+СтруктураТовара.Бренд+"""},"+
                                         ?(ЗначениеЗаполнено(СтруктураТовара.ОЕМ),"{""id"": 7894121, ""value"": "+""""+СтруктураТовара.ОЕМ+"""},","")+
                                         ?(ЗначениеЗаполнено(СтруктураТовара.Размеры),"{""id"": 8934007, ""value"": "+""""+СтруктураТовара.Размеры+"""},","")+
                                         "{""id"": 7894120, ""value"": "+""""+СтруктураТовара.КодПоставщика+"""}]}";                     
    Заголовки = Новый Соответствие;
	Заголовки.Вставить("Host",Объект.ИмяСервера);
	Заголовки.Вставить("Content-Type","application/json;charset=utf-8");
	Заголовки.Вставить("Cache-Control","no-cache");       

    HTTPСоединение = Новый HTTPСоединение(Объект.ИмяСервера ,,,,,Истина);//подключимся через https
    HTTPЗапрос = Новый HTTPЗапрос("/api/v3/"+Объект.ИДМагазина+"/products?token="+Объект.Токен, Заголовки);
    HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаЗапроса,"UTF-8", ИспользованиеByteOrderMark.НеИспользовать);
    Результат =  HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);//POST
    ЧтениеJson = Новый ЧтениеJson;
    ЧтениеJson.УстановитьСтроку(Результат.ПолучитьТелоКакСтроку());
    Попытка
        ПолучСтруктура = ПрочитатьJSON(ЧтениеJson);
    Исключение
        Сообщить("Не создан товар "+СтруктураТовара.Наименование+", с артикулом "+СтруктураТовара.Артикул);
    КонецПопытки;
    Для каждого стр Из ПолучСтруктура Цикл    
    	Если стр.Ключ = "id" Тогда        
            Возврат стр.Значение;        
        КонецЕсли;
    КонецЦикла;
    Возврат Неопределено;    
КонецФункции // СоздатьТоварНаСайте()

Обновить товар, уже существующий в магазине:

&НаКлиенте
Функция ОбновитьТоварНаСайте(строкатовара)
    СтруктураТовара     = ПолучитьСтруктуруТовараИзБазы(строкатовара);
    СтрокаЗапроса =//"{""name"": "+""""+СтруктураТовара.Наименование+""","+
                   //  """sku"": "+""""+СтруктураТовара.Артикул+""","+
	                 "{""quantity"": "+СтруктураТовара.Количество+","+
                     """price"": "+СтруктураТовара.ЦенаПродажи+","+
                     ?(ЗначениеЗаполнено(СтруктураТовара.Вес),"""weight"": "+СтруктураТовара.Вес+",","")+
                   //  """description"": "+""""+СтруктураТовара.Описание+""","+
                   //  """categoryIds"": "+"["+СтруктураТовара.НомерКатегории+"],"+
                     """attributes"": "+"[{""id"": 7894117, ""value"": "+""""+СтруктураТовара.Бренд+"""}"+
                                         ?(ЗначениеЗаполнено(СтруктураТовара.ОЕМ),",{""id"": 7894121, ""value"": "+""""+СтруктураТовара.ОЕМ+"""}","")+
                                         ?(ЗначениеЗаполнено(СтруктураТовара.Размеры),",{""id"": 8934007, ""value"": "+""""+СтруктураТовара.Размеры+"""}]}","]}");
                   //                      "{""id"": 7894120, ""value"": "+""""+СтруктураТовара.КодПоставщика+"""}]}";                     
    Заголовки = Новый Соответствие;
	Заголовки.Вставить("Host",Объект.ИмяСервера);
	Заголовки.Вставить("Content-Type","application/json;charset=utf-8");
	Заголовки.Вставить("Cache-Control","no-cache");       

    HTTPСоединение = Новый HTTPСоединение(Объект.ИмяСервера ,,,,,Истина);//подключимся через https
    HTTPЗапрос = Новый HTTPЗапрос("/api/v3/"+Объект.ИДМагазина+"/products/"+СокрЛП(строкатовара.НомерНаСайте)+"?token="+Объект.Токен, Заголовки);
    HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаЗапроса,"UTF-8", ИспользованиеByteOrderMark.НеИспользовать);
    Результат =  HTTPСоединение.Записать(HTTPЗапрос);//PUT
    ЧтениеJson = Новый ЧтениеJson;
    ЧтениеJson.УстановитьСтроку(Результат.ПолучитьТелоКакСтроку());
    ПолучСтруктура = ПрочитатьJSON(ЧтениеJson);
    Для каждого стр Из ПолучСтруктура Цикл    
    	Если стр.Ключ = "updateCount" Тогда        
            Возврат стр.Значение;        
        КонецЕсли;
    КонецЦикла;
    Возврат Неопределено;    
КонецФункции // СоздатьТоварНаСайте()

Добавить картинку к товару:

&НаКлиенте
Функция ЗаписатьКартинкуНаСайт(НомерТовараУПоставщика, НомерТовараНаСайте)
    //сначала считаем картинку с поставщика
    Соединение = Новый HTTPСоединение("мойпоставщик.ru");
    Каталог = "/uploads/items/";
    АдресКартинки = Каталог+СокрЛП(НомерТовараУПоставщика)+".jpg";
    Запрос = Новый HTTPЗапрос(АдресКартинки);
    Ответ = Соединение.Получить(Запрос);
    ДвоичныеДанныеКартинки = Ответ.ПолучитьТелоКакДвоичныеДанные();
    
    //теперь запишем картинку на сайт
    Заголовки = Новый Соответствие;
	Заголовки.Вставить("Host",Объект.ИмяСервера);
	Заголовки.Вставить("Content-Type","application/json;charset=utf-8");
	Заголовки.Вставить("Cache-Control","no-cache");       

    HTTPСоединение = Новый HTTPСоединение(Объект.ИмяСервера ,,,,,Истина);//подключимся через https
    HTTPЗапрос = Новый HTTPЗапрос("/api/v3/"+Объект.ИДМагазина+"/products/"+СокрЛП(НомерТовараНаСайте)+"/image?token="+Объект.Токен, Заголовки);
    HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(ДвоичныеДанныеКартинки);
    Результат =  HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);//POST
    ЧтениеJson = Новый ЧтениеJson;
    ЧтениеJson.УстановитьСтроку(Результат.ПолучитьТелоКакСтроку());
    ПолучСтруктура = ПрочитатьJSON(ЧтениеJson);
    Для каждого стр Из ПолучСтруктура Цикл    
    	Если стр.Ключ = "id" Тогда        
            Возврат стр.Значение;        
        КонецЕсли;     
    КонецЦикла;
    Возврат Неопределено;
КонецФункции // ЗаписатьКартинкуНаСайт()

Надеюсь, этот базовый набор функций вам поможет начать и развивать инструментарий дальше.

ecwid интернет магазин soap

См. также

Сайты и интернет-магазины Платформа 1С v8.3 1С:Розница 2 Розничная и сетевая торговля (FMCG) Россия Платные (руб)

Готовое интеграционное решение для оплаты покупок Долями в 1C:Розница 2.3. Реализовано в виде расширения. Интеграция сервиса dolyame.ru для приема платежей в рассрочку. Поддерживает работу от разных юридических лиц. Работа: в составе РИБ, отдельно от РИБ, тонкий, толстый клиент, web-клиент (через интернет-браузер).

22440 руб.

19.12.2023    6195    41    11    

37

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 1C:Бухгалтерия 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    18599    20    22    

18

Сайты и интернет-магазины Платформа 1С v8.3 1С:Розница 3.0 Розничная и сетевая торговля (FMCG) Россия Платные (руб)

Готовое интеграционное решение для оплаты покупок Долями в 1C:Розница 3.0. Реализовано в виде расширения. Интеграция сервиса dolyame.ru для приема платежей в рассрочку. Поддерживает работу от разных юридических лиц. Работа: в составе РИБ, отдельно от РИБ, тонкий, толстый клиент, web-клиент (через интернет-браузер). Интегрировано в Чек ККМ, Рабочее место кассира (РМК)

24000 руб.

02.11.2024    776    3    0    

4

Сайты и интернет-магазины Платформа 1С v8.3 1С:Розница 2 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Управленческий учет Платные (руб)

Склад Вашего магазина онлайн в Telegram. С картинками, ценами, описанием и характеристиками. Используйте Telegram как торговую площадку и увеличивайте продажи.

54000 руб.

10.09.2024    1050    2    4    

3

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 1C:Бухгалтерия Управленческий учет Платные (руб)

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23): 1С:Управление торговлей, 1С:Управление Нашей фирмой 3, 1С:Комплексная автоматизация 2, Объединенное решение: Модуль 1С:CRM 3 (3.0.21.3) +1С:ERP Управление предприятием 2. При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

7200 руб.

04.05.2021    20760    13    19    

18

Сайты и интернет-магазины Программист Бизнес-аналитик Пользователь Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Управленческий учет Платные (руб)

Программа позволяет одним кликом настроить сбор цен ваших конкурентов или дилеров в интернете. Автоматически собирает данные результата поиска Яндекса (вам не придется вручную добавлять каждый сайт, за которым нужно следить). Обновление цен происходит по заданному вами расписанию автоматически. Можете легко отслеживать позиции вашего сайта в Яндексе по ключевым словам и фразам. Этот инструмент даст вам лучшее понимание того, как ваша SEO-стратегия влияет на видимость вашего сайта в поисковой выдаче, и поможет вам улучшить контент и структуру сайта для повышения его позиций. Функция доступна во всех тарифах.

19950 руб.

23.09.2019    31326    8    12    

31
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. serg1974 06.05.16 14:19 Сейчас в теме
Вау! Абсолютно незаслуженно обошли вниманием вашу работу! Отдельное спасибо что выложили бесплатно коды текстом!! Буду изучать Ваш опыт - может что то получится и у меня!
2. Sardukar 58 07.05.16 05:00 Сейчас в теме
(1) serg1974, просто ECWID в России еще только набирает популярность. Думаю все еще впереди. Лично мне нравится как они работают с клиентами. Есть с кем сравнить. Я сам тоже искал коды, но наткнулся только на платную разработку и то код обмена у них закрыт. Мне это не понравилось и я решил сам написать и поделиться наработками с другими.
4. TorLink 17.02.20 20:41 Сейчас в теме
(2) Сорри за некропост, но всё же. Сейчас пользуетесь?
Не встречали готовых решений под УТ 10.3? А то сейчас даже то платное решение теперь не рабочее, более того они даже старую обработку дать не хотят. чтобы не с нуля писать.((
5. Sardukar 58 18.02.20 08:51 Сейчас в теме
(4) Увы. Проект закрыл уже давно
6. LegO 23 03.02.21 12:47 Сейчас в теме
(4) Получилось написать свою синхронизацию для УТ 10.3?
7. TorLink 11.02.21 18:21 Сейчас в теме
(6) не, бросили эту затею. Убедил клиента сделать всё на Битриксе. В принципе это правильное решение оказалось. Там потом полезло столько хотелок, кто тильда бы всё равно не подошла.)
9. alex649 109 23.09.21 21:49 Сейчас в теме
8. alex649 109 23.09.21 21:49 Сейчас в теме
(4)
УТ 10.3? А то сейчас даже то


Доработал решение на 10.3
3. ScarFace 25.05.18 14:00 Сейчас в теме
Оставьте свое сообщение