Настройка геолокации на 1С-Битрикс

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

Настройка геолокации на 1С-Битрикс

Геолокация в Битриксе нужна для двух принципиально разных задач: определить физическое местоположение пользователя по IP (серверная сторона) или получить точные GPS-координаты с его устройства (браузерная сторона). Оба инструмента используются вместе в e-commerce — первый для предварительного определения города, второй для «найти ближайший магазин».

Серверное определение региона по IP

Битрикс не включает базу GeoIP в дистрибутив. Варианты:

MaxMind GeoIP2 — индустриальный стандарт. Бесплатная база GeoLite2-City обновляется еженедельно, точность для России — 85-90% на уровне города. Платная GeoIP2-City — точнее. Установка: скачиваете .mmdb файл, подключаете через composer require geoip2/geoip2, используете в PHP.

Sypex Geo — российская база, лучше работает по СНГ. Есть PHP-класс без composer-зависимостей, что удобно для старых инсталляций.

DaData API — облачный сервис, не требует локальной базы. Запрос к API при каждом новом IP. Подходит при невысокой нагрузке.

Интеграция в Битрикс через init.php:

AddEventHandler("main", "OnPageStart", function() {
    if (!isset($_SESSION['USER_REGION'])) {
        $ip = $_SERVER['REMOTE_ADDR'];
        // Убираем IPv6 mapped IPv4
        $ip = str_replace('::ffff:', '', $ip);

        $reader = new \GeoIp2\Database\Reader('/path/to/GeoLite2-City.mmdb');
        try {
            $record = $reader->city($ip);
            $_SESSION['USER_REGION'] = [
                'city' => $record->city->name,
                'city_ru' => $record->city->names['ru'] ?? '',
                'lat' => $record->location->latitude,
                'lng' => $record->location->longitude,
            ];
        } catch (\Exception $e) {
            $_SESSION['USER_REGION'] = ['city' => 'Москва'];
        }
    }
});

Результат кешируется в сессии — не стоит делать запрос к GeoIP на каждый хит.

Интеграция с модулем Location Битрикса

Модуль sale содержит таблицу b_sale_location с иерархией: страна → регион → город. Это внутренний справочник Битрикса для расчёта доставки. При определении города по GeoIP нужно найти соответствующую запись в b_sale_location:

$city = \Bitrix\Sale\Location\Search\Finder::find([
    'select' => ['ID', 'NAME.NAME', 'CODE'],
    'filter' => ['NAME.NAME' => $detectedCityName, 'NAME.LANGUAGE_ID' => 'ru'],
]);

Если совпадение найдено — сохраняете LOCATION_CODE в сессию/cookie. Этот код используется в компоненте bitrix:sale.location.selector.system и в расчёте стоимости доставки.

Браузерная геолокация: Geolocation API

HTML5 Geolocation API — для точного позиционирования. Требует разрешения пользователя и работает только по HTTPS:

navigator.geolocation.getCurrentPosition(
    function(position) {
        const lat = position.coords.latitude;
        const lng = position.coords.longitude;
        // Отправляем координаты на сервер
        fetch('/local/ajax/set_location.php', {
            method: 'POST',
            body: JSON.stringify({ lat, lng }),
            headers: { 'Content-Type': 'application/json' }
        });
    },
    function(error) {
        // Пользователь отказал — используем IP-геолокацию
    }
);

На сервере по координатам делаете обратное геокодирование (reverse geocoding) через Яндекс.Геокодер или Google Maps Geocoding API. Яндекс.Геокодер предпочтительнее для российских адресов.

Попап подтверждения города

Стандартный UX: определяете город автоматически, показываете попап «Ваш город — %city%? Да / Нет, выбрать другой». При «Да» устанавливаете cookie user_city с длительным TTL (30 дней). При «Нет» — показываете поиск по городам.

В Битриксе компонент bitrix:sale.location.selector.system предоставляет готовый селектор. Но его визуальное оформление часто требует кастомизации шаблона под дизайн сайта.