Пример добавления заказа чрез зрз API 1С-Битрикс (php) – доступно из любого скрипта с подключенным PROLOG, проверялось на Управление сайтом 20.0.1650. (версия модуля интернет-магазин 20.0.687)
<?php
Bitrix\Main\Loader::includeModule('sale');
Bitrix\Main\Loader::includeModule('catalog');
$userId = 1; // id пользователя, для которого создать заказ
$products = array(
array(
'PRODUCT_ID' => 1, // id добавляемого товара
'NAME' => 'Тест', // если нужно изменить название товара, либо берем текущее
'PRICE' => 100, // цена товара для добавления в корзину
'CUSTOM_PRICE' => 'N', // пометка, что используем свою цену
'CURRENCY' => Bitrix\Currency\CurrencyManager::getBaseCurrency(),
'LID' => Bitrix\Main\Context::getCurrent()->getSite(),
'QUANTITY' => 1,
'PRODUCT_PROVIDER_CLASS' => \Bitrix\Catalog\Product\Basket::getDefaultProviderName()
)
);
$basket = Bitrix\Sale\Basket::create(SITE_ID);
foreach ($products as $product) {
$item = $basket->createItem("catalog", $product["PRODUCT_ID"]);
unset($product["PRODUCT_ID"]);
$item->setFields($product);
}
$order = Bitrix\Sale\Order::create(SITE_ID, $userId);
$order->setPersonTypeId(1);
$order->setBasket($basket);
$order->setField('USER_DESCRIPTION', 'Тест');
$shipmentCollection = $order->getShipmentCollection();
$shipment = $shipmentCollection->createItem(
Bitrix\Sale\Delivery\Services\Manager::getObjectById(2) // id службы доставки
);
$shipmentItemCollection = $shipment->getShipmentItemCollection();
foreach ($basket as $basketItem)
{
$item = $shipmentItemCollection->createItem($basketItem);
$item->setQuantity($basketItem->getQuantity());
}
$paymentCollection = $order->getPaymentCollection();
$payment = $paymentCollection->createItem(
Bitrix\Sale\PaySystem\Manager::getObjectById(1) // id платежной системы
);
$payment->setField("SUM", $order->getPrice());
$payment->setField("CURRENCY", $order->getCurrency());
$propertyCollection = $order->getPropertyCollection();
// $emailPropValue = $propertyCollection->getUserEmail();
// $emailPropValue->setValue('test@test.ru'); // email пользователя
$result = $order->save();
if ($order->getid()) {
print 'Заказ создан! Ссылка на оплату; ' . \Bitrix\Sale\Helpers\Order::getPublicLink($order);
} else {
print 'Ошибка, обратитесь к администратору!';
}