@SatanaKonst

Как расчитать стоимость доставки Bitrix?

Делаю оформление заказа в 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 - свойство заказа типа Местоположение

Как мне правильно получить стоимость доставки?
  • Вопрос задан
  • 4230 просмотров
Пригласить эксперта
Ответы на вопрос 2
SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...
Проще всего найти аналог этого кода в используемой версии битрикса - пример мог устареть.
Ответ написан
Комментировать
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы