Интеграция 1С-Битрикс со службой доставки Boxberry Беларусь

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Интеграция 1С-Битрикс со службой доставки Boxberry Беларусь
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1230
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    843
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    580
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    749
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    980

Интеграция 1С-Битрикс со службой доставки Boxberry Беларусь

Boxberry работает в Беларуси через партнёрскую сеть — пунктов выдачи в стране значительно меньше, чем в России, но для городов-миллионников (Минск, Гомель, Брест, Витебск) покрытие достаточное. Технически это тот же Boxberry API, что и для России, с отдельными credentials для белорусского сегмента.

API Boxberry Беларусь

Boxberry использует один API для всех рынков: https://api.boxberry.ru/json.php. Авторизация через токен в параметре запроса. Белорусский сегмент работает с теми же эндпоинтами, но возвращает другие данные по ПВЗ и тарифам при указании страны Беларусь.

Ключевые методы:

  • PointList — список ПВЗ с фильтром по стране (CountryCode=BY)
  • DeliveryCosts — расчёт стоимости доставки
  • ParselCreate — создание посылки
  • ParselCheck — статус посылки по трекинг-номеру

Расчёт стоимости

class BoxberryByHandler extends \Bitrix\Sale\Delivery\Services\Base
{
    private string $apiUrl = 'https://api.boxberry.ru/json.php';

    private function apiCall(string $method, array $params = []): array
    {
        $params['token']  = $this->getOption('API_TOKEN_BY');
        $params['method'] = $method;

        $ch = curl_init($this->apiUrl . '?' . http_build_query($params));
        curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true]);
        $result = json_decode(curl_exec($ch), true);
        curl_close($ch);

        return $result ?? [];
    }

    protected function calculateConcrete(
        \Bitrix\Sale\Shipment $shipment
    ): \Bitrix\Sale\Delivery\CalculationResult {
        $result  = new \Bitrix\Sale\Delivery\CalculationResult();
        $pvzCode = $this->getPvzCode($shipment);

        if (!$pvzCode) {
            $result->addError(new \Bitrix\Main\Error('ПВЗ Boxberry не выбран'));
            return $result;
        }

        $response = $this->apiCall('DeliveryCosts', [
            'weight'    => max((int)ceil($shipment->getWeight() / 1000), 1),
            'aim'       => $pvzCode,
            'sumd'      => round($shipment->getOrder()->getPrice()),
            'fromCity'  => $this->getOption('FROM_CITY_CODE_BY'),
        ]);

        if (!empty($response['price'])) {
            $result->setDeliveryPrice((float)$response['price']);
            $period = $response['deliveryPeriod'] ?? '3–7';
            $result->setPeriodDescription("{$period} дней");
        }

        return $result;
    }

    private function getPvzCode(\Bitrix\Sale\Shipment $shipment): ?string
    {
        $props = $shipment->getOrder()->getPropertyCollection();
        return $props->getItemByOrderPropertyCode('BOXBERRY_PVZ_BY')?->getValue() ?: null;
    }
}

Список ПВЗ для Беларуси

public function getBelarusPvz(): array
{
    $cache = \Bitrix\Main\Data\Cache::createInstance();

    if ($cache->initCache(3600 * 12, 'boxberry_pvz_by', '/boxberry/')) {
        return $cache->getVars();
    }

    $pvzList = $this->apiCall('PointList', [
        'CountryCode' => 'BY',
        'prepaid'     => 1,
    ]);

    $cache->startDataCache();
    $cache->endDataCache($pvzList);

    return $pvzList;
}

На фронте выводим карту с ПВЗ. Через Boxberry нет официального JS-виджета для белорусского рынка — реализуем собственный на Яндекс Картах или Google Maps, передавая список ПВЗ с координатами из API.

Создание посылки

public function createParcel(\Bitrix\Sale\Shipment $shipment): string
{
    $order = $shipment->getOrder();
    $props = $order->getPropertyCollection();

    $response = $this->apiCall('ParselCreate', [
        'updateByTrack'    => '0',
        'order_id'         => 'bitrix_' . $order->getId(),
        'PalletNumber'     => '',
        'price'            => round($order->getPrice()),
        'payment_sum'      => $this->getCodAmount($order), // 0 при предоплате
        'delivery_sum'     => 0,
        'vid'              => 1,
        'aim'              => $props->getItemByOrderPropertyCode('BOXBERRY_PVZ_BY')?->getValue(),
        'name'             => $props->getItemByOrderPropertyCode('FIO')?->getValue(),
        'phone'            => $props->getItemByOrderPropertyCode('PHONE')?->getValue(),
        'email'            => $order->getUserEmail(),
        'weights'          => [['weight' => max((int)ceil($shipment->getWeight() / 1000), 1)]],
    ]);

    return (string)($response['track'] ?? '');
}

Трекинг

public function checkParcel(string $trackCode): array
{
    return $this->apiCall('ParselCheck', ['ImId' => $trackCode]);
}

Вебхуков нет. Агент Битрикс проверяет статус раз в 4 часа.

Сроки

Состав Срок
Расчёт + создание посылки 3–4 дня
+ ПВЗ на карте +2–3 дня
+ Трекинг + уведомления +2 дня