Определение геолокации пользователя в Битриксе

Определение геолокации пользователя в Битриксе

Довольно часто ставиться задача отображать пользователю различный контент в зависимости от того, из какой страны или города просматривает пользователь ваш сайт. Определение страны и/или города конечно же должно быть автоматизировано. В версии модуля sale 17.0.13 появилось автоматическое определение местоположения покупателя при оформлении заказа.

Данный функционал реализован в классах пространства имён \Bitrix\Main\Service\GeoIp. В самом начале файла с обработчиком прописываем использование данного пространства:

Для обработки местоположения пользователя может быть использовано несколько сервисов. Список доступных можно посмотреть в административном разделе сайта: Настройки -> Настройки продукта -> Геолокация.

По умолчанию, пользователю доступны 3 обработчика: MaxMind, Sypex Geo и расширение GeoIP. Для MaxMind и Sypex Geo нужны ключи доступа к данным. При регистрации в сервисе Sypex Geo предоставляется 30000 бесплатных запросов в месяц, что вполное достаточно для многих сайтов.

Данный список можно расширить своими обработчиками, которые прописываются с помощью обработчика события onMainGeoIpHandlersBuildList для модуля main:

$eventManager = \Bitrix\Main\EventManager::getInstance(); 
$eventManager->addEventHandler( 'main', 'onMainGeoIpHandlersBuildList', 'GeoIpHandler' ); 
function GeoIpHandler() { 
	 return new \Bitrix\Main\EventResult( \Bitrix\Main\EventResult::SUCCESS, array( 'YourClass' => '/path/to/your/class.php', ) ); 
}

Обработчик должен обязательно содержать 3 метода: getTitle, getDescription и getData. Примеры обработчиков можно посмотреть в ядре. Встроенные в ядро обработчики расположены тут:

Для начала нужно получить IP-адрес пользователя:

Чтобы получить информацию по IP пользователя, нужно вызвать метод:

Чтобы получить код страны пользователя, нужно вызвать метод:

Еще один важный момент - есть возможность сократить количество запросов к сервису определения - вся информация о пользователе будет сохранена в cookies BX_MAIN_GEO_IP_DATA_XXX_XXX_XXX_XXX. Пока cookie будет жива и IP будет оставаться прежним, запросов в сервис геолокации по данному пользователю не будет. Для этого, нужно перед получением информации (getDataResult), нужно вызвать метод:

Последний момент - использование данных гео-локации в механизмах интернет-магазина. Для получения ID местоположения пользователя, нужно вызвать функцю:

\Bitrix\Sale\Location\GeoIp::getLocationId($ip, $lang);

Для получения кода местоположения используется функция:

\Bitrix\Sale\Location\GeoIp::getLocationCode($ip, $lang);

И для получения почтового индекса, используется функция:

\Bitrix\Sale\Location\GeoIp::getZipCode($ip, $lang);

Вариантов использования получения информации о геолокации пользователя может быть бесконечное множество - показ ближайшего к пользователю склада, отображение контактной информации локального представительства и многое другое.



Возврат к списку

На верх