Телеграм: @bazarow_ru Почта: mihail@bazarow.ru

Данные о заказе текущего пользователя

Просмотров: 13897

Иногда нужно получить данные о заказе текущего пользователя. Не через компонент, а непосредственно через API Битрикс. Вариантов, где ожто может понадобиться достаточно много. Например: после оформления заказ пользователем, нужно вывести ему всю информацио о заказе.

Или в кабинете пользователя, автоматически заполнить персональные данные в кабинете пользователя, если он не указал иное. В общем, думайте сами, куда это применять. Расскажу просто ою этой возможности

Получаем самый свежий заказ текущего пользователя CSaleOrder::GetList

С помощью метода CSaleOrder::GetList мы можем получить все заказы, сколько бы их ни было, любого пользователя, зная его (пользователя) ID.

 
$arFilter = Array(
    "USER_ID" => 12, //12 Это ID пользователя
);
$db_sales = CSaleOrder::GetList(
      array(), 
     $arFilter
);
while ($ar_sales = $db_sales->Fetch()){
    echo '<pre>';
    print_r($ar_sales);
    echo '</pre>'; 
}

Если нам нужно получить заказы текущего авторизованного пользователя. Просто подставляем в ID - $USER->GetID()

 
$arFilter = Array(
    "USER_ID" => $USER->GetID(),
);
$db_sales = CSaleOrder::GetList(array(), $arFilter);
while ($ar_sales = $db_sales->Fetch()){
    echo '<pre>';
    print_r($ar_sales);
    echo '</pre>'; 
}

Для дальнейших манипуляций нужно получить только самый свежий заказ, при этом достаточно знать только его ID (ID заказа). Для этого, используем параметр для CSaleOrder::GetList arNavStartParams со значением nTopCount = 1. И присвоим переменной $lastorder ID этого заказа

 
$arFilter = Array(
    "USER_ID" => $USER->GetID(),
);
$db_sales = CSaleOrder::GetList(
     array(
         'DATE_INSERT' => 'DESC' // сортируем по дате в сторону убывания
     ), 
     $arFilter,
     false,
     array (
         nTopCount => '1' 
     )
);
while ($ar_sales = $db_sales->Fetch()){
    $lasorderid = $ar_sales['ID']; //присвоили переменной ID заказа
}
arNavStartParams: Массив параметров выборки. Может содержать ключ: "nTopCount" - количество возвращаемых методом записей будет ограничено сверху значением этого ключа

Информация о заказе CSaleOrder::GetList

Теперь, зная ID конкретного заказа мы можем получить информацию о нем и вывести на экран. Для этого используем метод CSaleOrder::GetList

 
CModule::IncludeModule('sale');
$res = CSaleOrder::GetList(array(), array("ID" => $lasorderid)); // ID заказа из переменной
while ($arItemOrder = $res->Fetch()) {
    echo '<pre>';
    print_r($arItemOrder);
    echo '</pre>';
}

Или свойства этого заказа через метод CSaleOrderPropsValue::GetList

 
$arFilter =Array (
        "ORDER_ID" => $lasorderid,
);
$db_sales_ord = CSaleOrderPropsValue::GetList(array(), $arFilter);
while ($ar_salesord = $db_sales_ord->Fetch()){
    echo '<pre>';
    print_r($ar_salesord);
    echo '</pre>';
}

Еще больше методов относящихся к заказу, вы можете найти в официальной документации Битрикс

Получить информацию о заказах на D7

