Задать вопрос

Как указать адрес доставки через API?

Есть стандартный компонент битрикса корзины. Но оформление заказа написано полностью на API. То есть, начиная с кнопки оформить заказ внутренности компонента не используются.
Соответственно, создаётся объект $order, в него передаётся текущая корзина пользователя $basket.

Далее, в зависимости от того, что выбрал пользователь, создаётся доставка, а именно вот так:

if (($delivery == 2) or ($delivery == 3)) {
  $service = Delivery\Services\Manager::getById($delivery);
  $shipment->setFields(array(
    "DELIVERY_ID" => $service["ID"],
    "DELIVERY_NAME" => $service["NAME"],
  ));
  $shipment->setBasePriceDelivery($deliveryCost);
} else {// Иначе создаём служебную доставку
  $service = Delivery\Services\Manager::getById(Delivery\Services\EmptyDeliveryService::getEmptyDeliveryServiceId());
  $shipment->setFields(array(
    "DELIVERY_ID" => $service["ID"],
    "DELIVERY_NAME" => $service["NAME"],
  ));
}

Как мне передать и каким способом адрес доставки? Сейчас он не фиксируется в заказе и следовательно не виден в заказе из админки.

Поддержка битрикс пока что ответила так:
"Адрес доставки" это свойство заказа, его название можно получить и обновить $propertyValue->setField();
https://dev.1c-bitrix.ru/api_d7/bitrix/sale/techni...
https://dev.1c-bitrix.ru/api_d7/bitrix/sale/techni...

Только не понятно, к чему применить setField и какой ключ в него передавать, чтобы установить именно адрес доставки.
  • Вопрос задан
  • 7573 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 3
nikolaevevge
@nikolaevevge Автор вопроса
// Функция для упрощения работы с свойствами заказа, чтобы ко каждому свойству не писать много строк
function getPropertyByCode($propertyCollection, $code) {
foreach ($propertyCollection as $property) {
if($property->getField('CODE') == $code) {
return $property;
}
}
}

$addressProperty = getPropertyByCode($propertyCollection, 'ADDRESS');
$addressProperty->setValue($deliveryAddress);// Устанавливаем адрес

Предварительно если Вы не устанавливали демо данные нужно зайти в магазин -> настройки -> свойства заказа и создать для каждого типа платильщика свойство Адрес доставки. Необходимо поставить галочку входит в профиль и является адресом доставки.

Список стандартных названий свойств и их коды(те которые устанавливаются с демо данными) можно посмотреть по ссылке - https://dev.1c-bitrix.ru/support/forum/messages/fo...
Ответ написан
Комментировать
<?

$propertyCollection = $order->getPropertyCollection();
$adressProperty = $propertyCollection->getAddress();
$adressProperty->setValue($value);
?>
Ответ написан
Adamos
@Adamos
В админке посмотрите магазин - настройки - свойства заказа.
Если там нет подходящего - создайте новое и отметьте, что это адрес (галочка "использовать для расчета доставки").
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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