GeoIP в ядре: Manager, провайдеры и быстрые геттеры
Источники данных
Сервисы геолокации подключаются обработчиком onMainGeoIpHandlersBuildList; список активных провайдеров виден в админке на странице «Настройки продукта → Геолокация». У SypexGeo и платных баз бывают лимиты или требование ключа — это настраивается там же.
IP пользователя и полный объект
use Bitrix\Main\Service\GeoIp\Manager;
$ip = Manager::getRealIp();
$result = Manager::getDataResult($ip, LANGUAGE_ID);На части хостингов русскоязычная база отсутствует — пробуйте вторым аргументом 'en' и смотрите, заполняются ли строки локализации.
Проверка успеха и поля
if ($result->isSuccess()) {
$data = $result->getGeoData();
$city = $data->cityName;
$country = $data->countryName;
}Быстрые методы
$code = Manager::getCountryCode($ip, LANGUAGE_ID);
$name = Manager::getCountryName($ip, LANGUAGE_ID);
$city = Manager::getCityName($ip, LANGUAGE_ID);
$zip = Manager::getCityPostCode($ip, LANGUAGE_ID);
$pos = Manager::getGeoPosition($ip, LANGUAGE_ID);
$lat = Manager::getGeoPositionLatitude($ip, LANGUAGE_ID);
$lon = Manager::getGeoPositionLongitude($ip, LANGUAGE_ID);
$tz = Manager::getTimezoneName($ip, LANGUAGE_ID);Кто ответил
Поле handlerClass в getGeoData() показывает, какой обработчик реально дал результат — удобно для отладки порядка провайдеров.
Списки регионов
В исходных материалах приводился длинный CSV кодов регионов — в проектах его обычно не инлайнят в PHP: либо доверяют данным геопровайдера, либо хранят справочник отдельно.
Итог
Manager даёт как полноценный Result, так и компактные геттеры для типовых сценариев в шаблоне или при инициализации корзины/склада по местоположению.
Не хотите копаться сами?
Починю за 1-3 дня. Без предоплаты — оплата по результату.
15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии