Обмен заказами в формате CommerceML¶
Предупреждение
Информация в данной статье устарела и может использоваться лишь в ознакомительных целях.
Содержание
Процесс обмена заказами между системой учета и CS-Cart осуществляется в два этапа:
- Система учета выгружает статусы заказов в интернет-магазин.
- Интернет магазин выгружает данные заказов в систему учета.
Файл заказов выгружается в папку интернет-магазина:
ваш_домен/var/files/код_компании/exim/1C_ТекущаяДата
Процесс обмена¶
Инициатором обмена между является система учета, при этом выгрузка данных CS-Cart осуществляется с помощью функций модуля “Экспорт и импорт в 1С”:
- exim_1c.php - обрабатывает запросы системы и вызывает функции из файла func.php.
- func.php - содержит функции обработки и загрузки данных.
Примечание
Файлы функций расположены в папке ваш_домен/app/addons/rus_exim_1c/
Старт¶
Загрузка файлов начинается с того, что система отправляет запрос вида:
ваш_домен/exim_1c?type=catalog&mode=checkauth
В ответ CS-Cart с помощью функции exim_1c.php передает системе учета:
- Слово
success
- успех. - Имя Cookie.
- Значение Cookie.
Примечание
Дальнейшие запросы к интернет магазину со стороны системы учета будут содержать имя и значение Cookie. Обработка файлов происходит последовательно.
Загрузка файла orders.xml¶
Система учета загружает в интернет-магазин файл ordersИдентификаторФайла.xml
в папку:
ваш_домен/var/files/код_компании/exim/1C_ТекущаяДата
Обработка файла заказов системы учета ordersИдентификаторФайла.xml
, осуществляется запросом вида:
ваш_домен/app/addons/rus_exim_1c/exim_1c.php?type=sale&mode=file&filename=ordersИдентификаторФайла.xml
Обработка осуществляется с помощью функции fn_exim_1c_import_orders
в файле func.php
.
Выгрузка файла orders.xml¶
Выгрузка заказов из интернет магазина осуществляется запросом вида:
ИнтернетМагазин/exim_1c?type=sale&mode=query
Выгрузка заказов осуществляется пошагово. Модуль интернет-магазина формирует файл с помощью:
- Данные заказа - файл exim_1c.php.
- Данные покупателя - функция
fn_exim_1c_build_customer_info
файла func.php. - Данные товаров - функция
fn_exim_1c_build_order_products
файла func.php.
Пример модификаций¶
Если в процессе работы с модулем необходимо внести какие-либо изменения или добавить новые функции, то все изменения вносятся в файлы папки app/addons/rus_exim_1c/
.
Решение¶
- Откройте файл
/app/addons/rus_exim_1c/addon.xml
- Добавьте новую настройку
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <section id="true_orders" edition_type="ROOT">
<name>Ограничение заказов</name>
<translations>
<item lang="en">Limitation of orders</item>
</translations>
<items>
<item id="exim_1c_export_add_true_orders">
<name>Использовать эту функцию</name>
<translations>
<item lang="en">Use this function</item>
</translations>
<type>checkbox</type>
<default_value/>
</item>
<item id="exim_1c_from_order_id">
<name>Выгружать с номера</name>
<translations>
<item lang="en">Export starting from ID</item>
</translations>
<type>inputbox</type>
</item>
<item id="exim_1c_export_order_statuses">
<name>Статусы ордеров</name>
<translations>
<item lang="en">Order statuses</item>
</translations>
<type>multiple checkboxes</type>
<variants/>
</item>
</items>
</section>
|
- Для добавления выгрузки заказов с указанного файла откройте файл
/app/addons/rus_exim_1c/func.php
- В открывшемся файле найдите функцию
fn_rus_exim_1c_get_orders
(функция вызывается в файле exim_1c.php)
1 2 3 4 5 6 7 8 9 10 | <?php
$number_for_orders = trim(Registry::get('addons.rus_exim_1c.exim_1c_from_order_id'));
if (isset($params['place'])) {
if (!empty($number_for_orders)) {
$order_id = Registry::get('addons.rus_exim_1c.exim_1c_from_order_id');
if (!empty($order_id)) {
$condition .= db_quote(" AND ?:orders.order_id >= ?i", $order_id);
}
}
}
|
- Внесите изменения в функцию
fn_rus_exim_1c_get_orders
, чтобы она осуществляла запрос заказов с указанного номера.
1 2 3 4 5 6 7 8 9 10 | <?php
function fn_rus_exim_1c_get_orders($params, $fields, $sortings, &$condition, $join, $group)
{
if ((Registry::get('addons.rus_exim_1c.exim_1c_export_add_true_orders') == 'Y') && ($params['place'] == 'exim_1c')) {
$order_id = Registry::get('addons.rus_exim_1c.exim_1c_from_order_id');
if (!empty($order_id)) {
$condition .= db_quote(" AND ?:orders.order_id >= ?i", $order_id);
}
}
}
|
- Для просмотра результатов записи данных в какую-либо переменную используйте функцию
fn_print_r($query)
. Функция выведет на экран переменную с остановкой работы скрипта. Возможен вывод нескольких переменных одновременно, просто перечислите через запятуюfn_print_r($a, $b, $array);
Тестирование¶
Обработку файла orders.xml
можно осуществлять через браузер, с помощью запроса в адресной строке.
Для этого необходимо скопировать файл с заказами в папку интернет-магазина:
var/files/код_компании/exim/1С_ТекущаяДата
ТекущаяДата
- в формате ДДММГГГГ
Тестирование загрузки файла ordersИдентификаторФайла.xml¶
Введите в адресной строке:
ваш_домен/exim_1c?type=sale&mode=file&filename=ordersИдентификаторФайла.xml
Пример файла: orders-42a0dc7a-d94f-462a-a20f-0e09261f4c9d.xml
После загрузки всех данных в окне браузера отобразиться слово означающее окончание обработки файла:
success
- успехfailure
- ошибка
Пример просмотра значений переменных
Например, вставьте функцию fn_print_r($order_id)
в функцию fn_exim_1c_import_orders
1 2 3 4 5 6 7 8 9 10 | <?php
function fn_exim_1c_import_orders($xml)
{
$cml = fn_get_cml_tag_names();
$statuses = db_get_hash_array("SELECT status, description FROM ?:status_descriptions WHERE type = 'O' AND lang_code = ?s", 'description', CART_LANGUAGE);
foreach ($orders_data->$cml['document'] as $order_data) {
$order_id = strval($order_data->$cml['id']);
fn_print_r($order_id);
}
}
|
Наберите в браузере:
ваш_домен/exim_1c?type=sale&mode=file&filename=ordersИдентификаторФайла.xml
В окне браузера должно появиться значения переменной $order_id
.
Тестирование выгрузки файла orders.xml¶
Для просмотра файла c заказами, которые будут выгружены из интернет-магазина в систему учета, введите в браузере:
ваш_домен/exim_1c?type=sale&mode=query
В браузере отобразятся заказы выгружаемые из интернет-магазина.
Результат тестирования¶
После обмена данными, можно посмотреть данные о заказах загруженные в интернет-магазин.
В случае ошибок¶
Смотрите: Если возникла ошибка