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

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Інтеграція 1С-Бітрікс зі службою доставки Boxberry Білорусь
Середня
~1-2 тижні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Інтеграція 1С-Бітрікс зі службою доставки Boxberry (Білорусь)

Boxberry працює в Білорусі через партнерську мережу пунктів видачі. API ідентичне російському Boxberry — той самий єдиний ендпоінт https://api.boxberry.ru/json.php, ті самі методи. Відмінності: токен видається білоруським офісом, список ПВЗ фільтрується по країні, тарифи інші.

Особливості білоруської інтеграції

Токен для роботи в Білорусі отримується окремо — не можна використовувати російський токен для білоруських ПВЗ. При запиті списку ПВЗ необхідно фільтрувати по країні:

public function getBelarusPoints(): array
{
    $cacheKey = 'boxberry_pvz_by';
    $cached = \Bitrix\Main\Data\Cache::createInstance();

    if ($cached->startDataCache(3600 * 12, $cacheKey, '/boxberry')) {
        $url = 'https://api.boxberry.ru/json.php?' . http_build_query([
            'token'      => $this->getOption('BY_TOKEN'),
            'method'     => 'ListPoints',
            'prepaid'    => 1,
            'CityCode'   => '', // всі міста Білорусі
        ]);

        $points = json_decode(file_get_contents($url), true) ?? [];
        // Фільтруємо тільки білоруські ПВЗ
        $byPoints = array_filter($points, fn($p) => ($p['CountryCode'] ?? '') === 'BY');
        $cached->endDataCache(['points' => array_values($byPoints)]);
    }

    return $cached->getVars()['points'];
}

Якщо API не повертає поле CountryCode, фільтрація по містах — список білоруських міст у конфігу модуля.

Розрахунок вартості

public function calcCostBelarus(
    string $pvzCode,
    int $weightGram,
    float $orderSum
): float {
    $url = 'https://api.boxberry.ru/json.php?' . http_build_query([
        'token'      => $this->getOption('BY_TOKEN'),
        'method'     => 'DeliveryCosts',
        'zip'        => $pvzCode,
        'weight'     => $weightGram,
        'ordersum'   => $orderSum,
        'targetstart' => $this->getOption('BY_FROM_POINT'), // точка відправки в Білорусі
    ]);

    $response = json_decode(file_get_contents($url), true);

    if (!empty($response['err'])) {
        return 0;
    }

    return (float)($response['price'] ?? 0);
}

Вартість повертається в білоруських рублях при використанні білоруського токена.

Клас служби доставки

class BoxberryByDelivery extends \Bitrix\Sale\Delivery\Services\Base
{
    protected static function getClassTitle(): string
    {
        return 'Boxberry (Білорусь)';
    }

    protected function calculateConcrete(
        \Bitrix\Sale\Shipment $shipment
    ): \Bitrix\Sale\Delivery\CalculationResult {
        $result = new \Bitrix\Sale\Delivery\CalculationResult();

        $pvzCode = $this->getSelectedPvzCode($shipment);
        if (!$pvzCode) {
            $result->addError(new \Bitrix\Main\Error('Оберіть пункт видачі'));
            return $result;
        }

        $cost = $this->calcCostBelarus(
            $pvzCode,
            $this->getWeight($shipment),
            $shipment->getOrder()->getPrice()
        );

        if ($cost > 0) {
            $result->setDeliveryPrice($cost);
        } else {
            $result->addError(new \Bitrix\Main\Error('Доставка недоступна'));
        }

        return $result;
    }
}

Якщо магазин працює і в Росії, і в Білорусі — створюються два окремі класи служб доставки: BoxberryRuDelivery та BoxberryByDelivery з різними токенами і точками відправки.

Створення відправлення в Білорусі

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

    $parselData = [
        'token'         => $this->getOption('BY_TOKEN'),
        'method'        => 'ParselCreate',
        'senderName'    => $this->getOption('SENDER_NAME'),
        'weight'        => $this->getWeight($shipment),
        'price'         => $order->getPrice(),
        'delivery_sum'  => $shipment->getPrice(),
        'vid'           => 1,
        'PVZ'           => $props->getItemByOrderPropertyCode('BOXBERRY_BY_PVZ')?->getValue(),
        'customerName'  => $props->getItemByOrderPropertyCode('FIO')?->getValue(),
        'customerPhone' => $props->getItemByOrderPropertyCode('PHONE')?->getValue(),
        'customerEmail' => $props->getItemByOrderPropertyCode('EMAIL')?->getValue(),
        'items'         => $this->buildItems($order),
    ];

    $response = $this->apiPost('https://api.boxberry.ru/json.php', $parselData);
    return $response['track'] ?? '';
}

Віджет вибору ПВЗ

Той самий JavaScript-віджет Boxberry, але з білоруським токеном і обмеженням по країні:

boxberry.open(function(result) {
    if (result && result.id) {
        document.getElementById('boxberry_by_pvz').value = result.id;
        document.getElementById('boxberry_by_pvz_name').value = result.name;
    }
}, 'BY_TOKEN', 'Минск', '', 0, 'e');

Трекінг

Метод ParselCheck працює з білоруським токеном ідентично російському. Polling агентом раз на 2–3 години.

Терміни

Склад Термін
Окреме налаштування (є рос. інтеграція) 1–2 дні
Повна інтеграція з нуля 4–5 днів
+ Трекінг + віджет ПВЗ +2 дні