Skip to content

Покупатель

Запросы идут с cookie витрины. Форма ответа контактов зависит от поколения личного кабинета.

Контакты

Гость классического кабинета не получает карточку:

GET/client_account/contacts.json
const response = await fetch("/client_account/contacts.json", {
  credentials: "same-origin",
  headers: { Accept: "application/json" }
});
const data = await response.json();

Ответ · 200

{
  "status": "error",
  "message": "Not authorized",
  "url": "/client_account/session/new"
}

Личный кабинет третьего поколения отвечает status: "ok" и объектом client. У гостя registered равен false, имя, телефон и email пустые:

{
  "status": "ok",
  "client": {
    "id": null,
    "email": null,
    "name": null,
    "surname": null,
    "middlename": null,
    "phone": null,
    "registered": false,
    "subscribe": true,
    "bonus_points": 0,
    "client_group_id": null,
    "type": "Client::Individual",
    "fields_values": [],
    "default_address": null,
    "orders_count": 0
  }
}

У вошедшего покупателя те же ключи заполнены: id, email, name, phone, registered: true, orders_count, default_address.

Обратная связь

Тело — объект feedback. content обязателен. Пустой content отвечает 200 и { "status": "error", "errors": { "content": ["Сообщение не может быть пустым"] } }. Запрос без объекта feedback отвечает { "status": "error", "errors": {} }.

POST/client_account/feedback.json
Параметр Описание
feedback[content] обязательный
строка
Текст сообщения. Пустой текст отвечает ошибкой поля content.
feedback[from] необязательный
строка
Email отправителя.
feedback[name] необязательный
строка
Имя.
feedback[phone] необязательный
строка
Телефон.
feedback[subject] необязательный
строка
Тема письма.
g-recaptcha-response необязательный
строка
Токен reCAPTCHA. Его передают, когда в магазине выбран этот тип капчи.
recaptcha_type необязательный
строка
Только для reCAPTCHA. У невидимой капчи значение invisible.
yandex-smart-token необязательный
строка
Токен Yandex SmartCaptcha. Его передают, когда в магазине выбран этот тип капчи. Имя совпадает со скрытым полем виджета.
const csrfToken = document.querySelector('meta[name="csrf-token"]').content;

const response = await fetch("/client_account/feedback.json", {
  method: "POST",
  credentials: "same-origin",
  headers: {
    Accept: "application/json",
    "Content-Type": "application/json",
    "X-CSRF-Token": csrfToken
  },
  body: JSON.stringify({
    feedback: {
      from: "from@mail.ru",
      name: "Антон",
      phone: "+7 (111) 111 11 11",
      subject: "Обратная связь",
      content: "Тест документации"
    }
  })
});
const data = await response.json();

Ответ · 200

{
  "status": "ok",
  "notice": "Сообщение успешно отправлено."
}

Неверный CSRF: 422 и { "status": "error", "message": "Invalid CSRF token" }.

Какое поле капчи передавать, зависит от типа капчи магазина. Для reCAPTCHA это g-recaptcha-response. На формах обратного звонка и предзаказа эта капча невидимая: вместе с токеном передают recaptcha_type=invisible. Для Yandex SmartCaptcha это yandex-smart-token на верхнем уровне запроса, поле recaptcha_type не нужно. Форма подписки в подвале капчу не показывает. Запрос витрины уходит как application/x-www-form-urlencoded и для reCAPTCHA передаёт токен и тип ещё и внутри feedback. Сервер читает токен на верхнем уровне.

Вход

Классический кабинет принимает POST /client_account/session.json с полями email и password либо login и code. Успех возвращает client.

Одноразовый код для кабинета третьего поколения: POST /client_account/one_time_code.json с полем login. Пустой логин:

{
  "status": "error",
  "errors": ["Недопустимый адрес электронной почты"],
  "timeout": null
}

Успешная отправка кода отвечает { "status": "ok", "timeout": 60 }. timeout — секунды до повторной отправки. Тип логина задаёт type (email по умолчанию), канал — auth_type (sms по умолчанию).

Выход из классического кабинета: POST /client_account/exit.json.

Ключ мессенджера

GET /front_api/messengers/anonymous_key.json возвращает строку ключа анонимной сессии, не объект. Ключ нужен виджету сообщений, чтобы отличить гостя до регистрации.