Делаю оформление заказа в Bitrix.
Встал вопрос расчета стоимости доставки в зависимости от местоположения.
Сделал Группы местоположения, сами местоположения и привязал их к группам.
Далее по заветам интернета делаю следующе
//Получаем корзину
$basket = Bitrix\Sale\Basket::loadItemsForFUser(Bitrix\Sale\Fuser::getId(), Bitrix\Main\Context::getCurrent()->getSite());
if(count($basket->getQuantityList())==0){
die(json_encode(array('result'=>false)));
}
//Формируем заказ
if($USER->IsAuthorized()){
$user = new CUser();
$id_user = $user->GetID();
$order = Bitrix\Sale\Order::create(SITE_ID, $id_user);
}else{
$id_user = \CSaleUser::GetAnonymousUserID();
$order = Bitrix\Sale\Order::create(SITE_ID, $id_user);
}
$order->setPersonTypeId(1); //Тип поккупателя
$order->setBasket($basket);
$rsPaySystem = \Bitrix\Sale\Internals\PaySystemActionTable::getList(array('filter' => array('ACTIVE'=>'Y','CODE'=>$payment_system_code)));
$payment_system=null;
if($arPaySystem = $rsPaySystem->fetch())
{
$payment_system=$arPaySystem['ID'];
}
//Устанавливаем доп свойства
$propertyCollection = $order->getPropertyCollection();
$delivery_location = getPropertyByCode($propertyCollection, 'ADDR');
$delivery_location->setValue($del_loc_form);
//Устанавливаем доставку
$shipmentCollection = $order->getShipmentCollection();
$shipment = $shipmentCollection->createItem(
Bitrix\Sale\Delivery\Services\Manager::getObjectById($delivery_service)
);
//Отгрузки
$shipmentItemCollection = $shipment->getShipmentItemCollection();
foreach ($basket as $basketItem) {
$item = $shipmentItemCollection->createItem($basketItem);
$item->setQuantity($basketItem->getQuantity());
}
//Оплата
$arPaySystemServiceAll = [];
$paySystemId = ($payment_system!=null)? $payment_system : 1;
$paymentCollection = $order->getPaymentCollection();
$remainingSum = $order->getPrice() - $paymentCollection->getSum();
if ($remainingSum > 0 || $order->getPrice() == 0)
{
$payment = $paymentCollection->createItem();
$payment->setField('SUM', $remainingSum);
$arPaySystemServices = Bitrix\Sale\PaySystem\Manager::getListWithRestrictions($payment);
$arPaySystemServiceAll += $arPaySystemServices;
if (array_key_exists($paySystemId, $arPaySystemServiceAll))
{
$arPaySystem = $arPaySystemServiceAll[$paySystemId];
}
else
{
reset($arPaySystemServiceAll);
$arPaySystem = current($arPaySystemServiceAll);
}
if (!empty($arPaySystem))
{
$payment->setFields(array(
'PAY_SYSTEM_ID' => $arPaySystem["ID"],
'PAY_SYSTEM_NAME' => $arPaySystem["NAME"]
));
}
else
$payment->delete();
}
die(json_encode(array('result'=>true,'data'=>$order->getDeliveryPrice())));
Собственно это по факту оформление заказа, но без сохранения.
Итог данного действа, что $order->getDeliveryPrice() выдает постоянно 0 и если сохранить заказ, то адрес не устанавливается.
P.S. ADDR - свойство заказа типа Местоположение
Как мне правильно получить стоимость доставки?