Оглавление
- Создание объекта корзины и наполнение её товарами
- Создание объекта заказа и связывание его с корзиной
- Создание отгрузки (назначение службы доставки)
- Создание оплаты (назначение платёжной системы)
- Сохранение заказа
Создание корзины
//Массив товаров будущего заказа, может быть получен
//различными путями, например передан из формы "Заказ в один клик"
$arItems = [
[
'PRODUCT_ID' => 18,
'NAME' => 'Телевизор LG',
'PRICE' => 10000,
'CURRENCY' => 'RUB',
'QUANTITY' => 1
]
];
// Создаем и наполняем корзину
$siteId = Bitrix\Main\Context::getCurrent()->getSite();
$basket = \Bitrix\Sale\Basket::create($siteId);
foreach ($arItems as $i => $arItem) {
$basketItem = $basket->createItem('catalog', $arItem['PRODUCT_ID']);
$basketItem->setFields($arItem);
}
Создание заказа
Тут предварительно нужно узнать ID пользователя, для этого можно воспользоваться$USER->GetID()
.
// Создаем заказ и привязываем корзину, перерасчет происходит автоматически
$order = \Bitrix\Sale\Order::create($siteId, $USER->GetID());
$order->setPersonTypeId($personTypeId);
$order->setBasket($basket);
Создание отгрузки и оплаты
$shipmentCollection = $order->getShipmentCollection();
$shipment = $shipmentCollection->createItem(
\Bitrix\Sale\Delivery\Services\Manager::getObjectById(1)
);
$shipmentItemCollection = $shipment->getShipmentItemCollection();
/** @var \Bitrix\Sale\BasketItem $basketItem */
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());
Сохранение заказа
Если делать ajax форму, то тут можно вернуть не просто ID или ошибку, а подготовленный JSON для обработки на стороне frontend.
// Coхраняем заказ, возвращаем ID или ошибку
$result = $order->save();
if ($result->isSuccess()) {
return $order->getId();
} else {
return $result->getError();
}
Как видите, ничего сложного. В следующих статьях рассмотрим примеры разделения закза, создание заказа в один клик на основе вышеописанного кода и другое. Всем добра!