Решил проблему используя D7.
//Формируем массив товаров корзины
$cartArray = $this->parser->getCart();
if (empty($cartArray)) {
throw new Exception('MSHOP_ERROR_EMPTY_CART');
}
$basket = Basket::create(SITE_ID);
foreach($cartArray as $item_id => $quantity) {
$item = $basket->createItem('catalog', $item_id);
$item->setFields([
'QUANTITY' => (int)$quantity,
'CURRENCY' => CurrencyManager::getBaseCurrency(),
'LID' => SITE_ID,
'PRODUCT_PROVIDER_CLASS' => 'CCatalogProductProvider',
]);
}
$order = Order::create(SITE_ID, $this->ownerId);
$order->setBasket($basket);
$order->setFields([
"PERSON_TYPE_ID" => $this->payerType,
"CURRENCY" => $this->getBaseCurrency(),
"USER_DESCRIPTION" => $this->parser->getComment()
]);
//Сохраняем информацию о методе оплаты
$sum = $order->getPrice();
$service = PaySystemManager::getObjectById($this->parser->getPaymentMethodId());
/**@var Payment $payment*/
$payment = $order->getPaymentCollection()->createItem($service);
$payment->setFields(['SUM' => $sum]);
//Сохраняем свойства заказа
$collection = $order->getPropertyCollection();
$parsedValues = $this->parser->getFields();
/**@var PropertyValue $property*/
foreach($collection as $property){
if ($property->getPersonTypeId() == $this->payerType){
$fieldName = OrderPropertiesHelper::getField($property->getField('CODE'));
$value = $parsedValues[$fieldName];
if (!empty($value)) {
$property->setValue($value);
}
}
}
//Выбираем способ доставки
$delivery = DeliveryManager::getObjectById(20);
$shipment = $order->getShipmentCollection()->createItem($delivery);
$shipment->setFields(array(
'DELIVERY_ID' => $delivery->getId(),
'DELIVERY_NAME' => $delivery->getName(),
));
$order->save();
//Костыль для корректного отображения выбранного способа оплаты, связан с тем что в новом апи возможно множество платежных систем в одном заказе а в старом нет.
if ($order->getId()){
$orderStore = new CSaleOrder();
$fields = $order->getFields()->getValues();
$fields['PAY_SYSTEM_ID'] = $payment->getPaymentSystemId();
$orderStore->Update($order->getId(), $fields);
}