Определение города по GeoIP и геозависимость на сайтах

Анатолий Ерофеев
Виктор С.
Подписаться

Слушайте, я не узнаю́ вас в гриме! Кто Вы такой?

© Иван Васильевич меняет профессию

Зачем нужен GeoIP

Перед Вами стоит задача показывать разные телефоны/цены/наличие товаров в зависимости от города пользователя? Или может быть вы хотите упростить пользователю оформление заказа? — Эти задачи упираются в автоматическое определение страны/города по IP-адресу.

Сложно ли определить местоположение пользователя по IP-адресу? Пожалуй не сложно. А вот сделать это качественно — задачка не для слабонервных. Этому есть несколько причин:

  1. Точность определения крайне низкая и варьируется в зависимости от базы IP-адресов
  2. IP-адреса постоянно меняют местоположение, а обновлять базы владельцы сайтов забывают
  3. У разработчиков есть соблазн пойти по кривой дорожке и начать обращаться к онлайн-сервисам
  4. Разработчикам лень делать кэширование
  5. Название города, которое возвращают гео-базы, сложно связать с местоположениями сайта и бизнес-логикой.
  6. В Битриксе нет готового компонента для отображения/смены города

Разница в трудоемкости между “и так сойдет” и “надежным решением” составляет 20-40 человеко-часов. Мы долго набивали шишки, а когда надоело — собрали все наши наработки в один крутой модуль для 1С-Битрикс.

Под капотом гео-модуля

Несколько GEO IP баз на выбор

Всего существует 4,22 миллиарда IPv4 адресов. Они делятся между странами. Внутри стран между интернет-операторами. Последние в свою очередь распределяют их между городами присутствия. А потом перераспределяют по необходимости.

Существуют специальные реестры где зафиксировано это самое распределение. В рамках статьи мы будем называть их GeoIP-базами. Отличаются они частотой обновления, точностью и объемом дополнительных данных (названия городов на нескольких языках, почтовые индексы, названия интернет-операторов).

В модуле мы поддерживаем 3 обычные гео-базы:

и одну “мета-базу”: MaxMind + IpGeoBase.

MaxMind определяется местоположение вплоть до городов по всему миру. Но обновляется редко (бесплатная версия раз в месяц). С другой стороны IpGeoBase хорошо работает только по РФ и Украине, зато обновляется каждый день.

“Мета-база” определяет местоположение сначала по IpGeoBase. Если страна определена как Россия или Украина, данные считаются самыми точными. Если страна другая — обращаемся к MaxMind.

Независимость от кодировок

Разные базы хранятся в разных кодировках (CP1251, UTF-8). И сайты могут быть в разных кодировках. Это было непросто, но мы реализовали корректную работу всех гео-баз для сайтов в обеих кодировках.

Высокая скорость работы

Почти со всеми гео-базам можно обращаться и через веб-сервисы, и локально (после скачивания).

Начинающие разработчики часто выбирают первый вариант. Оно и понятно, это проще и не нужно заботиться об обновлении баз. Но есть 2 ложки дегтя:

  • Зависнет веб-сервис — зависнет и сайт. Веб-сервис “умер” — сайт не открывается совсем.
  • Обращение к веб-сервисам это сетевой запрос. А это в свою очередь “самая долгая” операция в программировании (10-100% от времени формирования всей страницы).

Мы (ИНТЕРВОЛГА) видели много примеров, когда разработчики шли этим путем и получали кучу проблем со скоростью работы сайта.

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

Автоматическое обновление гео-баз

Локальные гео-базы это надежно. Но их нужно обновлять. А никто про это не помнит.

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

На выбор есть несколько способов: на агентах (по умолчанию), на хитах и на CRON.

Связь с местоположениями Битрикса

Геобазы возвращают текстовое название страны и города. Но без привязки к логике работы сайта толку от этого – ноль.

Давайте подробнее рассмотрим, зачем вообще нужно определение положения пользователя:

  1. Показать наличие и/или стоимость доставки в конкретном городе в карточке товара.
  2. Выбрать город по умолчанию в форме заказа.
  3. Показать разные номера телефонов в шапке для Москвы, Санкт-Петербурга, Города X и телефон по умолчанию для всех остальных.

К сожалению, в программном коде вы узнаете только название города вашего посетителя. Например, “Волгоград”. Для одной из трех задач этого хватит.

Для двух других задач потребуется сопоставить текстовое название города из гео-базы с местоположениями 1С-Битрикс. А они древовидные, а названия городов с гео-базами не совпадают (“Волгоград” vs “г. Волгоград”)…

Мы реализовали такое сопоставление хитрым алгоритмом и считаем получившийся результат достаточно качественным.

Интеграция с новым API Битрикса для геолокации

С версии 17.0.9 главного модуля в БУС добавлены службы геолокации и мы реализовали интеграцию нашего модуля с этим новым API.

Виджеты и компоненты

В модуле есть 2 компонента:

  • Местоположение пользователя.
    Виджет показывает текущий город посетителя с возможностью смены.
  • Автолокация.
    Кнопка при нажатии на которую происходит определение местоположения и перезагрузка страницы. Дополнительно в этом компоненте реализовано определение города на основе Яндекс.Карт (точнее, но работает только в браузере — не на сервере).

Подробнее об их использовании — ниже.

Дополнительные сведения о браузере

