Перейти к содержимому

Сессия актора xAPI

POST
/wp-json/wp2lms/turbo/v1/xapi-actor/session
curl --request POST \
--url https://example.com/wp-json/wp2lms/turbo/v1/xapi-actor/session \
--header 'Content-Type: application/json' \
--data '{ "email": "learner@example.com", "name": "Анна Иванова" }'

Публичный мост same-origin xAPI actor → cookie-сессия WordPress. PHP: находит пользователя по email или создаёт слушателя (UserProvisioner: роль wp2lms_learner если есть, иначе subscriber), затем wp_set_current_user + wp_set_auth_cookie и свежий nonce wp_rest. Обязателен email (sanitize_email + is_email, иначе 400 invalid_email). name необязателен, по умолчанию пустая строка; если пользователь уже есть и name непустой — обновляет display_name. Это не логин администратора: роли administrator/editor/author или права edit_posts / manage_options — 403 privileged_user. Мост должен быть включён (модуль платформы xapi_actor_session или фильтр wp2turbo/xapi/enable_actor_session), иначе 403 disabled. Нужен nonce wp_rest в X-WP-Nonce или _wpnonce (иначе 403 invalid_nonce). Cookie-сессия редактора не требуется.

Media typeapplication/json
object
email
required

Email актора xAPI. Обязательно. PHP: sanitize_email; пустое/не email — 400 invalid_email. Используется как ключ поиска/создания WP-пользователя.

string
name

Отображаемое имя слушателя. Необязательно, дефолт ‘’. При создании пользователя, если пусто — login из локальной части email. У существующего непустой name обновляет display_name.

string
""
Example
{
"email": "learner@example.com",
"name": "Анна Иванова"
}

Сессия слушателя установлена. Тело: ok, created, user (id/email/display_name), nonce wp_rest.

Media typeapplication/json
object
ok

PHP всегда true на HTTP 200 этого моста.

boolean
created

True, если wp_insert_user только что создал слушателя; false, если пользователь с этим email уже был.

boolean
user

Слушатель, для которого выставлена cookie-сессия. Не гость и не null.

object
id

ID пользователя WordPress.

integer
email

User_email (или исходный email, если get_userdata не удался).

string
display_name

Display_name пользователя.

string
nonce

Свежий wp_create_nonce(‘wp_rest’) после установки сессии — для следующих запросов с cookie.

string
Example
{
"ok": true,
"created": false,
"user": {
"id": 45,
"email": "learner@example.com",
"display_name": "Анна Иванова"
},
"nonce": "a1b2c3d4e5"
}

Invalid_email — пустой или невалидный email после sanitize_email.

Media typeapplication/json
object
code

Машинный код WP_Error (например wp2lms_static_builder_busy, rest_forbidden, invalid_nonce).

string
message

Человекочитаемое сообщение ошибки из PHP / WordPress REST.

string
data

Обычно { status: <HTTP-код> }. Если status нет, ядро REST часто отдаёт 500.

object
key
additional properties
any
Example
{
"code": "wp2lms_static_builder_busy",
"message": "Build is currently building and cannot be updated.",
"data": {
"status": 409
}
}

Disabled — мост выключен; invalid_nonce — нет/неверный wp_rest nonce; privileged_user — email принадлежит привилегированному аккаунту.

Media typeapplication/json
object
code

Машинный код WP_Error (например wp2lms_static_builder_busy, rest_forbidden, invalid_nonce).

string
message

Человекочитаемое сообщение ошибки из PHP / WordPress REST.

string
data

Обычно { status: <HTTP-код> }. Если status нет, ядро REST часто отдаёт 500.

object
key
additional properties
any
Example
{
"code": "wp2lms_static_builder_busy",
"message": "Build is currently building and cannot be updated.",
"data": {
"status": 409
}
}

WP_Error из wp_insert_user без HTTP-status в data (часто existing_user_login / existing_user_email). WordPress REST отдаёт такие ошибки как 500.

Media typeapplication/json
object
code

Машинный код WP_Error (например wp2lms_static_builder_busy, rest_forbidden, invalid_nonce).

string
message

Человекочитаемое сообщение ошибки из PHP / WordPress REST.

string
data

Обычно { status: <HTTP-код> }. Если status нет, ядро REST часто отдаёт 500.

object
key
additional properties
any
Example
{
"code": "wp2lms_static_builder_busy",
"message": "Build is currently building and cannot be updated.",
"data": {
"status": 409
}
}