О web-разработке
и даже немного больше...

Работа с заказами в битрикс D7

Для реализации возможностей интернет-магазина в системе битрикс используется модуль sale. С помощью данного модуля становятся доступными возможности работы с корзиной, оформления заказов, работа с покупателями, а также другой необходимый функционал. Для бизнеса, в большинстве случаев, стандартных компонентов оформления заказов иногда бывает достаточно. Однако это не исключает возможность реализации своего функционала для работы с заказами на уровне API. В данном посту мы рассмотрим простые примеры использования API битрикса ядра D7.

Перед использованием API для работы с заказами следует подключить модуль «sale»:

\Bitrix\Main\Loader::includeModule('sale');
use Bitrix\Sale\Order,
    Bitrix\Sale\Basket,
    Bitrix\Sale\Delivery,
    Bitrix\Sale\PaySystem;

Получение полей заказа

Зная ID заказа, мы можем получить поля заказа, а также внести какие-либо изменения в них.

$order = \Bitrix\Sale\Order::load($orderId); // объект заказа
$order->getFields(); // получение полей заказа
$order->getField("DELIVERY_ID"); // ID службы доставки
$order->setField('PAYED', 'N'); // изменить любой параметр
$order->save(); // и сохраняем

Используя ID заказа мы инициализировали объект заказа, посредством метода load(), и присвоили переменной $order. Для получения полей заказа, мы выполнили метод getFields(). После этого нам становятся доступны поля для работы с ними. Так в примере через метод getField() мы получили значение DELIVERY_ID. Передавая таким образом символьный код этому методу мы можем получать значение этих полей в заказе. Далее используя метод setField() мы присвоили полю PAYED значение «N». Чтобы изменения записались в системе, следует так же выполнить метод save(). Использовать этот метод нужно лишь в том случае, когда мы вносим изменения в текущий заказ, и вызывается он в последнюю очередь. Таблица с описанием полей заказа опубликована в конце статьи.

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

$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, если отменен

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

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

 
// товары для добавления в корзину
$arItems = array(
	array(
		'PRODUCT_ID' => 150,
		'NAME' => 'Наименование товара', 
		'PRICE' => 25000,
		'CURRENCY' => 'KZT',
		'QUANTITY' => 1
	)
);

// создаём корзину, и добавляем в неё товары
$basket = \Bitrix\Sale\Basket::create(SITE_ID);
foreach ($arItems as $i => $arItem) {
	$basketItem = $basket->createItem("catalog", $arItem['PRODUCT_ID']);
	$basketItem->setFields($arItem);
}

// создаем заказ, связываем корзину с заказом (перерасчет происходит автоматически)
$order = \Bitrix\Sale\Order::create(SITE_ID, $userId);
$order->setPersonTypeId($personTypeId);
$order->setBasket($basket);

// создаём отгрузку заказа
$shipmentCollection = $order->getShipmentCollection();
$shipment = $shipmentCollection->createItem(
	\Bitrix\Sale\Delivery\Services\Manager::getObjectById(1)
);
$shipmentItemCollection = $shipment->getShipmentItemCollection();

foreach ($basket as $basketItem) {
	$item = $shipmentItemCollection->createItem($basketItem);
	$item->setQuantity($basketItem->getQuantity());
}

// создаём оплату заказа
$paymentCollection = $order->getPaymentCollection();
$payment = $paymentCollection->createItem(
	\Bitrix\Sale\PaySystem\Manager::getObjectById(1)
);
$payment->setField("SUM", $order->getPrice());
$payment->setField("CURRENCY", $order->getCurrency());

// сохраняем все параметры заказа
$result = $order->save();
if ($result->isSuccess()) {
	echo 'Заказ успешно создан!';
} else {
	echo $result->getError();
}

Аналогично как и в предыдущем примере все изменения заказа сохраняются посредством метода save(). В примере выше добавляется только один товар, однако на практике можно добавлять их целое множество, посредством массива $arItems.

Обновление заказа в битрикс D7

В самом первом примере мы уже рассматривали возможность обновления полей заказа. Там, посредством использования метода setField() мы задавали значения поля заказа. При работе с заказом так же бывает требуется обновить другие данные заказа, которые обновляются немного иначе. Допустим нам требуется разрешить отгрузку заказа, для этого мы может выполнить такую операцию:

// получаем объект заказа
$order = \Bitrix\Sale\Order::load($orderId);

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

// получаем объекты отгрузки
$shipmentCollection = $order->getShipmentCollection();

foreach ($shipmentCollection as $shipment) {
	if (!$shipment->isSystem()) {
		$shipment->allowDelivery(); // разрешаем отгрузку
	}
}

// сoхраняем изменения заказа
$result = $order->save();
if ($result->isSuccess()) {
	echo 'Изменения сохранены успешно!';
} else {
	echo $result->getError();
}

В данном примере мы добавили к заказу комментарий от покупателя — поле USER_DESCRIPTION, а также разрешили отгрузку товаров. По умолчанию для каждого заказа существует системная отгрузка, она создаётся при создании заказа. В цикле так прописано условие, которое исключает системную отгрузку, которую затрагивать нет необходимости.

Поля заказа в битрикс D7

*Стоит обратить внимание на то, что поля актуальны на момент написания данной статьи.

ID Номер заказа.
LID Код сайта.
ACCOUNT_NUMBER Код заказа.
TRACKING_NUMBER Трек-номер заказа.
PAY_SYSTEM_ID Идентификатор платежной системы.
DELIVERY_ID Идентификатор службы доставки.
DATE_INSERT Дата добавления заказа в формате текущего сайта.
DATE_UPDATE Дата последнего изменения заказа в формате текущего сайта.
PERSON_TYPE_ID Идентификатор плательщика.
USER_ID Идентификатор пользователя, за кем закреплен заказ.
PAYED Фраг оплаченности заказа (Y/N).
DATE_PAYED Дата оплаты заказа.
DATE_INSERT Дата добавления заказа в формате текущего сайта.
DATE_UPDATE Дата последнего изменения заказа в формате текущего сайта.
EMP_PAYED_ID Идентификатор пользователя оплатившего заказ.
DEDUCTED Флаг отгруженности заказа (Y/N).
DATE_DEDUCTED Дата отгрузки заказа.
EMP_DEDUCTED_ID Идентификатор пользователя, отгрузившего заказ.
REASON_UNDO_DEDUCTED Комментарий причины отмены отгрузки заказа.
STATUS_ID Код статуса заказа.
DATE_STATUS Дата изменения статуса заказа.
EMP_STATUS_ID ID пользователя, изменивший статус заказа.
MARKED Флаг проблемности заказа (Y/N).
DATE_MARKED Дата выставления флага проблемности заказа.
EMP_MARKED_ID Идентификатор пользователя, установивший флаг проблемности заказа.
REASON_MARKED Комментарий причины проблемности заказа.
PRICE_DELIVERY Стоимость доставки.
ALLOW_DELIVERY Флаг разрешена ли отгрузка заказа (Y/N).
DATE_ALLOW_DELIVERY Дата выставления флага разрешения отгрузки заказа.
EMP_ALLOW_DELIVERY_ID Идентификатор пользователя, установивший флаг разрешение отгрузки заказа.
RESERVED Флаг зарезервированно ли всё кол-во товара в заказе (Y/N).
PRICE Стоимость заказа.
CURRENCY Валюта заказа.
DISCOUNT_VALUE Значение скидки заказа.
TAX_VALUE Размер налога на заказ.
SUM_PAID Сумма оплаченного заказа.
USER_DESCRIPTION Комментарий пользователя оформившего заказ.
PAY_VOUCHER_NUM Номер документа оплаты.
PAY_VOUCHER_DATE Дата оплаты документа.
ADDITIONAL_INFO Дополнительная информация заказа.
COMMENTS Комментарии к заказу.
COMPANY_ID Идентификатор компании, к которой привязан заказ.
CREATED_BY Идентификатор пользователя, кто создал заказ.
RESPONSIBLE_ID Идентификатор ответственного пользователя.
STAT_GID Код статистики.
DATE_PAY_BEFORE Дата предоплаты.
DATE_BILL Дата выставления счета.
LOCKED_BY Флаг, кто заблокировал заказ.
DATE_LOCK Дата, когда был заблокирован заказ.
AFFILIATE_ID Идентификатор аффилиата.
DELIVERY_DOC_NUM Номер документа отгрузки.
DELIVERY_DOC_DATE Дата документа отгрузки.
UPDATED_1C Флаг обновления данных в 1C.
ORDER_TOPIC Идентификатор темы на форуме, к которому привязан заказ.
XML_ID Внешний код заказа.
ID_1C Код в 1С.
VERSION_1C Версия обмена.
EXTERNAL_ORDER Флаг, определяющий является ли заказ внешним.
STORE_ID Код склада.
CANCELED Флаг отмены заказа.
EMP_CANCELED_ID Идентификатор пользователя, кто отменил заказ.
DATE_CANCELED Дата отмены заказа.
REASON_CANCELED Причина отмены заказа.
DATE_INSERT_FORMAT Дата добавления заказа в формате региональных настроек.
DATE_UPDATE_SHORT Дата обновления заказа в формате региональных настроек.
DATE_STATUS_SHORT Дата смены статуса заказа в формате региональных настроек.
DATE_CANCELED_SHORT Дата отмены заказа в формате региональных настроек.
BY_RECOMMENDATION Флаг оформлен ли заказ по рекомендации.
LOCK_STATUS Код блокировка(green/yelow/green).
LOCK_USER_NAME Имя пользователя, блокирующего заказ.
RESPONSIBLE_LOGIN Логин ответственного за заказ пользователя.
RESPONSIBLE_NAME Имя ответственного за заказ пользователя.
RESPONSIBLE_LAST_NAME Фамилия ответственного за заказ пользователя.
RESPONSIBLE_SECOND_NAME Отчество ответственного за заказ пользователя.
RESPONSIBLE_EMAIL Email ответственного за заказ пользователя.
RESPONSIBLE_WORK_POSITION Должность ответственного за заказ пользователя.
RESPONSIBLE_PERSONAL_PHOTO Фото ответственного за заказ пользователя.
USER_LOGIN Логин пользователя, за кем закреплен заказ.
USER_NAME Имя пользователя, за кем закреплен заказ.
USER_LAST_NAME Фамилия пользователя, за кем закреплен заказ.
USER_EMAIL Email пользователя, за кем закреплен заказ.
Опубликован: 16.04.2020 г.

См. также:

«Не удалось установить соединение с сервером. Проверьте …».
Получение Email-адреса покупателя в заказе (Bitrix D7)
Работа с URL-адресами в Bitrix D7
Работа с купонами в Bitrix API
Добавляем пункт меню для списков в админке Битрикс
Диалоговые окна в Bitrix API
Создание инфоблока при установке модуля
Создание копии корзины из заказа на Bitrix D7

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Комментарии
  • Загрузка...
Друзья сайта