Помимо определения GEO IP мы встроили в наш модуль определение информации о браузере посетителя (операционная система, мобильность, язык и т.д.) на основе параметра браузера “User Agent”.

Эта информация нужна редко, но в паре проектов нам пригодилась.

Интерфейс проверки

В разделе настройки модуля мы реализовали отдельную закладку для тестирования его возможностей.

Она позволяет быстро протестировать все доступные гео-базы на разных IP-адресах.


Настройки модуля

Ограничения

  • Версия 1С-Битрикс >= 16.0
  • Версия PHP >= 5.5.

Установка, настройка, использование

Рассмотрим как установить, настроить и начать использовать модуль на примере типового интернет-магазина 1С-Битрикс.

Установка и настройка модуля

После установки модуля необходимо в настройках (Настройки > Настройки продукта > Настройки модулей > ”GEOIP и расширенные данные о посетителе”) выбрать наиболее подходящую GeoIP-базу. 

Чтобы компонент начал определять город посетителя автоматически, нужно импортировать стандартные местоположения магазина в Битрикс и включить настройку нашего модуля "Сопоставлять найденному адресу местоположение из модуля "Интернет-магазин"

Сохраняем настройки и переходим на вкладку “Проверка”. Проверяем свой IP-адрес. 

Местоположение определено верно? — Отлично.

Не верно? — Пробуйте другую гео-базу на вкладке “Основные”.

Для 1С-Битрикс 17+
Переходим в настройки геолокации 1С-Битрикс: Настройки > Настройки продукта > Геолокация. В списке доступных провайдеров открываем “INTERVOLGA: GeoIP и расширенные данные о посетителе”.

Активируем. Полем “Сортировка” устанавливаем самый высокий приоритет среди других провайдеров. Сохраняем.

Использование на уровне API

Давайте убедимся что модуль работает и разберемся как использовать его на уровне API.

В админ. панели на странице “Консоль PHP” выполните код

use Bitrix\Main\Loader;
if (Loader::includeModule('intervolga.enrich')) {
     $result = \Intervolga\Enrich\ProviderProxy::getIpInfo('88.87.88.238');
     var_dump($result);
}

Результат должен быть примерно такой

Выбор города в шапке сайта

Компонент называется intervolga:enrich.user.location. Вот так выглядит результат его работы.


Хотите получить полное описание настроек компонента и узнать как в своем коде узнать текущий выбранный/измененный город? — Поделитесь статьей в соц. сетях, укажите ссылку в форме ниже и мы пришлем Вам инструкцию.

Автоопределение города в оформлении заказа

Компонент enrich.autolocation – кнопочка, которая встраивается в старый шаблон компонента оформления заказа (версия Битрикса 16.0.11). По нажатию на эту кнопку происходит автоподстановка местоположения пользователя в поле ввода местоположения без перезагрузки страницы.


Если же у вас используется более новая версия Битрикса (17.0.+), компонент не нужен и местоположение будет определено автоматически за счет службы геолокации для автоопределения местоположения.

Выводы

Модуль intervolga.enrich был собран на базе наших лучших практик. Это универсальное надежное решение без каких-либо зависимостей.

Он закрывает большинство гео-задач встречаемых при разработке сложных интернет-магазинов:

  • выбор города в шапке сайт,
  • выбор города в профиле пользователя,
  • выбор города в оформлении заказа,
  • вывод определенного контента в зависимости от города.

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


Оцените статью
27.10.2017
Понравилась статья?
Поделитесь ссылкой с друзьями и коллегами!

Статьи по теме

18.05.2022
Обмен контрагентами между 1С и сайтом с сохранением структуры Партнеров, Контрагентов, Юридических лиц и Контактов O чем речь? Мы сделали B2B-Платформу для предприятий с партнерами-оптовиками и задачами автоматизации торговли. Некоторые Пользовательские сц...
13.05.2022
Кейс: Личный кабинет партнера крупнейшего поставщика медицинских изделий В 2019 году к нам обратилась крупная компания, занимающаяся поставкой медицинских изделий. Причина обращения была типична для бизнеса, работающего с крупно...
06.05.2022
Топ-7 платформ автоматизации оптовой торговли - Выбор лучшейЭта статья будет полезна владельцам бизнеса, коммерческим директорам, а также руководителям отделов по оптовой торговле оборудованием, материалам и продукцией ...
05.05.2022
Личный кабинет кандидата для автоматизации анкетирования. Ускорение в 3 раза и снижение нагрузки на 40%Статья описывает создание личного кабинета кандидата для HR-департамента компании Евраз. Мы рассказываем как расширяем функционал Хантфлоу с помощью технологий ...
19.04.2022
Как повысить эффективность работы менеджеров - 4 шага по обгону конкурентов Прибыль производителей оборудования и инструментов, а также собственников легкой промышленности напрямую связана с количеством реализованного товара. ...
04.03.2022
Платформа оптовых продаж: ускорение работы менеджеров, повышение чека, удобство b2b-клиентов Основные функции Платформы: Регистрация оптового партнера. Партнер заполняет форму, информация приходит на почту Менеджеру Авторизация и Восстановление...
Консультация по организации продаж
Давайте поговорим о ваших задачах
Оставьте заявку и мы свяжемся с вами как можно скорее.
Хочешь получать лучшие статьи от INTERVOLGA раз в месяц?
Подпишись на рассылку — спамить не будем