artmouse
★ ★ ★ ★ ★
- Регистрация
- 16 Июн 2007
- Сообщения
- 395
- Реакции
- 903
Ну, уже большое дело сделано!
Выгрузка на сайт - это файл commerceML?
Выгружает наименование, цену (или цены?), изображения и описания? Или что-то еще?
Запуск ручной или по расписанию?
Как скармливать магенте выгруженный файл?
Начинание интересное, сделано немало, готов включится в продолжение примерно через неделю (как закончу текущие проекты).
Ну, что бы понимать всю картину немного разжую как все работает.
Мадженто как бы находится в "ждущем режиме" и на стороне сервера ничего не делает. Нет ни расписания, ни кнопки "Загрузить файл" (хотя можно наверное сделать такой вариант.
Все, что нужно сделать это создать модуль который сможет принимать запросы из вне. Это очень просто реализуется путем создания роутера и контроллера в модуле. Роутер как бы создает отдельный адрес (в нашем случае это будет мой.сайт/connect1c) к которому можно будет обращаться, так сказать точка входа, а контроллер будет все эти обращения обрабатывать. А остальные механизмы будут реализованы в моделях и хелперах.
А вот в 1С уже настраивается периодичность обмена и возможность полной или частичной (только измененные объекты) выгрузки. Так же указываются типы цен которые выгружаются и определяются товары и категории для выгрузки. Изображения и описания идут отдельными файлами. Все это так же можно перед отправкой сжимать и уже в архиве передавать на сайт, но при этом сайт должен подтвердить в запросе, что имеется возможность работать с архивами (zip=yes или zip=no), а так же вернуть значение максимально допустимого размера файла в байтах (file_limit=<число>) и тогда 1с сможет разбить архив на части. Подробнее тут: Для просмотра ссылки Войдиили Зарегистрируйся.
Собственно мадженто начинает реагировать на 1с и уже потом выполняется какой то код в зависимости от запросов...
На каждый запрос происходит действие:
[spoil]
[/spoil]
И когда обе стороны договорись 1С начинает отправлять данные на сервер. По сути обычный XML...
[spoil]
[/spoil]
И потом уже это все обрабатывается Маджентой...
Потом в таком же виде передается информация о заказах с учетом последней даты обмена.
Все, что нужно сделать это создать модуль который сможет принимать запросы из вне. Это очень просто реализуется путем создания роутера и контроллера в модуле. Роутер как бы создает отдельный адрес (в нашем случае это будет мой.сайт/connect1c) к которому можно будет обращаться, так сказать точка входа, а контроллер будет все эти обращения обрабатывать. А остальные механизмы будут реализованы в моделях и хелперах.
А вот в 1С уже настраивается периодичность обмена и возможность полной или частичной (только измененные объекты) выгрузки. Так же указываются типы цен которые выгружаются и определяются товары и категории для выгрузки. Изображения и описания идут отдельными файлами. Все это так же можно перед отправкой сжимать и уже в архиве передавать на сайт, но при этом сайт должен подтвердить в запросе, что имеется возможность работать с архивами (zip=yes или zip=no), а так же вернуть значение максимально допустимого размера файла в байтах (file_limit=<число>) и тогда 1с сможет разбить архив на части. Подробнее тут: Для просмотра ссылки Войди
Собственно мадженто начинает реагировать на 1с и уже потом выполняется какой то код в зависимости от запросов...
На каждый запрос происходит действие:
[spoil]
PHP:
class Art_1C_IndexController extends Mage_Core_Controller_Front_Action {
protected $_dir = 'var/exchange_1c/';
public function indexAction() {
$type = $this->getRequest ()->getParam ( 'type' );
$mode = $this->getRequest ()->getParam ( 'mode' );
$info = $this->getRequest ();
switch ($type) {
case "catalog" :
/**
* Выгрузка каталогов продукции
*/
switch ($mode) {
case "checkauth" :
$this->catalogCheckauthAction ();
break;
case "init" :
$this->catalogInitAction ();
break;
case "file" :
$this->catalogFileAction ();
break;
case "import" :
$this->catalogImportAction ();
break;
default :
echo "failure" . PHP_EOL . "Указан неверный параметр при обмене информацией о товарах";
break;
}
break;
case "sale" :
/**
* Обмен информацией о заказах
*/
switch ($mode) {
case "checkauth" :
$this->saleCheckauthAction ();
break;
case "init" :
$this->saleInitAction ();
break;
case "query" :
$this->saleQueryAction ();
break;
case "success" :
$this->saleSuccessAction ();
break;
case "file" :
$this->saleFileAction ();
break;
default :
echo "failure" . PHP_EOL . "Указан неверный параметр при обмене информацией о заказах";
break;
}
break;
default :
echo "failure" . PHP_EOL . "Указан неверный тип параметра";
break;
}
}
И когда обе стороны договорись 1С начинает отправлять данные на сервер. По сути обычный XML...
[spoil]
Код:
<?xml version="1.0" encoding="UTF-8"?>
<КоммерческаяИнформация ВерсияСхемы="2.04" ДатаФормирования="2013-12-05T14:44:35">
<Классификатор>
<Ид>f42f9005-338a-4638-b822-2eaddf6fd864</Ид>
<Наименование>Классификатор (Основной каталог товаров)</Наименование>
<Владелец>
<Ид>9e0a6c78-5a5e-11e3-bdb3-cc52aff6d2be</Ид>
<Наименование>Организация</Наименование>
</Владелец>
<Группы>
<Группа>
<Ид>9e0a6c89-5a5e-11e3-bdb3-cc52aff6d2be</Ид>
<Наименование>Тестовая группа 1</Наименование>
<Группы/>
</Группа>
</Группы>
</Классификатор>
<Каталог СодержитТолькоИзменения="false">
<Ид>f42f9005-338a-4638-b822-2eaddf6fd864</Ид>
<ИдКлассификатора>f42f9005-338a-4638-b822-2eaddf6fd864</ИдКлассификатора>
<Наименование>Основной каталог товаров</Наименование>
<Владелец>
<Ид>9e0a6c78-5a5e-11e3-bdb3-cc52aff6d2be</Ид>
<Наименование>Организация</Наименование>
</Владелец>
<Товары>
<Товар>
<Ид>9e0a6c88-5a5e-11e3-bdb3-cc52aff6d2be</Ид>
<Артикул>666666</Артикул>
<Наименование>Тестовый товар 1</Наименование>
<БазоваяЕдиница Код="796" НаименованиеПолное="Штука" МеждународноеСокращение="PCE">шт</БазоваяЕдиница>
<ПолноеНаименование>Тестовый товар 1</ПолноеНаименование>
<Группы>
<Ид>9e0a6c89-5a5e-11e3-bdb3-cc52aff6d2be</Ид>
</Группы>
<Описание>Описание)))</Описание>
<Картинка>import_files/9e/9e0a6c885a5e11e3bdb3cc52aff6d2be_c683a85cc0fe4c41af432f109e8c05a4.jpg</Картинка>
<Картинка>import_files/9e/9e0a6c885a5e11e3bdb3cc52aff6d2be_76753c3874904028a405e8d506c832be.jpg</Картинка>
<СтавкиНалогов>
<СтавкаНалога>
<Наименование>НДС</Наименование>
<Ставка>20</Ставка>
</СтавкаНалога>
</СтавкиНалогов>
<ЗначенияРеквизитов>
<ЗначениеРеквизита>
<Наименование>Файл</Наименование>
<Значение>import_files/9e/9e0a6c885a5e11e3bdb3cc52aff6d2be_1a2dec13cc094ce7b9412850b0bfe530.file</Значение>
</ЗначениеРеквизита>
<ЗначениеРеквизита>
<Наименование>ОписаниеФайла</Наименование>
<Значение>import_files/9e/9e0a6c885a5e11e3bdb3cc52aff6d2be_c683a85cc0fe4c41af432f109e8c05a4.jpg#magento-mobile-dashboard-10-0-s-386x470</Значение>
</ЗначениеРеквизита>
<ЗначениеРеквизита>
<Наименование>ОписаниеФайла</Наименование>
<Значение>import_files/9e/9e0a6c885a5e11e3bdb3cc52aff6d2be_76753c3874904028a405e8d506c832be.jpg#Кот</Значение>
</ЗначениеРеквизита>
<ЗначениеРеквизита>
<Наименование>ОписаниеФайла</Наименование>
<Значение>import_files/9e/9e0a6c885a5e11e3bdb3cc52aff6d2be_1a2dec13cc094ce7b9412850b0bfe530.file#Кот</Значение>
</ЗначениеРеквизита>
<ЗначениеРеквизита>
<Наименование>ВидНоменклатуры</Наименование>
<Значение>Товары</Значение>
</ЗначениеРеквизита>
<ЗначениеРеквизита>
<Наименование>ТипНоменклатуры</Наименование>
<Значение>Товар</Значение>
</ЗначениеРеквизита>
<ЗначениеРеквизита>
<Наименование>Полное наименование</Наименование>
<Значение>Тестовый товар 1</Значение>
</ЗначениеРеквизита>
</ЗначенияРеквизитов>
</Товар>
</Товары>
</Каталог>
</КоммерческаяИнформация>
И потом уже это все обрабатывается Маджентой...
Потом в таком же виде передается информация о заказах с учетом последней даты обмена.