Управление магазином 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

См. также

API-интеграция 1С с маркетплейсами ОЗОН, WildBerries, Я.Маркет, СберМегаМаркет, Стройландия, Леруа Мерлен, Hoff, AliExpress для УТ11, КА2, ERP2, УНФ, БП3, Розница, УТ10, УПП1.3

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

Модуль для интеграции с маркетплейсами ОЗОН, WildBerries, Я.Маркет, СберМегаМаркет, Стройландия, Леруа Мерлен, Hoff, AliExpress. При помощи расширения поддерживаются следующие методы: обмен остатками товаров, обмен ценами, обработка заказов, печать стикеров, загрузка отчетов комиссионеров по API (в том числе Я.Маркет). Подходит для конфигураций Беларуси. Поддержка искусственного интелекта GigaChat

59990 руб.

05.09.2023    7140    87    74    

68

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

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

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

36000 руб.

03.08.2020    15747    10    17    

11

Оплата покупок "Долями" в 1С:Розница 2.3 (для работы с сервисом dolyame.ru)

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

Готовое интеграционное решение для оплаты покупок Долями в 1C:Розница 2.3. Реализовано в виде расширения. Интеграция сервиса dolyame.ru для приема платежей в рассрочку.

18000 руб.

19.12.2023    1183    6    1    

6

SALE! 15%

Обмен данными с сайтом. БП 3.0

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

Обмен данными с сайтом на платформе 1С:Битрикс (и подобными) для 1С: Бухгалтерия предприятия 3.0.

12000 10200 руб.

18.03.2019    31277    109    100    

62

Интеграция 1С — Битрикс24. Обмен задачами

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

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (8.3.18.1289). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    17548    6    15    

13

SALE! 33%

«Мониторинг цен» – сервис для отслеживания цен конкурентов на ведущих маркетплейсах России

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

Сервис помогает отслеживать цены на ведущих маркетплейсах России только для одного региона – Москва и Московская область. Выполняйте анализ и контролируйте цены Ваших конкурентов сразу в системе 1С.

2400 1608 руб.

29.05.2023    6652    25    37    

15

Выгрузка для АВИТО

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

Выгрузка товаров услуг из 1С для сайта "Авито" раздел "Автозагрузка" выполнена в виде обработки. Обработка подходит для конфигураций УТ, УНФ и Розница. Данная обработка позволяет создавать шаблон с объявлениями для "Авито" - "Автозагрузка".

4200 руб.

07.06.2022    15348    42    56    

37
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
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 21 03.02.21 12:47 Сейчас в теме
(4) Получилось написать свою синхронизацию для УТ 10.3?
7. TorLink 11.02.21 18:21 Сейчас в теме
(6) не, бросили эту затею. Убедил клиента сделать всё на Битриксе. В принципе это правильное решение оказалось. Там потом полезло столько хотелок, кто тильда бы всё равно не подошла.)
9. alex649 106 23.09.21 21:49 Сейчас в теме
8. alex649 106 23.09.21 21:49 Сейчас в теме
(4)
УТ 10.3? А то сейчас даже то


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