API синхронизации интернет-магазина с 1С

Иногда требуется создать собственную логику или существенно доработать существующую синхронизацию 1С с PHPShop. Вы можете воспользоваться PHPShop API, приведенном в этом руководстве.

В отличие от типового обмена, использующей формат обмена данными CommerceML, PHPShop использует более простой текстовый формат файлов CSV с разделением информации на файлы. Формат CommerceML состоит из двух файлов с русскоязычными XML тегами, что увеличивает размер транспортных файлов в сотни раз, а русскоязычные теги значительно уменьшают скорость выполнения операции и сильно нагружают сервер, значительно увеличивая стоимость хостинга.

Наш текстовый формат CSV делит транспортные файлы на отдельные части по 500-1000 позиций (задается в настройках обработки) и намного быстрее обрабатывается сервером, не перегружая его.

Загрузка заказов из интернет-магазина в 1С

Получение данных о заказах с сайта и обновление статуса после загрузки в 1С

Данные о заказах на сайте можно получать в виде сформированного csv-файла фиксированной структуры (описание структуры Приложение №1) или с помощью реализованных на сайте API.

Для получения данных о заказах через API необходимо выполнить следующий запрос:

http://<ИмяСайта>/<ПапкаДанных>/loader.php?command=list&date1=<ДатаНачала>&date2=<ДатаОкончания>&num=<ЧислоЗаказов>&log=<Пользователь>&pas=<Пароль>

где:

  1. «ИмяСайта» - наименование Вашего сайта;

  2. «ПапкаДанных» - наименование папки служебных данных сайта. По-умолчанию 1cManager;

  3. «ДатаНачала» - дата начала запроса в формате Unix-date;

  4. «ДатаОкончания» - дата окончания запроса в формате Unix-date;

  5. «ЧислоЗаказов» - максимальное число заказов в результате запроса;

  6. «Пользователь» - имя пользователя для авторизации на сайте (должен иметь соответствующие привилегии);

  7. «Пароль» - пароль пользователя для авторизации на сайте в кодированном виде (алгоритм Приложение №2).

Например: http://demo.phpshop.ru/1cManager/loader.php?command=list&date1=1250640000&date2=1250726399&num=10&log=demo&pas=100O101O109OI1OI7OI5O101OI4OI50O

В качестве результата запроса будет информация о заказах в формате Приложение №1. В случае ошибок результатом будет «Error».

После загрузки заказов в 1С необходимо выполнить запрос на сайт с целью обновления статусов загруженных заказов:

http://<ИмяСайта>/<ПапкаДанных>/loader.php?command=update&id=<>ИД_заказа&cid=<НомерЗаказа1С>&log=<Пользователь>&pas=<Пароль>

где:

  1. «ИмяСайта» - наименование Вашего сайта;

  2. «ПапкаДанных» - наименование папки служебных данных сайта. По-умолчанию 1cManager;

  3. «ИД_заказа» - id заказа на сайте, указан в секции «Начало личных данных» данных о зазазе (см. Приложение №1);

  4. «НомерЗаказа1С» - номер созданного в 1С документа;

  5. «Пользователь» - имя пользователя для авторизации на сайте (должен иметь соответствующие привилегии);

  6. «Пароль» - пароль пользователя для авторизации на сайте в кодированном виде (алгоритм Приложение №1).

Например:

http://demo.phpshop.ru/1cManager/loader.php?command=update&id=224&cid=ТК000000035&log=demo&pas=100O101O109OI1OI50O

Выгрузка номеров счетов-фактур в интернет-магазин

На сайт можно выгружать формы созданных в 1С счетов-фактур по ранее загруженным заказам.+Для этого:

  1. формируется список заказов, которые уже были загружены в 1С, но с-ф по которым не были выгружены на сайт: http://<ИмяСайта>/<ПапкаДанных>/loader.php?command=check&date1=<ДатаНачала>&date2=<ДатаОкончания>&log=<Пользователь>&pas=<Пароль> результатом будет строка с разделителем «;» из номеров 1С загруженных заказов;

  2. в 1С отбираются созданные с-ф по документам из п.1, формируются копии счетов в форматах html, xls, doc и копируются на ftp (либо в локальную папку);

  3. изменяется статус заказов, для которых выгружены с-ф: http://<ИмяСайта>/<ПапкаДанных>/loader.php?command=update &cid=<НомерЗаказа1С>&date=<ДатаСчета>&log=<Пользователь>&pas=<Пароль>

