Integration of 1C-Bitrix with the delivery service Autolightexpress (Belarus)

Our company is engaged in the development, support and maintenance of Bitrix and Bitrix24 solutions of any complexity. From simple one-page sites to complex online stores, CRM systems with 1C and telephony integration. The experience of developers is confirmed by certificates from the vendor.
Our competencies:
Development stages
Latest works
  • image_website-b2b-advance_0.png
    B2B ADVANCE company website development
    1175
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Website development for FIXPER company
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Development based on Bitrix, Bitrix24, 1C for the company Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Development based on 1C Enterprise for MIRSANBEL
    747
  • image_crm_dolbimby_434_0.webp
    Website development on CRM Bitrix24 for DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Development based on Bitrix24 for the company TECHNOTORGKOMPLEKS
    976

Integrating 1C-Bitrix with AutoLightExpress Delivery Service (Belarus)

AutoLightExpress is a Belarusian courier service specializing in deliveries primarily in Minsk and major Belarusian cities. It focuses on same-day urgent courier delivery and intercity express shipments. Unlike Belpochta and Boxberry, speed is its priority rather than pickup point coverage. It is used for stores with fast delivery requirements.

AutoLightExpress API

The API is provided under contract. The interface is REST JSON, with authorization via an API key in the header or request parameter. Documentation is provided upon connection. Base URL: https://api.alexpress.by/v1/ (confirmed with the account manager upon connection).

private function apiRequest(string $method, string $path, array $data = []): array
{
    $url = 'https://api.alexpress.by/v1' . $path;
    $ch = curl_init($method === 'GET' ? $url . '?' . http_build_query($data) : $url);

    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST  => $method,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            'X-Api-Key: ' . $this->getOption('API_KEY'),
            'Content-Type: application/json',
        ],
        CURLOPT_POSTFIELDS => $method !== 'GET' ? json_encode($data, JSON_UNESCAPED_UNICODE) : null,
    ]);

    $response = curl_exec($ch);
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    $decoded = json_decode($response, true);
    if ($code >= 400 || ($decoded['success'] ?? true) === false) {
        throw new \RuntimeException('ALE API error: ' . ($decoded['message'] ?? $response));
    }

    return $decoded['data'] ?? $decoded;
}

Cost calculation

AutoLightExpress calculates cost based on delivery zones. Minsk is one zone, other cities are different zones with a multiplying coefficient.

public function calcDeliveryCost(
    string $city,
    int $weightGram,
    bool $express = false
): float {
    $response = $this->apiRequest('POST', '/calculate', [
        'city'    => $city,
        'weight'  => $weightGram,
        'express' => $express, // same-day urgent delivery
    ]);

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

Two delivery services are created in 1C-Bitrix: "AutoLightExpress" (standard) and "AutoLightExpress Express" (same-day) — with different costs and delivery periods.

Creating a request

public function createPickup(\Bitrix\Sale\Shipment $shipment, bool $express = false): string
{
    $order = $shipment->getOrder();
    $props = $order->getPropertyCollection();

    $payload = [
        'externalOrderId' => (string)$order->getId(),
        'express'         => $express,
        'pickupDate'      => date('Y-m-d', strtotime($express ? 'today' : '+1 day')),
        'sender' => [
            'name'    => $this->getOption('SENDER_NAME'),
            'address' => $this->getOption('SENDER_ADDRESS'),
            'phone'   => $this->getOption('SENDER_PHONE'),
            'city'    => $this->getOption('SENDER_CITY'),
        ],
        'recipient' => [
            'name'    => $props->getItemByOrderPropertyCode('FIO')?->getValue(),
            'phone'   => $props->getItemByOrderPropertyCode('PHONE')?->getValue(),
            'address' => $props->getItemByOrderPropertyCode('ADDRESS')?->getValue(),
            'city'    => $props->getItemByOrderPropertyCode('CITY')?->getValue(),
        ],
        'cargo' => [
            'weight'        => $this->getWeight($shipment),
            'declaredValue' => $order->getPrice(),
            'description'   => 'Goods from online store',
        ],
        'paymentType' => 'prepaid', // prepaid or cash on delivery
    ];

    $response = $this->apiRequest('POST', '/orders', $payload);
    $orderId = (string)($response['id'] ?? '');

    $props->getItemByOrderPropertyCode('ALE_ORDER_ID')?->setValue($orderId);
    $order->save();

    return $orderId;
}

Limitation: Belarus addresses only

AutoLightExpress operates exclusively within Belarus. The delivery service class must restrict the coverage zone:

public function isCompatible(\Bitrix\Sale\Shipment $shipment): bool
{
    $location = $this->getShipmentLocation($shipment);
    $country = $this->getCountryByLocation($location);
    return $country === 'BY';
}

This prevents the service from being shown to customers with addresses outside Belarus.

Tracking

public function getStatus(string $orderId): string
{
    $response = $this->apiRequest('GET', '/orders/' . $orderId);
    return $response['status'] ?? '';
}

Polling via an agent 2–3 times per day for active shipments. For express orders — every hour during business hours.

Timelines

Scope Timeline
Cost calculation + request creation 2–3 days
+ Express mode + tracking +1 day
+ Geographic country restriction Included