Проблема с документацией по D7, поэтому прошу помочь.
Есть код, который создает заказ, но не подключает нужную службу доставки не устанавливает сумму доставки, а также не работает с корзиной, только с одним товаром.
Подскажите, что я делаю не так? уже все варианты перебрал.
[CODE]<?
// t.php?PHONE=1111111&NAME=tester&COMMENT=justcomment
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$UNREG_USERID = 97; // id не зарегистрированного покупателя
$USER_TYPEID = 1; // id типа плательщика
$PAYMENT_ID = 4; // id способа оплаты 4 - Яндекс.Касса, 1 - наличные
$SHIPMENT_ID = 25; // id способа доставки 25 - Яндекс.Доставка, 1 - курьер
$SHIPMENT_PRICE = 200; // стоимость доставки
$productId = 14854;
// Массив товаров
$arItems = array(
array(
'PRODUCT_ID' => 14854,
'QUANTITY' => 1
),
array(
'PRODUCT_ID' => 219,
'QUANTITY' => 1
)
);
use Bitrix\Main\Context,
Bitrix\Currency\CurrencyManager,
Bitrix\Sale\Order,
Bitrix\Sale\Basket,
Bitrix\Sale\Delivery,
Bitrix\Sale\PaySystem;
global $USER;
Bitrix\Main\Loader::includeModule("sale");
Bitrix\Main\Loader::includeModule("catalog");
// Допустим некоторые поля приходит в запросе
$request = Context::getCurrent()->getRequest();
$phone = strval($request["PHONE"]);
$name = strval($request["NAME"]);
$comment = strval($request["COMMENT"]);
$siteId = Context::getCurrent()->getSite();
$currencyCode = CurrencyManager::getBaseCurrency();
// Создаём новый заказ
$order = Order::create($siteId, $USER->isAuthorized() ? $USER->GetID() : $UNREG_USERID);
$order->setPersonTypeId($USER_TYPEID);
$order->setField('CURRENCY', $currencyCode);
if ($comment) {
$order->setField('USER_DESCRIPTION', $comment); // Устанавливаем поля комментария покупателя
}
// Создаём корзину с одним товаром
$basket = Basket::create($siteId);
$item = $basket->createItem('catalog', $productId);
$item->setFields(array(
'QUANTITY' => 1,
'CURRENCY' => $currencyCode,
'LID' => $siteId,
'PRODUCT_PROVIDER_CLASS' => '\CCatalogProductProvider',
));
$order->setBasket($basket);
// Создаём одну отгрузку и устанавливаем способ доставки - "Без доставки" (он служебный)
$shipmentCollection = $order->getShipmentCollection();
$shipment = $shipmentCollection->createItem();
$service = Delivery\Services\Manager::getById(Delivery\Services\EmptyDeliveryService::getEmptyDeliveryServiceId());
$shipment->setFields(array(
'DELIVERY_ID' => $service['ID'],
'DELIVERY_NAME' => $service['NAME'],
));
$shipmentItemCollection = $shipment->getShipmentItemCollection();
$shipmentItem = $shipmentItemCollection->createItem($item);
$shipmentItem->setQuantity($item->getQuantity());
// Создаём оплату со способом $PAYMENT_ID
$paymentCollection = $order->getPaymentCollection();
$payment = $paymentCollection->createItem();
$paySystemService = PaySystem\Manager::getObjectById($PAYMENT_ID);
$payment->setFields(array(
'PAY_SYSTEM_ID' => $paySystemService->getField("PAY_SYSTEM_ID"),
'PAY_SYSTEM_NAME' => $paySystemService->getField("NAME"),
));
// Устанавливаем свойства
$propertyCollection = $order->getPropertyCollection();
$phoneProp = $propertyCollection->getPhone();
$phoneProp->setValue($phone);
$nameProp = $propertyCollection->getPayerName();
$nameProp->setValue($name);
// Сохраняем
$order->doFinalAction(true);
$result = $order->save();
$orderId = $order->getId();
echo '
Заказ с номером <b>'.$orderId.'</b> создан!
';
?>
<?php
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");
?>
[/CODE]
Т.е. в идеале корзина из массива $arItems должна записываться в заказ с суммой доставки $SHIPMENT_PRICE и службой доставки $SHIPMENT_ID