Апельсинки › Разработчикам
Виджеты для сайтов
Кнопка «Поделиться»Виджет группыВиджет комментариевМои сайтыКонструктор
Приложения и игры
ОбзорАвторизация и подписьМетоды APIПлатежиКлиентская библиотекаМобильная версияКабинет разработчика
Прочее
Робот SvBot

Авторизация и подпись

Параметры iframe

Контейнер открывает ваш адрес методом GET со следующими параметрами:

ПараметрОписание
application_keyпубличный ключ приложения
viewer_idID пользователя, открывшего приложение
session_keyключ сессии пользователя в приложении (24 ч)
session_secret_keyсекрет сессии — им подписываются вызовы API от имени пользователя (можно использовать в браузере)
permissionsмаска прав, которые дал пользователь
deviced компьютер, m телефон
langязык
tsвремя создания параметров (unix); не принимайте старше 15 минут
api_serverадрес REST API
containerадрес клиентской библиотеки
custom_argsпроизвольная строка из ссылки на приложение (?custom_args=…), например id уровня
auth_sigmd5(viewer_id + session_key + application_secret) — быстрая проверка личности
sigподпись всех параметров (см. ниже)

Алгоритм подписи

Отсортируйте все параметры по имени (кроме sig), соедините как имя=значение без разделителей, допишите секрет и возьмите md5:

sig = md5( "application_key=…" + "auth_sig=…" + "device=d" + … + "viewer_id=42" + application_secret )

PHP:

function sv_sign(array $params, string $secret): string {
    unset($params['sig']); ksort($params);
    $s = ''; foreach ($params as $k => $v) $s .= $k . '=' . $v;
    return md5($s . $secret);
}
if (!hash_equals(sv_sign($_GET, APP_SECRET), $_GET['sig'] ?? '')) die('bad sig');
$viewer = (int)$_GET['viewer_id'];

Для вызовов API подпись считается так же, но секретом служит session_secret_key (вызов от имени пользователя) либо application_secret (серверный вызов без сессии, с параметром uid).

Вызов метода

GET http://api.apelsinki.com/api/v1/users.getCurrentUser?application_key=…&session_key=…&sig=…
=> {"response": {"uid": 42, "first_name": "Игорь", …}}
=> {"error": {"code": "BAD_SIG", "msg": "…"}}

Допустимы GET и POST. С параметром callback=имя ответ придёт как JSONP.

Код ошибкиЗначение
BAD_APPнеизвестный application_key
BAD_SESSIONсессия не найдена/истекла — перезагрузите iframe
BAD_SIGневерная подпись
NEED_SESSIONметоду нужен session_key или uid
NOT_INSTALLEDпользователь не установил приложение
PERMISSION_DENIEDнет права
LIMITпревышен лимит
PARAMневерные параметры
UNKNOWN_METHODметода нет