Управление магазином 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) Россия Платные (руб)

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

22440 руб.

19.12.2023    8483    50    13    

47

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

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

24000 руб.

02.11.2024    1766    12    1    

11

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

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

36000 руб.

03.08.2020    20187    26    24    

22

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

Решение осуществляет синхронизацию задач Битрикс24 и 1С, что позволяет в одной системе ставить задачи, контролировать выполнение всего пула задач с группировкой по ответственным и проектам, формировать управленческие отчеты по работе сотрудников (загрузка, просроченные задачи), уведомлять сотрудников о ходе выполнения задач посредством чат-бот Telegram

7200 руб.

04.05.2021    21757    13    19    

19

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

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

19950 руб.

23.09.2019    31797    9    13    

31

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

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

4200 руб.

07.06.2022    19855    45    56    

47
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 Сейчас в теме
Оставьте свое сообщение