Обмен заказами в формате 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

Выгрузка заказов осуществляется пошагово. Модуль интернет-магазина формирует файл с помощью:

  1. Данные заказа - файл exim_1c.php.
  2. Данные покупателя - функция fn_exim_1c_build_customer_info файла func.php.
  3. Данные товаров - функция fn_exim_1c_build_order_products файла func.php.

Успех

В случае успешной загрузки данных система учета передает строку со словом “success”, в случае конфликта “failure”.

После обмена сформированные файлы с данными из системы сохранятся в папке:

ваш_домен/var/files/код_компании/exim/1C_ТекущаяДата

Пример модификаций

Если в процессе работы с модулем необходимо внести какие-либо изменения или добавить новые функции, то все изменения вносятся в файлы папки app/addons/rus_exim_1c/.

Задача

Необходимо настроить выгрузку заказов с указанного номера.

Решение

  1. Откройте файл /app/addons/rus_exim_1c/addon.xml
  2. Добавьте новую настройку
 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>
  1. Для добавления выгрузки заказов с указанного файла откройте файл /app/addons/rus_exim_1c/func.php
  2. В открывшемся файле найдите функцию 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);
        }
    }
}
  1. Внесите изменения в функцию 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);
        }
    }
}
  1. Для просмотра результатов записи данных в какую-либо переменную используйте функцию 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

В браузере отобразятся заказы выгружаемые из интернет-магазина.

Результат тестирования

После обмена данными, можно посмотреть данные о заказах загруженные в интернет-магазин.