Налаштування геолокації на 1С-Бітрікс

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

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

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

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

  • 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С-Бітрікс

Геолокація у Бітриксі потрібна для двох принципово різних завдань: визначити фізичне місцезнаходження користувача за 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 надає готовий селектор. Але його візуальне оформлення часто потребує кастомізації шаблона під дизайн сайту.