Блог Горошко Андрея 1C-Битрикс E-commerce в D7: Программное создание заказа (Bitrix\Sale\Order)

E-commerce в D7: Программное создание заказа (Bitrix\Sale\Order)

Средний рейтинг
Еще нет оценок

Программное создание заказа — задача, возникающая при импорте заказов, создании «заказа в 1 клик» или разработке своего API. В D7 это делается через цепочку связанных объектов.

Шаг 1: Создание объекта заказа

use Bitrix\Sale;

$siteId = \Bitrix\Main\Context::getCurrent()->getSite();
$userId = 1; // ID пользователя, на которого оформляем заказ
$currencyCode = \Bitrix\Currency\CurrencyManager::getBaseCurrency();

// Создаем новый заказ
$order = Sale\Order::create($siteId, $userId);
$order->setPersonTypeId(1); // ID типа плательщика (Физическое лицо)
$order->setField('CURRENCY', $currencyCode);

Шаг 2: Привязка корзины

Заказ не может существовать без товаров. Мы можем взять текущую корзину пользователя или создать новую «виртуальную».

// Берем текущую корзину пользователя
$basket = Sale\Basket::loadItemsForFUser(Sale\Fuser::getId(), $siteId);

// Привязываем корзину к заказу
$order->setBasket($basket);

Шаг 3: Отгрузка (Доставка)

В D7 доставка — это сущность «Отгрузка» (Shipment).

$shipmentCollection = $order->getShipmentCollection();
$shipment = $shipmentCollection->createItem();

// Указываем службу доставки (ID)
$service = Sale\Delivery\Services\Manager::getById(Sale\Delivery\Services\EmptyDeliveryService::getEmptyDeliveryServiceId());
$shipment->setFields([
    'DELIVERY_ID' => $service['ID'],
    'DELIVERY_NAME' => $service['NAME'],
]);

// Кладем все товары из корзины в эту отгрузку
$shipmentItemCollection = $shipment->getShipmentItemCollection();
foreach ($basket as $basketItem) {
    $item = $shipmentItemCollection->createItem($basketItem);
    $item->setQuantity($basketItem->getQuantity());
}

Шаг 4: Оплата

$paymentCollection = $order->getPaymentCollection();
$payment = $paymentCollection->createItem();

// Указываем платежную систему (ID=1 - Наличные)
$paySystemId = 1;
$paySystem = Sale\PaySystem\Manager::getObjectById($paySystemId);

$payment->setFields([
    'PAY_SYSTEM_ID' => $paySystem->getField("ID"),
    'PAY_SYSTEM_NAME' => $paySystem->getField("NAME"),
    'SUM' => $order->getPrice(), // Сумма оплаты равна сумме заказа
]);

Шаг 5: Свойства заказа и сохранение

// Устанавливаем свойства (Телефон, Адрес и т.д.)
$propertyCollection = $order->getPropertyCollection();
$phoneProp = $propertyCollection->getItemByOrderPropertyId(3); // 3 - ID свойства Телефон
if ($phoneProp) {
    $phoneProp->setValue('+79990000000');
}

// Пересчитываем заказ (скидки, налоги, стоимость доставки)
$order->doFinalAction(true);

// Сохраняем
$result = $order->save();

if ($result->isSuccess()) {
    echo "Заказ создан с ID: " . $order->getId();
} else {
    print_r($result->getErrorMessages());
}

Вывод:
Создание заказа в D7 — это процесс сборки конструктора:

Заказ -> Корзина -> Отгрузка -> Оплата.

Этот подход обеспечивает целостность данных и автоматический пересчет всех стоимостей.

Bitrix\Sale\Order, создание заказа API, D7 заказ, оформление заказа программно, привязка оплаты, привязка доставки, сохранение заказа.

Мой рейтинг:

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

Related Post

Основы JavaScript в Битрикс: Объект BX, BX.ready, BX.bind и AJAXОсновы JavaScript в Битрикс: Объект BX, BX.ready, BX.bind и AJAX

Средний рейтинг Еще нет оценок Битрикс имеет собственное легковесное ядро JavaScript, которое предоставляет унифицированный API для решения большинства frontend-задач. Оно избавляет от необходимости подключать тяжелые библиотеки вроде jQuery для простых

Сложные фильтры в D7 ORM: Query::filter() для логики И/ИЛИ и вложенных условийСложные фильтры в D7 ORM: Query::filter() для логики И/ИЛИ и вложенных условий

Средний рейтинг Еще нет оценок Простой массив в параметре filter метода getList() отлично подходит для условий, объединенных по логике «И» (AND). Но что делать, если нужна более сложная логика, например, (A AND B) OR C?

Манипуляции с URL в D7: Класс Bitrix\Main\Web\Uri (добавление, удаление параметров, парсинг)Манипуляции с URL в D7: Класс Bitrix\Main\Web\Uri (добавление, удаление параметров, парсинг)

Средний рейтинг Еще нет оценок Работа с URL — рутинная задача: добавить GET-параметр, удалить «мусор», получить домен. В старом ядре использовались функции вроде $APPLICATION->GetCurPageParam. В D7 появился специализированный класс \Bitrix\Main\Web\Uri, который делает