D7: Загрузка заказа и чтение статуса/оплаты/доставки
Загрузка заказа через \Bitrix\Sale\Order::load() и получение информации о статусе, оплате и доставке через коллекции.
Как использовать
- Скопируйте нужный фрагмент кода.
- Вставьте в свой проект и при необходимости измените под задачу.
- Проверьте зависимости и окружение (версии, переменные).
Загрузка заказа через 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().