Не пропусти свежие посты, подпишись:
Начиная с версии ядра 16.x используется новая версия магазина 1C Битрикс, являющаяся частью ядра Битрикс D7, при этом все классы для работы с интернет-магазином собраны в модуле sale, подключите пространство имён модуля интернет-магазин чтобы заработали примеры ниже.


use Bitrix\Sale;

Заказ (Sale\Order)

Заказ представляет собой объект класса Bitrix\Sale\Order. Нужно запомнить, что пока не вызван метод save() этот объект необязательно связан с сохранённым заказом. Также пока вы не вызовете save(), изменения в заказе не будут сохранены в базе данных.

Существующий заказ можно получить по ID или номеру заказа (они могут отличаться):


/** int $orderId идентификатор заказа */
$order = Sale\Order::load($orderId);

/** mixed $orderNumber номер заказа */
$order = Sale\Order::loadByAccountNumber($orderNumber);

Доступ к полям заказа

Ключевые поля заказа можно получить используя следующие методы:

$order->getId(); // ID заказа
$order->getSiteId(); // ID сайта
$order->getDateInsert(); // объект Bitrix\Main\Type\DateTime
$order->getPersonTypeId(); // ID типа покупателя
$order->getUserId(); // ID пользователя

$order->getPrice(); // Сумма заказа
$order->getDiscountPrice(); // Размер скидки
$order->getDeliveryPrice(); // Стоимость доставки
$order->getSumPaid(); // Оплаченная сумма
$order->getCurrency(); // Валюта заказа

$order->isPaid(); // true, если оплачен
$order->isAllowDelivery(); // true, если разрешена доставка
$order->isShipped(); // true, если отправлен
$order->isCanceled(); // true, если отменен


Так же есть универсальный метод getField() при помощи которого поле заказа можно получить по имени:

$order->getField("ORDER_WEIGHT"); // Вес заказа
$order->getField('PRICE'); // Сумма заказа

Для изменения поля, применяется "обратный" метод setField():
//Задаём пользовательский комментарий к заказу
$order->setField('USER_DESCRIPTION', 'Комментарий к текущему заказу заказу');

//Обязательно сохраняем все изменения заказа
$order->save();

Список всех доступных полей можно получить методом getAvailableFields().

Связь заказа с другим сущностями

Заказ имеет связь один-ко-многим с несколькими объектами в виде коллекций - коллекция товаров в корзине (Sale\Basket), коллекция отгрузок (Sale\ShipmentCollection), коллекция оплат (Sale\PaymentCollection) и коллекция свойств заказа (Sale\PropertyValueCollection).

Следовательно есть набор методов чтобы получить способы доставки и оплаты указанные в заказе. Вызов:

$paymentIds = $order->getPaymentSystemId();

вернёт массив идентификаторов способов оплаты заказа. Вызов:

$deliveryIds = $order->getDeliverySystemId();

вернёт массив идентификаторов способов доставки. Работу со свойствами заказа следует рассмотреть подробнее.

Свойства заказа (Sale\PropertyValueCollection)

Свойства заказа представляют собой объекты класса Bitrix\Sale\PropertyValue, собранные в коллекции propertyCollection объекта заказ. Получить коллекцию можно следующим образом:

$propertyCollection = $order->getPropertyCollection();

Чтобы получить значения всех свойств и групп свойств в коллекции доступны метод:

$commonArray = $propertyCollection->getArray(); // массив ['properties' => [..], 'groups' => [..] ];
$groupArray = $propertyCollection->getGroups(); // массив групп свойства
$arPropertyByGroup = $propertyCollection->getGroupProperties($groupId); // массив свойств, относящихся к определённой группе

Часть свойств заказа в 1С Битрикс имеет предопределённое значение. Например email пользователя, адрес доставки и т.п. в мастере создания свойств, такие специальные свойства помечаются соответствующими атрибутами (вкладка Магазин -> Настройки -> Свойства заказа -> Список свойств):

Параметры свойства заказа

На уровне данных, это атрибуты  IS_EMAIL, IS_PAYER, IS_LOCATION, IS_LOCATION4TAX, IS_PROFILE_NAME, IS_ZIP, IS_PHONE, IS_ADDRESS. Для получения таких свойств заказа, предусмотренны специальные методы:


$email = $propertyCollection->getUserEmail();
$name  = $propertyCollection->getPayerName();
$loc   = $propertyCollection->getDeliveryLocation();
$taxLoc = $propertyCollection->getTaxLocation();
$profName = $propertyCollection->getProfileName();
$zip   = $propertyCollection->getDeliveryLocationZip();
$phone = $propertyCollection->getPhone();
$addr  = $propertyCollection->getAddress();

Если вы знаете идентификатор свойства, вы можете получить его значение общим методом:

$somePropValue = $propertyCollection->getItemByOrderPropertyId($orderPropertyId);

Значение свойства, это экземпляр класса Bitrix\Sale\PropertyValue, так же имеет набор полезных методов для работы:

$somePropValue->getValue(); // значение свойства
$somePropValue->getViewHtml(); // представление значения в читаемом виде

И метаданные свойства:

$arProp  = $somePropValue->getProperty(); // массив данных о самом свойстве
$propId  = $somePropValue->getPropertyId(); // ID свойства
$propName = $somePropValue->getName(); // Название
$isRequired = $somePropValue->isRequired(); // true, если свойство обязательное
$propPerson = $somePropValue->getPersonTypeId(); // Тип плательщика
$propGroup  = $somePropValue->getGroupId(); // ID группы

Если вам нужно изменить значение какого-либо свойства, воспользуйтесь методом setValue()

$somePropValue->setValue("some value");
$somePropValue->save();
После манипуляций со свойствами заказа, обязательно нужно сохранить сам заказ иначе он не будет перерассчитан.

$order->save();

Рассмотрим возможности оплаты заказа.

Оплаты заказа (Sale\PaymentCollection)

Получить коллекцию можно следующим образом:

$paymentCollection = $order->getPaymentCollection();

Из полученного объекта коллекции мы можете получить информацию об оплатах и объекте заказа. А именно:

$paymentCollection->isPaid(); // true, если все оплаты оплачены
$paymentCollection->hasPaidPayment(); // true, если хотя бы одна оплата оплачена
$paymentCollection->getPaidSum(); // оплаченная сумма
$paymentCollection->isExistsInnerPayment(); // true, если осуществлена оплата с внутреннего счета

Коллекция состоит из объектов оплаты Sale\Payment и содержит информацию об оплатах, получить доступ к объектам можно перебрав объект коллекции циклом или по индексу массива:
 
//Перебираем объект коллекции
foreach ($paymentCollection as $payment) {

    $sum = $payment->getSum(); // сумма к оплате
    $isPaid = $payment->isPaid(); // true, если оплачена
    $isReturned = $payment->isReturn(); // true, если возвращена

    $ps = $payment->getPaySystem(); // платежная система (объект Sale\PaySystem\Service)
    $psID = $payment->getPaymentSystemId(); // ID платежной системы
    $psName = $payment->getPaymentSystemName(); // название платежной системы
    $isInnerPs = $payment->isInner(); // true, если это оплата с внутреннего счета
}
//Получение объекта оплаты по индексу 
$onePayment = $paymentCollection[0];

Изменить оплату или сделать возврат можно следующими методами:

$onePayment->setPaid("N"); // отмена оплаты
$onePayment->setPaid("Y"); // оплата

/*возврат (деньги возвращаются на внутренний счет или в платежную 
систему, если обработчик реализует интерфейс Sale\PaySystem\IRefund)*/

$onePayment->setReturn("Y"); 

После всех манипуляций нужно сохранять сущность заказа:

$order->save();

Если в вашем компоненте нужно вывести форму оплаты (информацию об оплате и кнопку «Оплатить»), можно воспользоваться следующим способом:
/* $onePayment объект класса Sale\Payment */
$service = Sale\PaySystem\Manager::getObjectById($onePayment->getPaymentSystemId());
$context = \Bitrix\Main\Application::getInstance()->getContext();
$service->initiatePay($onePayment, $context->getRequest());

Вывод

Ядро D7 предоставляет обширный функционал работы с заказами, с более удобной архитектурой и набором методов.


Не пропусти свежие посты, подпишись:
Полезная статья?
(Голосов: 2, Рейтинг: 3.44)
Курсы от партнёров
Хотите освоить востребованную профессию? Воспользуйтесь предложениями от наших партнёров. Пройдите учебный курс по одному из популярных IT направлений.

Все курсы партёнров
Вам также могут понравиться
Кем можно работать в сфере веб-разработки

Кем можно работать в сфере веб-разработки

Хотите начать работать в сфере веб-разработки, но не знаете с чего можно начать? Читайте описание самых популярных веб-профессий, с их описанием, обязанностями и ориентировочными зарплатами.

CSS курсоры

CSS курсоры

В статье рассмотрены возможности изменения курсоров пользователя при помощи CSS

Работа с регистром строк в php

Работа с регистром строк в php

В статье рассмотрены примеры работы с регистром строк в языке PHP, проверка регистра, изменение, инверсия


Комментарии
Защита от автоматических сообщений
CAPTCHA
Введите слово на картинке