@zahar_92

Почему не работает Sypex Geo?

Прошу помощи. Sypex Geo не определяет местоположение. В php консоли битрикса выполняю такой код:
$ip = $_SERVER["REMOTE_ADDR"];
    if(!empty($_SERVER["HTTP_X_REAL_IP"])){
        $ip = $_SERVER["HTTP_X_REAL_IP"];
    }
 
$obBitrixGeoIPResult = \Bitrix\Main\Service\GeoIp\Manager::getDataResult($ip, 'ru');
    if($obBitrixGeoIPResult !== \Bitrix\Main\Service\GeoIp\Manager::INFO_NOT_AVAILABLE){
        if($obResult = $obBitrixGeoIPResult->getGeoData()){
            $_SESSION['GEOIP'] = get_object_vars($obResult);
            $city = isset($_SESSION['GEOIP']['cityName']) && $_SESSION['GEOIP']['cityName'] ? $_SESSION['GEOIP']['cityName'] : '';
        }
    }
 
print_r($_SESSION['GEOIP']);

На выходе получаю:
Array
(
    [ip] => 62.33.36.6
    [lang] => ru
    [countryName] => 
    [regionName] => 
    [subRegionName] => 
    [cityName] => 
    [countryCode] => 
    [regionCode] => 
    [zipCode] => 
    [latitude] => 
    [longitude] => 
    [timezone] => 
    [asn] => 
    [ispName] => 
    [organizationName] => 
    [handlerClass] => Bitrix\Main\Service\GeoIp\SypexGeo
)

В чем проблема? В настройках Sypex Geo установлен и активен.
  • Вопрос задан
  • 3240 просмотров
Решения вопроса 1
winer
@winer
занимаюсь разработкой сайтов на 1c-bitrix
Метод \Bitrix\Main\Service\GeoIp\Manager::getDataResult является оберткой над обработчиками геолокации, которые расположены тут Настройки > Настройки продукта >Геолокация

На этой странице можно увидеть список обработчиков. Выше указанный метод выбирает обработчик в соответствии с сортировкой и пытается сделать запрос через его API. Если был получен результат, то возвращает его в виде объекта \Bitrix\Main\Service\GeoIp\Result, иначе идет запрос через следующий обработчик.

Для Sypex Geo обработчиком является класс \Bitrix\Main\Service\GeoIp\SypexGeo, который расположен тут /bitrix/modules/main/lib/service/geoip/sypexgeo.php

Попробовал напрямую сделать запрос через обработчик Sypex Geo, использовав IP из вашего примера:
$ob = new \Bitrix\Main\Service\GeoIp\SypexGeo();
$res = $ob->getDataResult("62.33.36.6");
print_r($res);

В ответ получил корректный набор данных
Bitrix\Main\Service\GeoIp\Result Object
(
    [geoData:protected] => Bitrix\Main\Service\GeoIp\Data Object
        (
            [ip] => 62.33.36.6
            [lang] => en
            [countryName] => Russia
            [regionName] => Tambovskaya Oblast'
            [subRegionName] => 
            [cityName] => Michurinsk
            [countryCode] => RU
            [regionCode] => RU-TAM
            [zipCode] => 
            [latitude] => 52.8978
            [longitude] => 40.4907
            [timezone] => Europe/Moscow
            [asn] => 
            [ispName] => 
            [organizationName] => 
            [handlerClass] => 
        )

    [isSuccess:protected] => 1
    [errors:protected] => Bitrix\Main\ErrorCollection Object
        (
            [values:protected] => Array
                (
                )

        )

    [data:protected] => Array
        (
        )

)


Возможно у вас достигнут лимит по запросам.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы