Определение по 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 комментариевКомментариев пока нет.
Оставить комментарий