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

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Интеграция 1С-Битрикс со службой доставки Европочта (Беларусь)
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1165
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • 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
    563
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    743
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

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

Европочта — белорусский частный почтовый оператор, работающий с 2002 года. Занимает значительную долю рынка доставки для белорусского e-commerce: широкая сеть пунктов выдачи по всей стране, приемлемые тарифы, доставка до двери. API предоставляется партнёрам — требуется регистрация в системе Европочты.

API Европочты

Европочта использует REST API с авторизацией через логин/пароль (Basic Auth или токен). Базовый URL: https://api.europochta.by/api. Документация предоставляется после регистрации партнёра.

Основные эндпоинты:

  • POST /rate/calculate — расчёт стоимости доставки
  • POST /order/create — создание заказа
  • GET /order/{id}/status — статус заказа
  • GET /pvz/list — список ПВЗ

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

class EuropachtaHandler extends \Bitrix\Sale\Delivery\Services\Base
{
    protected function calculateConcrete(
        \Bitrix\Sale\Shipment $shipment
    ): \Bitrix\Sale\Delivery\CalculationResult {
        $result = new \Bitrix\Sale\Delivery\CalculationResult();
        $order  = $shipment->getOrder();

        $response = $this->apiPost('/rate/calculate', [
            'from_city'    => $this->getOption('SENDER_CITY'),
            'to_city'      => $this->getOrderCity($shipment),
            'weight'       => max($shipment->getWeight() / 1000, 0.05),
            'declared'     => round($order->getPrice()),
            'delivery_type' => $this->getOption('DELIVERY_TYPE', 'pvz'), // pvz или door
        ]);

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

        return $result;
    }
}

Создание заказа

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

    $payload = [
        'external_id'   => 'bitrix_' . $order->getId(),
        'delivery_type' => $this->getOption('DELIVERY_TYPE', 'pvz'),
        'weight'        => max($shipment->getWeight() / 1000, 0.05),
        'declared'      => round($order->getPrice()),
        'cod'           => $this->getCodAmount($order), // наложенный платёж, 0 если предоплата
        'sender'        => [
            'name'    => $this->getOption('SENDER_NAME'),
            'phone'   => $this->getOption('SENDER_PHONE'),
            'address' => $this->getOption('SENDER_ADDRESS'),
        ],
        'recipient'     => [
            'name'    => $props->getItemByOrderPropertyCode('FIO')?->getValue(),
            'phone'   => $props->getItemByOrderPropertyCode('PHONE')?->getValue(),
            'city'    => $this->getOrderCity($shipment),
            'pvz_id'  => $props->getItemByOrderPropertyCode('EUROPOCHTA_PVZ')?->getValue(),
        ],
        'items'         => $this->buildItems($shipment),
    ];

    $response = $this->apiPost('/order/create', $payload);
    return (string)($response['order_id'] ?? '');
}

Поле cod — сумма наложенного платежа. Если заказ предоплачен, передаём 0. Если наложенный платёж — передаём полную сумму заказа (Европочта взыскивает с получателя и перечисляет магазину).

ПВЗ на сайте

public function getPvzList(string $city): array
{
    $cache = \Bitrix\Main\Data\Cache::createInstance();
    $key   = 'europochta_pvz_' . md5($city);

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

    $response = $this->apiGet('/pvz/list?city=' . urlencode($city));
    $pvz = $response['pvz'] ?? [];

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

    return $pvz;
}

Список ПВЗ показываем в выпадающем списке или на карте. При выборе ПВЗ сохраняем pvz_id в свойстве заказа.

Трекинг

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

public function getStatus(string $orderId): string
{
    $response = $this->apiGet("/order/{$orderId}/status");
    return $response['status'] ?? '';
}
Статус Европочты Значение
created Создан
accepted Принят на склад
in_transit В пути
arrived Прибыл в ПВЗ/город
delivered Вручён
returned Возврат

Сроки

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