Руководство по интеграции статистики

2ГИС не имеет возможности получить данные о пользователе, осуществляющем через сервис партнера поиск по данным 2ГИС, так как запрос на поиск (или, например, список по рубрике) осуществляется с сервера партнера.

Поэтому партнеру необходимо прокинуть во все запросы данные о пользователе. 2ГИС интересуют следующие данные:

  • идентификатор пользователя;
  • идентификатор сессии пользователя.

Идентификаторы пользователя

На своей стороне партнеру необходимо сгенерировать две куки для своего домена (название может быть другим):

Название*Срок действияФормат
_2gis_userБессрочнаяСлучайный UUID
_2gis_sessionsession (до закрытия браузера)Случайный UUID

* название куки может быть другим по усмотрению партнера

** библиотека для генерации UUID в PHP или короткий сниппет, а так же RFC по UUID

Куки должны быть без аттрибута http-only, чтобы к ним был доступ из JS-библиотеки 2GIS apitracker.js

Пример кода на PHP:

function randomUUID() {
    $data = mt_rand();
    return \Ramsey\Uuid\Uuid::uuid5(Uuid::NIL, $data)->toString();
}

function initCookie($name, $expire) {
    if (!isset($_COOKIE[$name])) {
        $value = randomUUID();
        setcookie($name, $value, $expire);
    } else {
        $value = $_COOKIE[$name];
    }
    return $value;
}

$dgisUserCookieName = '_2gis_user';
$dgisSessionCookieName = '_2gis_session';

$dgisUserCookieValue = initCookie($dgisUserCookieName, strtotime('+20 years'));
$dgisSessionCookieValue = initCookie($dgisSessionCookieName, 0);

Передача параметров

В запросы АПИ на catalog.api.2gis.ru с сервера партнеру необходимо передать значения кук GET-параметрами:

Название кукиПараметр
_2gis_userstat[user]
_2gis_sessionstat[sid]

Пример на PHP с использованием АПИ-клиента, не поддерживающего идентификаторы в реализации по умолчанию:

$apiClient = new \DGApiClient\ApiConnection('КЛЮЧ ПАРТНЕРА');
$catalogClient = new \DGApiClient\Catalog($apiClient);
$results = $catalogClient->branchSearch('кафе', [
    'region_id'  =>  1,
    'stat[user]' =>  $dgisUserCookieValue,
    'stat[sid]'  =>  $dgisSessionCookieValue
]);