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

Данные о заказе текущего пользователя
Просмотров: 3706 | Комментариев: 2

Иногда нужно получить данные о заказе текущего пользователя. Не через компонент, а непосредственно через 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 заказа). Для этого, просто оборвем выполнение цикла на первой итерации. И просто присвоим переменной $lastorder ID этого заказа

 
$arFilter = Array(
        "USER_ID" => $USER->GetID(),
    );
    $db_sales = CSaleOrder::GetList(array(), $arFilter);
    while ($ar_sales = $db_sales->Fetch())
    {
        $lasorderid = $ar_sales['ID']; //присвоили переменной ID заказа
    break; //оборвали цикл
    }

Информация о заказе 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>';
    }

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

nikolaevevge
Михаил, почему то у меня следующий код:

$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
Михаил, если что обсуждение темы на официальном форуме битрикс 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());// Ид товара или тп
}
Михаил Базаров
Цитата
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 - там можно еще эффективнее решить.