где: «ДатаСчета» - дата счет-фактуры в 1С.

Загрузка товаров в интернет-магазин из 1С в ручном режиме

Выгрузка товарной базы из 1С в интернет-магазин выполняется посредством транспортных файлов в формате CSV фиксированной структуры (Приложение №3).

Загрузка списка родительских групп товаров в интернет-магазин из 1С

На сайт из 1С можно выполнить загрузку списка родительских групп товаров через транспортный файл в формате CSV фиксированной структуры (Приложение №4).

Загрузка списка контрагентов в интернет-магазин из 1С

На сайт из 1С можно выполнить загрузку списка контрагентов через транспортный файл в формате CSV фиксированной структуры (Приложение №5).

Автоматическая загрузка товаров на сайт из 1С

Кроме «ручной» загрузки товаров на сайт через транспортный файл можно инициировать автоматическую загрузку с помощью реализованных на сайте API. Для это необходимо:

  1. сформировать файлы с данными в установленном формате и скопировать их в одну папку;

  2. выполнить запрос http://<ИмяСайта>/<ПапкаДанных>/result.php?date=<ПапкаСФайлами>&files=all&log=<Пользователь>&pas=<Пароль>&create=true&create_category=true где:

    • «ИмяСайта» - наименование Вашего сайта;

    • «ПапкаДанных» - наименование папки служебных данных сайта. По-умолчанию 1cManager;

    • ПапкаСФайлами – папка со сформированными файлами товарной базы;

    • «Пользователь» - имя пользователя для авторизации на сайте (должен иметь соответствующие привилегии);

    • «Пароль» - пароль пользователя для авторизации на сайте в кодированном виде (алгоритм Приложение №2);

    • create=true – признак создания новых товаров, если товар по артикулу не был найден в базе данных;

    • category=true – создавать новые, не найденные в базе данных каталоги.

    Результат запроса будет строка с разделенными «;» именами файлов ранее не загруженных на сайт.

  3. Для каждого файла из списка в п.2 выполнить http://<ИмяСайта>/<ПапкаДанных>/result.php?date=<ПапкаСФайлами>&files=<ИмяФайла>&log=<Пользователь>&pas=<Пароль>>&create=true&create_category=true где: ИмяФайла – очередное имя файла из списка.

Приложение №1 - Формат данных о заказах

Начало личных данных 
id;uid;datas;mail;name;campany;tel;oplata;sum;discount;inn;kpp
Начало заказанных товаров
id;uid;num;sum;

где в секции «Начало личных данных»:

  1. id – id заказа;

  2. uid – номер заказа;

  3. datas – дата заказа (в формате Unix-date);

  4. mail – почта заказчика;

  5. name – контактное лицо;

  6. campany – наименование организации (если заказчик юр.лицо);

  7. tel – телефон;

  8. oplata – тип оплаты;

  9. sum – сумма заказа;

  10. discount – скидка прописью;

  11. inn – ИНН организации (если заказчик юр.лицо или ИП);

  12. kpp – КПП организации (если заказчик юр.лицо или ИП).

где в секции «Начало заказанных товаров»:

  1. id - id товара;

  2. uid - артикул = код/артикул товара в 1С;

  3. num - кол-во товаров в заказе;

  4. sum – цена товара.

Приложение №2 - Функция кодировки пароля (в реализации 1С)

Функция мКодироватьПароль(Парам)
	лСтрОбраб = СокрЛП(Парам);
	лСтрКон   = "";
	Для й = 1 По СтрДлина(лСтрОбраб) Цикл
		лСимв   = Сред(лСтрОбраб, й, 1);
		лЗн     = ""+Формат(КодСимвола(лСимв),"ЧГ=0")+"O";
		лСтрКон = лСтрКон + лЗн;
	КонецЦикла;
	лСтрКон = СтрЗаменить(лСтрКон, "11", "I");
	лСтрКон = лСтрКон + "I10O";
	Возврат лСтрКон;
КонецФункции

Приложение №3 - Формат файла для экспорта товаров из 1С в интернет-магазин

