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

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

257
26.04.2018

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


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

use \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. Примеры обработчиков можно посмотреть в ядре. Встроенные в ядро обработчики расположены тут:

'\Bitrix\Main\Service\GeoIp\MaxMind' => 'lib/service/geoip/maxmind.php',
'\Bitrix\Main\Service\GeoIp\Extension' => 'lib/service/geoip/extension.php',
'\Bitrix\Main\Service\GeoIp\SypexGeo' => 'lib/service/geoip/sypexgeo.php'

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

$ipAddress = GeoIp\Manager::getRealIp();

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

$result = GeoIp\Manager::getDataResult($ipAddress, "ru")->getGeoData();

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

$country = $result->countryCode;

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

GeoIp\Manager::useCookieToStoreInfo(true);

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

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

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

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

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

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

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



Благодарю за внимание! Делитесь вашими замечаниями в комментариях ниже.


P.S. Обращайтесь ко мне за приобретением лицензий и продлений на 1C-Битрикс "Управление сайтом", лицензий на облачную и коробочную версии Битрикс 24 а также за приобретением и внедрением готовых решений на базе 1С-Битрикс от партнеров. За более подробной информацией свяжитесь со мной любым удобным для вас способом


Комментарии

Еще никто не комментировал данную публикацию. Будьте первыми!

Добавить комментарий

captcha

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