Начиная с версии ядра 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 предоставляет обширный функционал работы с заказами, с более удобной архитектурой и набором методов.


Полезная статья?
(Нет голосов)
Курсы от партнёров
Хотите освоить востребованную профессию? Воспользуйтесь предложениями от наших партнёров. Пройдите учебный курс по одному из популярных IT направлений.
Вам также могут понравиться
Создание заказа в 1С Битрикс D7

Создание заказа в 1С Битрикс D7

Рассмотрим пример создания произвольного заказа средствами ядра D7

Объективно о преимуществах и недостатках 1С-Битрикс

Объективно о преимуществах и недостатках 1С-Битрикс

С развитием интернета появилось много платформ, которые помогают начинающим бизнесменам создать и сделать рентабельным и успешным интернет-магазин. Но подобрать действительно эффективную площадку не так-то просто. Что необходимо знать, чтобы не прогореть, какой тип платформы выбрать. Об этом поговорим в этой статье.


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