Написал модуль для определения местоположения пользователя по ip-адресу с 1С-Битрикс. Главной задачей — было не запрашивать информацию у сторонних сервисов, а работать с локальной базой адресов. Благо, тот же ipgeobase.ru её предоставляет бесплатно.

При установке модуля скачиваются актуальные базы. Если вдруг сервер ipgeobase будет недоступен, то будут установлены базы от 03.03.2015 (на момент написания это были самые свежие).

В текущей версии модуль расчитан на разработчиков (возможно в следующих версих модуль будет расширен. Если есть идеи как — предлагайте в комментариях). В поставке есть PHP-класс, который работает с локальной базой адресов. Метод getRecord($ip) возвращает информацию о найденном местоположении.

Пример:

use \Bitrix\Main\Loader;
use \Olegpro\IpGeoBase\IpGeoBase;
 
if(Loader::includeModule('olegpro.ipgeobase')) {   
    echo '<pre>';print_r(IpGeoBase::getInstance()->getRecord($_SERVER['REMOTE_ADDR']));echo '</pre>';
}

Выведет:

Array
(
    [range] => 78.36.192.0 - 78.36.223.255
    [cc] => RU
    [city] => Калининград
    [region] => Калининградская область
    [district] => Северо-Западный федеральный округ
    [lat] => 54.711594
    [lng] => 20.509972
)

Работает довольно шустро. Пример выше отрабатывает за 0.001734.03 секунды. Для ещё большей скорости файл базы можно засунуть в RAM-память. Так же можно кешировать результаты самих запросов, например на 1 час.

В рамках хита запросы кешируются на уровне класса.

За основу поиска по базе адресов взят репозиторий: https://github.com/rossvs/ipgeobase.php

Установить модуль «IpGeoBase. Определение местоположения по IP-адресу» можно через Маркетплейс Битрикс

Смотреть демо работы