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

Очень часто бывает задача показывать пользователю различный контент в зависимости от того, из какого государства просматривает пользователь ваш сайт. Процесс определения государства конечно же должен быть автоматизирован. В версии модуля 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);

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

Количество показов: 9089
26.04.2018

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

Если вам была полезна статья можете отблагодарить автора:
Ethereum:

0x16Df809287333C49D3A237296C6248A6c08702Bc

Разработка сайта

Подайте заявку на разработку сайта на базе готового решения от компании 1С-Битрикс или одного из партнеров компании. Максимально подробно опишите, чему будет посвящен сайт, если это интернет-магазин - что он будет продавать, нужна ли мультиязычность, будут ли разные типы цен (розница, опт, крупный опт), будет ли интеграция с 1С, будет ли выгрузка товаров на различные торговые площадки...

Сопровождение сайта

Вы можете подать заявку на сопровождение вашего сайта на базе 1С-Битрикс. Сопровождение включает в себя: проверка актуальности обновлений сайта, проверка актуальности резервной копии, консультации по сайту. Опишите в заявке, какие еще объемы планируются на сопровождении и на какой срок вы планируете заключить договор на сопровождение - мы подберем подходящий вам бюджет на сопровождение

Работы по сайту

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