RankAPP Connect · SDK 1.1.0

Документация Connect

Вход в вашем магазине: JavaScript SDK, сеансы, cookies и путь покупателя.

Один аккаунт для магазинов

SDK позволяет покупателям входить в магазин с аккаунтом, используемым в приложении. Документация описывает методы, доступные в поддерживаемых магазинах.

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

Добавление входа

В поддерживаемом магазине клиент window.rankappConnect уже загружен и настроен. Используйте три метода: login(), getSession() и logout(). Дополнительная установка не нужна. Полный пример лишь добавляет кнопки и доступные сообщения состояния.

Вызывайте login() непосредственно при клике. Промис возвращает {status: "success", session}, {status: "cancelled"} или {status: "redirecting"}. При ошибке промис отклоняется со стабильным кодом. На мобильных устройствах и при блокировке окна используется перенаправление. returnTo должен оставаться в вашем магазине.

Пример JavaScript
const connect = window.rankappConnect;

function onSignInClick() {
  return connect.login({ returnTo: '/account' });
}

function readSession() {
  return connect.getSession();
}

function onSignOutClick() {
  return connect.logout();
}
Показать полный пример с кнопками и сообщениями
Пример JavaScript
<button type="button" id="connect-login">Войти через RankAPP</button>
<button type="button" id="connect-logout" hidden>Выйти</button>
<p id="connect-status" role="status" aria-live="polite"></p>

<script>
const connect = window.rankappConnect;
const login = document.querySelector('#connect-login');
const logout = document.querySelector('#connect-logout');
const status = document.querySelector('#connect-status');
const copy = {
  "cancelled": "Вход отменён. Можно попробовать снова.",
  "redirecting": "Переход к странице входа…",
  "login": "Войти через RankAPP",
  "logout": "Выйти",
  "signedOut": "Вы не вошли в аккаунт.",
  "signedIn": "Вы вошли: ",
  "error": "Вход недоступен. Повторите попытку.",
  "pending": "Выполняется вход…"
};
function render(session) {
  status.textContent = session.authenticated
    ? copy.signedIn + session.user.username : copy.signedOut;
  logout.hidden = !session.authenticated;
}
function failure() {
  status.textContent = copy.error;
}
function busy(value) {
  login.disabled = logout.disabled = value;
}
login.addEventListener('click', async () => {
  busy(true);
  status.textContent = copy.pending;
  let redirecting = false;
  try {
    const result = await connect.login({ returnTo: '/account' });
    if (result.status === 'success') render(result.session);
    else if (result.status === 'cancelled') status.textContent = copy.cancelled;
    else {
      redirecting = true;
      status.textContent = copy.redirecting;
    }
  } catch (error) { failure(); }
  finally { if (!redirecting) busy(false); }
});
logout.addEventListener('click', async () => {
  busy(true);
  try { render(await connect.logout()); }
  catch (error) { failure(); }
  finally { busy(false); }
});
busy(true);
connect.getSession().then(render).catch(failure)
  .finally(() => busy(false));
</script>

Отображение сеанса

getSession() запрашивает сервер: {authenticated: false} означает отсутствие сеанса. Сеанс содержит user (userId, username, avatarUrl, language), а в управляемых магазинах — orders. Вызывайте метод при загрузке и после перенаправления; не определяйте личность по параметрам URL.

Сбои сервиса остаются ошибками: STOREFRONT_SESSION_ERROR не означает выход из аккаунта. Покажите сообщение с предложением повторить попытку. login() отличает отмену от ошибки; logout() завершает только сеанс магазина.

Идентификация и cookies

SDK требует HTTPS для всех сайтов и конечных точек, включая локальную разработку. Используйте локальный HTTPS-сервер с сертификатом, которому доверяет браузер. HTTP никогда не принимается для аутентификации.

Пароль вводится на auth.rankapp.io, а не на сайте продавца. Одноразовый код и PKCE S256 связывают окно с исходным запросом. Обмен кода и хранение токенов выполняются на сервере; сообщение о завершении из всплывающего окна не содержит токенов.

Cookies сеанса используют HttpOnly, Secure и SameSite=Lax. Каждый cookie ограничен собственным хостом, без общего атрибута Domain. Центральный сеанс и сеансы отдельных магазинов независимы. Вызов logout() завершает сеанс магазина, но не обязательно центральный сеанс.

Сервер магазина

Эта документация описывает SDK 1.1.0. В совместимом магазине используйте только настроенный клиент window.rankappConnect. Сервер управляет входом, сеансом и выходом, а клиент выполняет необходимые подписанные запросы. Настраивать конечные точки или адаптеры на странице не нужно.

Проверка в предпросмотре

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

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

Подготовка внешней интеграции

Регистрация интеграций для независимых внешних сайтов пока не открыта. Сначала необходимы регистрация клиентов, проверка адресов возврата и определение предоставляемых прав доступа.

Не придумывайте совместимые client_id, адрес выдачи токенов или настройки OIDC. Текущий контракт относится к поддерживаемым магазинам и их адаптеру. Не передавайте пароли и токены в JavaScript продавца, всегда проверяйте сеанс на сервере и предусмотрите сообщения об отмене и временных сбоях.