Добавление заказа через API Bitrix


Пример добавления заказа чрез зрз 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 'Ошибка, обратитесь к администратору!'; 
}