Top.Mail.Ru
Получить заказы пользователя с сортировкой по дате создания - разработка и поддержка сайтов BUSSOL

Получить заказы пользователя с сортировкой по дате создания



Автор:

Дата публикации:

Получить заказы пользователя с сортировкой по дате создания

Иногда требуется выгрузить заказы в какую-то внешнюю систему, отличную от 1С, в формате XML или JSON для их дальнейшей обработки. Рассмотрим как это можно сделать на примере Bitrix Framework. Предположим, что внешняя система должна получить данные заказа пользователя по его ID, отправляя на сайт GET-запрос. Создадим на сайте файл, допустим, /local/api/getorders.php. В файле подключим пролог, класс Loader и установим кодировку utf-8:


header('Content-Type: application/json; charset=utf-8');
use Bitrix\Main\Loader;

Далее, обработаем GET-параметр uid, в котором передается ID пользователя на сайте:


$query = $_GET['uid'];	
$query = trim(htmlspecialchars(strip_tags($query)));

if (!$query) {
	echo json_encode(["error" => "Пустой запрос"]);
}
if (!Loader::includeModule('sale')) {
	echo json_encode(["error" => "Модуль sale не подключен"]);
	exit;
}

Здесь мы также проверяем доступность модуля sale (Интернет-магазин) и если он отсутствует в системе, то будет выдано сообщение об ошибке. Также, если GET-запрос окажется пустым, то тоже будет возвращаться сообщение об ошибке. Далее, используя метод GetList класса CSaleOrder модуля sale получаем все заказы пользователя по его ID, отсортированные по убыванию даты создания заказа:


$arFilter = Array(
   "USER_ID" => $_GET["uid"], 
);

$db_sales = CSaleOrder::GetList(
    array("DATE_INSERT" => 'DESC'), 
    $arFilter
);

Заказы мы получили. Но, чтобы передать их во внешнюю систему, нужно сформировать массив заказов $result только с нужными данными, конвертировать его в JSON и предать:


$result = [];
 
while ($ar_sales = $db_sales->Fetch()){
	$arStatus = CSaleStatus::GetByID($ar_sales["STATUS_ID"], "RU");

	$result[] = [
		"oid" => $ar_sales["ID"], // ID заказа
		"onum" => $ar_sales["ACCOUNT_NUMBER"], // номер заказа
		"date" => $ar_sales["DATE_INSERT"], // дата создания заказа
		"summ" => $ar_sales["PRICE"], // сумма заказа
		"status" => $arStatus["NAME"], // статус заказа
	];
}

echo json_encode($result, JSON_UNESCAPED_UNICODE);

Обратите внимание на то, что статус заказа мы должны получить по его коду с помощью метода GetByID класса CSaleStatus модуля интернет-магазин. Ниже полный листинг примера:


require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
header('Content-Type: application/json; charset=utf-8');
use Bitrix\Main\Loader;

$query = $_GET['uid'];	
$query = trim(htmlspecialchars(strip_tags($query)));
 
if (!$query) {
	echo json_encode(["error" => "Пустой запрос"]);
}
if (!Loader::includeModule('sale')) {
	echo json_encode(["error" => "Модуль sale не подключен"]);
	exit;
}
 
$arFilter = Array(
   "USER_ID" => $_GET["uid"], 
);

$db_sales = CSaleOrder::GetList(
    array("DATE_INSERT" => 'DESC'), 
    $arFilter
);

$result = [];
 
while ($ar_sales = $db_sales->Fetch()){
	$arStatus = CSaleStatus::GetByID($ar_sales["STATUS_ID"], "RU");

	$result[] = [
		"oid" => $ar_sales["ID"],
		"onum" => $ar_sales["ACCOUNT_NUMBER"],
		"date" => $ar_sales["DATE_INSERT"],
		"summ" => $ar_sales["PRICE"],
		"status" => $arStatus["NAME"],
	];
}

echo json_encode($result, JSON_UNESCAPED_UNICODE);
241519, Россия, Брянская область, поселок Путевка, улица Рослальская, дом 8, кв.121
Телефон: +7 (953) 271 62 24

Иногда требуется выгрузить заказы в какую-то внешнюю систему, отличную от 1С, в формате XML или JSON для их дальнейшей обработки. Рассмотрим как это можно сделать на примере Bitrix Framework. Предположим, что внешняя система должна получить данные заказа пользователя по его ID, отправляя на сайт GET-запрос. Создадим на сайте файл, допустим, /local/api/getorders.php. В файле подключим пролог, класс Loader и установим кодировку utf-8:


