г.Брянск, Пн-Пт 9:00 – 18:00, Сб 10:00 – 17:00

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

Автор:

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

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

Иногда требуется выгрузить заказы в какую-то внешнюю систему, отличную от 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);
241027, Россия, Брянская область, поселок Путевка, улица Рослальская, дом 8, кв.121
Телефон: +7 (950) 692-91-71

Иногда требуется выгрузить заказы в какую-то внешнюю систему, отличную от 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С-Битрикс

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

Адаптивное ютуб видео на сайте
В этом уроке я покажу вам один из способов адаптировать видео, размещенное на сайте с помощью тега iframe, например, видео с хостинга Ютуб.
Проблема кеширования левого меню в решениях АСПРО
В последнее время пользователи сайтов, работающих на решениях компании АСПРО, сталкиваются с тем, что в разных разделах сайта левое меню не меняется, хотя оно разное для каждого из этих разделов. В данном видео показан способ обхода этой проблемы
Как изменить картинку метки в компоненте Яндекс.Карт Битрикс
Стандартный компонент "Настраиваемая Яндекс.Карта" не имеет настройки для изменения изображения меток. В качестве изображения метки используется стандартный значок. В этом видео я покажу, как изменить стандартное изображением меток через код компонента


Разработка