1С-Битрикс / D7

Определение местоположения по IP в 1С-Битрикс D7

Определение по IP даёт примерное, а не точное местоположение. Примеры проверялись на версии 1С-Битрикс, актуальной на момент публикации; перед использованием в новом проекте стоит сверить API с текущей документацией.

Распространённая задача — определить примерное местоположение пользователя по его IP. Одно время в битриксе было достаточно проблематично получить местоположение пользователя, но с версии 17.0.13 необходимый функционал появился в коробке. Для начала необходимо заглянуть в админку и настроить необходимые обработчики для определения местоположения:

Настройки –> Настройки продукта –> Геолокация

Как видно мы можем использовать несколько обработчиков для определения местоположения.

GeoIP - это расширение относится к серверному и работает на стороне сервера. Для работы, необходимо установить это расширение на сервер версии 1.4.0 и загрузить платные базы данных.

MaxMind - работает только по подписке. Необходимо получить лицензионный ключ в этом сервисе.

Условия и лимиты сторонних GeoIP-сервисов меняются; перед использованием проверьте актуальный тариф и лицензионные условия провайдера. Но при увеличении этого числа потребуется получить ключ.

Для работы с сервисами геолокации в битрикс d7 используются классы в пространстве имён \Bitrix\Main\Service\GeoIp

Для упрощения работы с геолокацией будем использовать сокращение:

use \Bitrix\Main\Service\GeoIp;

Для того, чтобы определить местоположение, необходимо получить IP пользователя:

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

Зная IP адрес, можно запросить информацию о нем:

$geoData = GeoIp\Manager::getDataResult($userIP, "ru");

Метод возвращает объект класса GeoIp\Result если результат найден и GeoIp\Manager::INFO_NOT_AVAILABLE если не найден

Для проверки, получены результаты или нет, используем метод isSuccess()

$geoData->isSuccess();

Также можно получить данные геолокации методом getGeoData

$geoDataResult = $geoData->getGeoData();

$geoDataResult->countryName; //Страна
$geoDataResult->regionName; // Регион
$geoDataResult->subRegionName;
$geoDataResult->cityName; // Город
$geoDataResult->countryCode; // Код страны
$geoDataResult->regionCode; // Код региона
$geoDataResult->zipCode; //Индекс
$geoDataResult->latitude; //Широта
$geoDataResult->longitude; //Долгота
$geoDataResult->timezone; //Временная зона -  Europe/Moscow
$geoDataResult->asn;
$geoDataResult->ispName;
$geoDataResult->organizationName; 
$geoDataResult->handlerClass; //Класс через который работает метод

Также данные можно получить по отдельности:

GeoIp\Manager::getCityName($realIP, "ru"); // Город
GeoIp\Manager::getCityPostCode($userIP, "ru"); // Индекс
GeoIp\Manager::getCountryCode($userIP, "ru"); // Код страны
GeoIp\Manager::getCountryName($userIP, "ru"); // Страна
GeoIp\Manager::getGeoPosition($userIP, "ru"); // Широта и долгота
GeoIp\Manager::getGeoPositionLatitude($userIP, "ru"); // Широта
GeoIp\Manager::getGeoPositionLongitude($userIP, "ru"); // Долгота
GeoIp\Manager::getIspName($userIP, "ru"); // Имя Internet Service Provider (ISP)
GeoIp\Manager::getOrganizationName($userIP, "ru"); // Организация
GeoIp\Manager::getTimezoneName($userIP, "ru"); // Временная зону

Для уменьшения количества запросов к сервисам определения местоположения стоит сохранять результат в cookies. Вызываем useCookieToStoreInfo перед getDataResult

GeoIp\Manager::useCookieToStoreInfo(true);

Определение местоположения через модуль магазина (sale)

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

Для работы с местоположениями магазина используется класс Bitrix\Sale\Location\GeoIp

\Bitrix\Sale\Location\GeoIp::getLocationId($userIP, "ru");//ID
\Bitrix\Sale\Location\GeoIp::getLocationCode($userIP, "ru");//Код
\Bitrix\Sale\Location\GeoIp::getZipCode($userIP, "ru");//Индекс

Эти методы находят местоположение в базе по названию независимо от регистра. Также эти методы сохраняют данные о местоположении в cookies.

Для работы с местоположениями магазина(sale) в битриксе есть свои классы, о которых можно прочесть в статье "Работа с местоположениями магазина битрикс d7".

Нужна помощь с логикой на D7?
Разовые доработки 1С-Битрикс

Комментарии

0 комментариев

Комментариев пока нет.

Оставить комментарий

Есть проект или задача?

Расскажите, что нужно разработать, доработать или интегрировать. Разберём задачу и предложим следующий шаг.

Обсудить проект