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

В этой статье мы рассмотрим как работать с заказами в Битрикс на D7. Для работы нам потребуется установленный модуль Интернет магазина (sale).

  1. Создание заказа
  2. Корзина заказа
  3. Отгрузки
  4. Платежные системы
  5. Свойства заказа

Создание заказа

Нужно помнить, что до вызова метода 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();
Мы используем cookie-файлы для наилучшего представления нашего сайта. Продолжая использовать этот сайт, вы соглашаетесь с использованием cookie-файлов.
Принять