header('Content-Type: application/json; charset=utf-8');
use Bitrix\Main\Loader;

Далее, обработаем GET-параметр uid, в котором передается ID пользователя на сайте:


$query = $_GET['uid'];	
$query = trim(htmlspecialchars(strip_tags($query)));

if (!$query) {
	echo json_encode(["error" => "Пустой запрос"]);
}
if (!Loader::includeModule('sale')) {
	echo json_encode(["error" => "Модуль sale не подключен"]);
	exit;
}

Здесь мы также проверяем доступность модуля sale (Интернет-магазин) и если он отсутствует в системе, то будет выдано сообщение об ошибке. Также, если GET-запрос окажется пустым, то тоже будет возвращаться сообщение об ошибке. Далее, используя метод GetList класса CSaleOrder модуля sale получаем все заказы пользователя по его ID, отсортированные по убыванию даты создания заказа:


$arFilter = Array(
   "USER_ID" => $_GET["uid"], 
);

$db_sales = CSaleOrder::GetList(
    array("DATE_INSERT" => 'DESC'), 
    $arFilter
);

Заказы мы получили. Но, чтобы передать их во внешнюю систему, нужно сформировать массив заказов $result только с нужными данными, конвертировать его в JSON и предать:


$result = [];
 
while ($ar_sales = $db_sales->Fetch()){
	$arStatus = CSaleStatus::GetByID($ar_sales["STATUS_ID"], "RU");

	$result[] = [
		"oid" => $ar_sales["ID"], // ID заказа
		"onum" => $ar_sales["ACCOUNT_NUMBER"], // номер заказа
		"date" => $ar_sales["DATE_INSERT"], // дата создания заказа
		"summ" => $ar_sales["PRICE"], // сумма заказа
		"status" => $arStatus["NAME"], // статус заказа
	];
}

echo json_encode($result, JSON_UNESCAPED_UNICODE);

Обратите внимание на то, что статус заказа мы должны получить по его коду с помощью метода GetByID класса CSaleStatus модуля интернет-магазин. Ниже полный листинг примера:


require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
header('Content-Type: application/json; charset=utf-8');
use Bitrix\Main\Loader;

$query = $_GET['uid'];	
$query = trim(htmlspecialchars(strip_tags($query)));
 
if (!$query) {
	echo json_encode(["error" => "Пустой запрос"]);
}
if (!Loader::includeModule('sale')) {
	echo json_encode(["error" => "Модуль sale не подключен"]);
	exit;
}
 
$arFilter = Array(
   "USER_ID" => $_GET["uid"], 
);

$db_sales = CSaleOrder::GetList(
    array("DATE_INSERT" => 'DESC'), 
    $arFilter
);

$result = [];
 
while ($ar_sales = $db_sales->Fetch()){
	$arStatus = CSaleStatus::GetByID($ar_sales["STATUS_ID"], "RU");

	$result[] = [
		"oid" => $ar_sales["ID"],
		"onum" => $ar_sales["ACCOUNT_NUMBER"],
		"date" => $ar_sales["DATE_INSERT"],
		"summ" => $ar_sales["PRICE"],
		"status" => $arStatus["NAME"],
	];
}

echo json_encode($result, JSON_UNESCAPED_UNICODE);

Другие статьи:  Сделать информер "Товары добавлены в корзину" вместо стандартного окна / Как в Битрикс сделать уникальным название элемента инфоблока с помощью Bitrix API / Получить дополнительные поля раздела инфоблока в 1С-Битрикс

Похожие статьи

Технология композитный сайт
С технологией Автокомпозит - больше не требуется глубоких настроек и сложного программирования. Композитный режим включается нажатием одной кнопки в административном разделе сайта
Подключение скриптов и стилей в 1С-Битрикс
В 1С-Битрикс файлы скриптов и стилей можно подключать через тег <link /> обычным способом. И от этого ничего не пострадает. Однако при таком способе подключения не будет возможности управлять стилями и скриптами из админки...
Интеграция «1С-Битрикс: Управление сайтом» и «1С:Предприятие»
Интеграция сайта с системами «1С:Предприятие» необходима любому бизнесу, который работает с клиентами онлайн. Без неё интернет-магазин просто не может быть конкурентоспособным – обработка заказа будет занимать больше времени, чем клиент может позволить.
Ошибка! innodb_strict_mode=on, требуется off в Битрикс
В 1С-Битрикс.Управление сайтом, обычно сразу после установки, при тестировании системы появляется ошибка в строке Режим работы MySql  "Ошибка! innodb_strict_mode=ON, требуется OFF". Из-за этой ошибки часть функционала Битрикс может не работать.