Имеется код который рассчитывает стоимость доставки до определенного города
Все бы хорошо но есть загвоздка
Если на сайте в корзине есть товар то все рассчитывается верно, если корзина пустая, то стоимость доставки 0, хотя мы вроде для расчета создаем свою корзину
Код используется в карточке товара
\Bitrix\Main\Loader::includeModule('catalog');
\Bitrix\Main\Loader::includeModule('sale');
$products = array(
array(
'PRODUCT_ID' => $bitrixProductId,
'QUANTITY' => 1
),
);
/** @var \Bitrix\Sale\Basket $basket */
$basket = \Bitrix\Sale\Basket::create($siteId);
foreach ($products as $product) {
$item = $basket->createItem("catalog", $product["PRODUCT_ID"]);
unset($product["PRODUCT_ID"]);
$item->setFields($product);
}
/** @var \Bitrix\Sale\Order $order */
$order = \Bitrix\Sale\Order::create($siteId, $userId);
$order->setPersonTypeId($personTypeId);
$order->setBasket($basket);
/** @var \Bitrix\Sale\PropertyValueCollection $orderProperties */
$orderProperties = $order->getPropertyCollection();
/** @var \Bitrix\Sale\PropertyValue $orderDeliveryLocation */
$orderDeliveryLocation = $orderProperties->getDeliveryLocation();
$orderDeliveryLocation->setValue($userCityId); // Город куда доставляем
/** @var \Bitrix\Sale\ShipmentCollection $shipmentCollection */
$shipmentCollection = $order->getShipmentCollection();
$delivery = \Bitrix\Sale\Delivery\Services\Manager::getObjectById($deliveryId);
/** @var \Bitrix\Sale\Shipment $shipment */
$shipment = $shipmentCollection->createItem($delivery);
/** @var \Bitrix\Sale\ShipmentItemCollection $shipmentItemCollection */
$shipmentItemCollection = $shipment->getShipmentItemCollection();
/** @var \Bitrix\Sale\BasketItem $basketItem */
foreach ($basket as $basketItem) {
$item = $shipmentItemCollection->createItem($basketItem);
$item->setQuantity($basketItem->getQuantity());
}
/** @var \Bitrix\Sale\PaymentCollection $paymentCollection */
$paymentCollection = $order->getPaymentCollection();
/** @var \Bitrix\Sale\Payment $payment */
$payment = $paymentCollection->createItem(
\Bitrix\Sale\PaySystem\Manager::getObjectById($paySystemId)
);
$payment->setField("SUM", $order->getPrice());
$payment->setField("CURRENCY", $order->getCurrency());
$order->getDiscount()->calculate();
$order->getDiscount()->getApplyResult();
/** Стоимость доставки */
$deliveryPrice = $order->getDeliveryPrice();