PHP
#bitrix#sale#order#php#d7#payment#shipment

D7: Загрузка заказа и чтение статуса/оплаты/доставки

Загрузка заказа через \Bitrix\Sale\Order::load() и получение информации о статусе, оплате и доставке через коллекции.

Как использовать

  1. Скопируйте нужный фрагмент кода.
  2. Вставьте в свой проект и при необходимости измените под задачу.
  3. Проверьте зависимости и окружение (версии, переменные).

Загрузка заказа через D7 API и получение информации о статусе, оплате и доставке. Используйте в обработчиках заказов, личном кабинете, уведомлениях для работы с данными заказа.

use Bitrix\Main\Loader;
use Bitrix\Sale\Order;

/**
 * Загрузить заказ и получить основную информацию
 * @param int $orderId ID заказа
 * @return array|false Массив с данными заказа или false
 */
function loadOrderInfo($orderId) {
    if (!Loader::includeModule('sale')) {
        return false;
    }
    
    $order = Order::load($orderId);
    if (!$order) {
        return false;
    }
    
    $orderFields = $order->getFieldValues();
    
    // Получаем статус заказа
    $statusId = $order->getField('STATUS_ID');
    $status = \CSaleStatus::GetByID($statusId);
    
    // Получаем коллекцию оплат
    $paymentCollection = $order->getPaymentCollection();
    $payments = [];
    foreach ($paymentCollection as $payment) {
        $payments[] = [
            'ID' => $payment->getId(),
            'PAID' => $payment->getField('PAID') === 'Y',
            'SUM' => $payment->getField('SUM'),
            'PAY_SYSTEM_ID' => $payment->getField('PAY_SYSTEM_ID'),
            'PAY_SYSTEM_NAME' => $payment->getField('PAY_SYSTEM_NAME')
        ];
    }
    
    // Получаем коллекцию отгрузок
    $shipmentCollection = $order->getShipmentCollection();
    $shipments = [];
    foreach ($shipmentCollection as $shipment) {
        $shipments[] = [
            'ID' => $shipment->getId(),
            'DEDUCTED' => $shipment->getField('DEDUCTED') === 'Y',
            'DELIVERY_ID' => $shipment->getField('DELIVERY_ID'),
            'DELIVERY_NAME' => $shipment->getField('DELIVERY_NAME'),
            'TRACKING_NUMBER' => $shipment->getField('TRACKING_NUMBER')
        ];
    }
    
    return [
        'ORDER' => $orderFields,
        'STATUS' => $status,
        'PAYMENTS' => $payments,
        'SHIPMENTS' => $shipments,
        'TOTAL_PRICE' => $order->getPrice(),
        'CURRENCY' => $order->getCurrency()
    ];
}

Usage:

// В обработчике или компоненте
$orderInfo = loadOrderInfo(12345);

if ($orderInfo) {
    echo 'Заказ #' . $orderInfo['ORDER']['ACCOUNT_NUMBER'];
    echo 'Статус: ' . $orderInfo['STATUS']['NAME'];
    echo 'Сумма: ' . $orderInfo['TOTAL_PRICE'] . ' ' . $orderInfo['CURRENCY'];
    
    // Проверяем оплату
    foreach ($orderInfo['PAYMENTS'] as $payment) {
        if ($payment['PAID']) {
            echo 'Оплачено: ' . $payment['SUM'];
        }
    }
    
    // Проверяем отгрузку
    foreach ($orderInfo['SHIPMENTS'] as $shipment) {
        if ($shipment['DEDUCTED']) {
            echo 'Отгружено. Трек-номер: ' . $shipment['TRACKING_NUMBER'];
        }
    }
}

Notes:

⚠️ Order::load() возвращает объект заказа или null если заказ не найден. Коллекции оплат и отгрузок доступны только после загрузки заказа. Для работы с заказами модуль sale должен быть подключен. Статус заказа получается через CSaleStatus::GetByID().