Наименование поля

Описание

1

Артикул

Артикул товара

2

Наименование

Наименование товара

3

Краткое описание

Краткое описание товара

4

Маленькая картинка

Картинка товара

5

Подробное описание

Подробное описание товара

6

Большая картинка

Картинка товара

7

Остаток

Свободный складской остаток товара

8

Цена1

Цена товара по типу цены №1

9

Цена2

Цена товара по типу цены №2

10

Цена3

Цена товара по типу цены №3

11

Цена4

Цена товара по типу цены №4

12

Цена5

Цена товара по типу цены №5

13

Вес

Вес товара (для весовой номенклатуры)

14

Ед.измерения

Единица хранения остатков

15

ISO

Валюта товара

16

Category ID

Код родительской группы товара

17

Parent

Подчиненные товары

18

Характеристика [1-…...]

Наименование характеристики товара

19

Значение [1-…..]

Значения характеристики товара

* Число видов и значений характеристик может варьироваться от 1 до 100 ** Файл должен носить имя upload_X.csv для автоматического определения в магазине, где X - номер файла [1-100]

Для указания нескольких значений одной характеристики используется символ разделитель &&. Например:

Красный&&Синий&&Зеленый

В поле Parent перечисляются через запятую 1С-коды подчиненных товаров (подтипов) у текущего главного товара, данные которого представлены в этой колонке. Например:

e3edf54d-fdab-11e7-82dd-3010b3ebd474,e3edf54e-fdab-11e7-82dd-3010b3ebd474

Если товар не имеет подтипов, то поле Parent остается пустым. Если товар является сам подтипом, то в поле Parent указывается данные в формате размер@цвет. Например:

40@бежевый

Если у подтипа нет цвета, то указывается просто значение подтипа, которое будет показываться перед добавлением в корзину. Например:

40

Приложение №4 - Формат файла для экспорта родительских групп из 1С в интернет-магазин

Наименование поля

Описание

1

CatalogID

Код группы

2

Name

Наименование группы

3

Parent

Код родителя для текущей группы

* Файл должен носить имя tree.csv для автоматического определения в магазине

Приложение №5 - Формат файла для экспорта контрагентов из 1С в интернет-магазин

Наименование поля

Описание

1

Полное наименование

Полное наименование контрагента

2

ИНН

ИНН контрагента

3

КПП

КПП контрагента

4

Адрес

Адрес контрагента

5

Телефон

Телефон контрагента

6

Email

Электронный адрес контрагента

7

Контактное лицо

Основное контактное лицо контрагента

* Файл должен носить имя user.csv для автоматического определения в магазине

Приложение №6 - Перевод даты из формата 1С в Unix time и обратно

В отличии от 1С формат временной метки Unix time задается в целочисленном представлении. Его значение отсчитывается в секундах от полночи 1 января 1970 года по гринвичскому часовому поясу. Поэтому, для получения значения в формате Unix time необходимо добавить число секунд, прошедшее с нуля часов 01.01.1970 года. Реализация в 1С может выглядеть, например, следующим образом:

Функция ПеревестиДатуВЮниксФормат(ДатаВремя1С, Пояс)
	ЧасыПояса     =  Число(Сред(Формат(Пояс,"ДФ=ЧЧ:мм"),1,2));
	МинутыПояса = Число(Сред(Формат(Пояс,"ДФ=ЧЧ:мм"),4,2))/60;
	Возврат ДатаВремя1С - '19700101' - (ЧасыПояса + МинутыПояса)*60*60;
КонецФункции

Функция ПеревестиДатуВ1СФормат(ДатаВремяЮникс, Пояс)
	ЧасыПояса     =  Число(Сред(Формат(Пояс,"ДФ=ЧЧ:мм"),1,2));
	МинутыПояса = Число(Сред(Формат(Пояс,"ДФ=ЧЧ:мм"),4,2))/60;
	Дата1С = '19700101' + Число(ДатаВремяЮникс)+(ЧасыПояса+ МинутыПояса)*60*60;
	Возврат Дата1С
КонецФункции

Все 1C-обработки (*.ert,*.epf.*.dll,*.exe) PHPShop предоставляются в виде скомпилированных файлов без исходных кодов согласно Лицензионному соглашению п 4.7

Last updated