Тоже самое на новом ядре D7. Используем \Bitrix\Sale\Order::getList

 
$dbRes = \Bitrix\Sale\Order::getList([
    'select' => ['ID'],
    'filter' => [
        "ORDER_ID" => $lasorderid, //оплаченные
    ],
]);
while ($order = $dbRes->fetch()){
    echo '
';
    print_r($order);
    echo '
'; }
nikolaevevge 25.03.2019
Михаил, почему то у меня следующий код:

$arFilter=array("ORDER_ID"=>10);
$db_sales_ord = CSaleOrderPropsValue::GetList(array(), $arFilter);
while ($ar_salesord = $db_sales_ord->fetch()) {
 var_dump($ar_salesord);
}

Ничего мне не возвращает. Вот этот участок: $db_sales_ord->fetch() возвращает false.

Заказ с ID 10 точно существует и содержит как товары так и торговые предложения.

В чём может быть дело?
nikolaevevge 25.03.2019
Михаил, если что обсуждение темы на официальном форуме битрикс https://dev.1c-bitrix.ru/community/forums/messages/forum6/topic119399/message58897­7/

Решил вопрос с применением несколько другого функционала на D7, а именно:

$order = \Bitrix\Sale\Order::load(12);
foreach ($order->getBasket()->getBasketItems() as $basketItem ) {
 var_dump($basketItem->getField('NAME'));// Имя
 var_dump($basketItem->getQuantity());// Количество
 var_dump($basketItem->getId());// Ид(фиг знает чего)
 var_dump($basketItem->getProductId());// Ид товара или тп
}
Михаил Базаров 25.03.2019
Цитата
nikolaevevge написал:
Михаил, если что обсуждение темы на официальном форуме битрикс   https://dev.1c-bitrix.ru/community/forums/messages/forum6/topic119399/message58897­ ­7/  

Решил вопрос с применением несколько другого функционала на D7, а именно:

$order = \Bitrix\Sale\Order::load(12);
foreach ($order->getBasket()->getBasketItems() as $basketItem ) {
 var_dump($basketItem->getField('NAME'));// Имя
 var_dump($basketItem->getQuantity());// Количество
 var_dump($basketItem->getId());// Ид(фиг знает чего)
 var_dump($basketItem->getProductId());// Ид товара или тп
}
Да, заметка староватая. Чуть позже дополню ее с D7 - там можно еще эффективнее решить.

Записная книжка разработчика

Примерно с 2013-го года пишу заметки по разработке сайтов на Битрикс.
Вы можете задавать уточняющие вопросы в комментариях- отвечаю или дополняю заметки по возможности.

Наличие на складах в умном фильтре 1С-Битрикс, с автоматическим обнов... Просмотров: 1116 Задача: добавить возможность фильтрации товаров по складам в умном фильтре. Данные должны ... Глобальные фильтры на всякие случаи жизни Просмотров: 47108 Глобальный фильтр, нужен чаще всего, для вывода определенных элементов, из общего массива... Установить цену товара из свойства инфоблока Просмотров: 10054 На одном из проектов, нужно было единоразово заполнить цены товаров из свойства инфоблока... Подключение SSL на Битрикс виртуальная машина Просмотров: 13280 С первого января 2017 года, наличие безопасного соединения HTTPS становится практически об... Ссылка и название раздела в списке новостей Битрикс Просмотров: 11470 Если нужно вывести название раздела инфоблока в котором находится конкретный элемент/новос... Вывести разделы инфоблока в которых находится элемент Битрикс Просмотров: 17017 Если нужно в карточке товара или новости, вывести структуру разделов в котором находится э... Если товар в корзине, поменять кнопку на "В корзине" в новом шаблоне ... Просмотров: 1769 Ранее я уже делал заметку на эту тему. Тогда, мы меняли значение input-а при добавлении то... Создание локальных уведомлений для приложения на Apache Cordova Просмотров: 233 Задача состоит в том, чтобы реализовать возможность локальных уведомлений в приложении на ... Вывести минимальную цену торговых предложений в Битрикс Просмотров: 28104 Если у товара несколько торговых предложений и у каждого предложения разные цены, иногда т... Простой WEB сервер на ubuntu, для Битрикс Просмотров: 35932 Расскажу как по быстрому сконфигурировать WEB сервер для работы с Битрикс. Безо всяких ngi... Пункты меню из разделов инфоблока Битрикс Просмотров: 93239 В принципе это стандартная возможность системы управления битрикс, но почему-то часто спра... Отфильтровать новости в Битрикс за заданный период Просмотров: 16693 Иногда, нужно отфильтровать элементы (новости например) по дате в Битрикс, с помощью компо... Создать pdf файл из элемента инфоблока, дать скачать пользователю, по... Просмотров: 5332 Задача: при каждом посещении статьи, на сайте, нужно создавать pdf файл с ее содержимым и ... Минимальная сумма заказа в корзине и оформлении заказа в 1С-Битрикс Просмотров: 9783 В этой заметке добавим возможность установки минимальной суммы заказа, в новом шаблоне кор... Вывести минимальную и максимальную цену в разделе каталога Битрикс. Просмотров: 3665 Что бы вывести минимальную и максимальную стоимость товаров, из каталога 1С-Битрикс, доста... Помечаем новинки лейблом в каталоге битрикс Просмотров: 20850 Достаточно часто, при разработке каталога товаров или интернет магазина на системе управле... Очистить брошенные корзины с помощью API 1С-Битрикс Просмотров: 1121 Задача: в интернет-магазине накапливается большое количество брошенных корзин, нужно их оч... Отсортировать элементы в Битрикс по свойству привязка к разделам Просмотров: 28993 При создании достаточно сложных интернет-магазинов на Битрикс, иногда встает задача помимо... Фотогалерея на базе компонента новостей, с fancybox. Просмотров: 2906 Это заметка обновление к очень старой, уже имеющейся на сайте. Сделаем что-то типа фотогал... Увидеть файл заказов который передаст Битрикс в 1С Просмотров: 24495 Для диагностики обмена заказов, интернет-магазина на 1С Битрикс с 1С Управление Торговлей,...