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

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

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

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

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

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

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

Название* Срок действия Формат
_2gis_user Бессрочная. случайный UUID**
_2gis_session session (до закрытия браузера). случайный 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_user stat[user]
_2gis_session stat[sid]

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

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