Работа с заказами в Битрикс на D7
В этой статье мы рассмотрим как работать с заказами в Битрикс на D7. Для работы нам потребуется установленный модуль Интернет магазина (sale).
Создание заказа
Нужно помнить, что до вызова метода save() заказ не будет сохранен в базу данных.
//Получаем идентификатор сайта
$siteId = \Bitrix\Main\Context::getCurrent()->getSite();
//Получаем идентификатор пользователя
global $USER;
$userID = $USER->GetID();
//Создаём объект заказ
$order = \Bitrix\Sale\Order::create($siteId, $userID);
//Установаем тип плательщика
$order->setPersonTypeId(1);
//Добавиляем комментарий к заказу
$order->setField( 'COMMENTS', 'Тестовый коментарий' );
Корзина заказа
Получаем корзину пользователя
$basketUser = \Bitrix\Sale\Fuser::getId();
$basket = \Bitrix\Sale\Basket::loadItemsForFUser($basketUser, $siteId);
Создаём корзину с нуля
$basket = Bitrix\Sale\Basket::create($siteId);
$products = array(
array(
'PRODUCT_ID' => 1,
'QUANTITY' => 2,
),
array(
'PRODUCT_ID'=> 2,
'QUANTITY' => 5,
),
);
foreach($products as $product){
$item = $basket->createItem('catalog', $product['PRODUCT_ID']);
$item->setFields(array(
'QUANTITY' => $product['QUANTITY'],
'CURRENCY' => \Bitrix\Currency\CurrencyManager::getBaseCurrency(),
'LID' => $siteId,
'PRODUCT_PROVIDER_CLASS' => '\Bitrix\Catalog\Product\CatalogProvider',
));
/*
Если нужно добавить товар с произвольной ценой:
$item->setFields(array(
'QUANTITY' => $product['QUANTITY'],
'CURRENCY' => \Bitrix\Currency\CurrencyManager::getBaseCurrency(),
'LID' => $siteId,
'PRICE' => $customPrice,
'CUSTOM_PRICE' => 'Y',
));
*/
}
Прикрепляем корзину к заказу
$order->setBasket($basket);
Отгрузки
$shipmentCollection = $order->getShipmentCollection();
$shipment = $shipmentCollection->createItem(
Bitrix\Sale\Delivery\Services\Manager::getObjectById(1) // 1 – ID службы доставки
);
$shipmentItemCollection = $shipment->getShipmentItemCollection();
foreach ($basket as $basketItem)
{
$shipmentItem = $shipmentItemCollection->createItem( basketItem ); //Добавляем товар в отгрузку
$shipmentItem->setQuantity( $basketItem->getQuantity() ); //Устанавливаем количество
/* Если необходимо добавить склад с которого необходимо списать товар
$collection = $shipmentItem->getShipmentItemStoreCollection();
$itemStore = $collection->createItem( $shipmentItem->getBasketItem() );
$itemStore->setFields( [
'QUANTITY' => $item->getQuantity(),
'STORE_ID' => 1 // 1 - ID склада
] );*/
}
Платежные системы
Этим кодом можно привязать платежную систему к заказу
$paymentCollection = $order->getPaymentCollection();
$payment = $paymentCollection->createItem(
Bitrix\Sale\PaySystem\Manager::getObjectById(1) // 1 – ID платежной системы
);
$payment->setField("SUM", $order->getPrice());
$payment->setField("CURRENCY", $order->getCurrency());
Свойства заказа
$propertyCollection = $order->getPropertyCollection();
foreach($propertyCollection as $popertyObj)
{
if($popertyObj->getField('CODE') == "CODE1") $someValue1 = $popertyObj->getValue();
if($popertyObj->getField('CODE') == "CODE2") $popertyObj->setValue($someValue2);
}
Сохранение заказа
После вызова метода save() заказ будет сохранен в базу данных
$order->save();