Для начала я завел на их сайте учетку, которой присваивают ИДМагазина. Затем я почитал их форумы и документацию про 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" Тогда
Возврат стр.Значение;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункции // ЗаписатьКартинкуНаСайт()
Надеюсь, этот базовый набор функций вам поможет начать и развивать инструментарий дальше.
Вау! Абсолютно незаслуженно обошли вниманием вашу работу! Отдельное спасибо что выложили бесплатно коды текстом!! Буду изучать Ваш опыт — может что то получится и у меня!
(1) serg1974, просто ECWID в России еще только набирает популярность. Думаю все еще впереди. Лично мне нравится как они работают с клиентами. Есть с кем сравнить. Я сам тоже искал коды, но наткнулся только на платную разработку и то код обмена у них закрыт. Мне это не понравилось и я решил сам написать и поделиться наработками с другими.
Спасибо!