Программное создание заказа — задача, возникающая при импорте заказов, создании «заказа в 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 заказ, оформление заказа программно, привязка оплаты, привязка доставки, сохранение заказа.