NAV
bash javascript php

Информация

Добро пожаловать на страницу документации RESTful API проекта Shopker

Начало работы

Требования

Для использования API Вам необходимы:

URL доступа

URL доступа API - это адрес, по которому установлен Shopker. Запросы имеют уровень доступа: "Пользователь" или "Администратор" (роль пользователя).

Пример: https://YOUR_SITE.COM/admin/users

Авторизация

Для авторизации необходима строка API токена. Для создания токена нужно в административной части сайта перейти в раздел "Пользователи", открыть для редактирования пользователя, нажать кнопку "Генерировать" в блоке "API токен", сохранить.

Второй способ - использовать API запрос для получения токена по логину и паролю.

Уровень доступа

Для доступа к запросам с базовым URL /admin/ пользователь должен иметь роль "Администратор".

Для доступа к запросам с базовым URL /api/ пользователь должен иметь роль "Пользователь" или "Администратор".

Токен

Получить токен

Получить токен по логину и паролю.

Пример запроса:

curl -X POST \
    "https://YOUR_SITE.COM/token" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"username": "aaa@bbb.cc", "password": "my_password"}'
const url = new URL(
    "https://YOUR_SITE.COM/token"
);

let headers = {
    "Content-Type": "application/json",
    "Accept": "application/json"
};

let body = {
    "username": "aaa@bbb.cc",
    "password": "my_password"
};

fetch(url, {
    method: "POST",
    headers: headers,
    body: JSON.stringify(body)
})
    .then(response => response.json())
    .then(json => console.log(json));

$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://YOUR_SITE.COM/token',
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json'
        ],
        'json' => [
            'username' => 'aaa@bbb.cc',
            'password' => 'my_password'
        ]
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Пример ответа (200):

{
    "token": "d8fee4722a464072608aa036c0dec127c6efc5ab6f5e96f48b5e7940255cce3431d7610723f1f83e64bf17c5eeec30ebbbdc56ba56835f4e9bc4ad57"
}

Пример ошибки (422):

{
    "error": "Не верный логин или пароль."
}

HTTP запрос

POST /token или POST /{locale}/token

Параметры

Параметр Описание Статус
username Логин или email пользователя. Обязательный
password Пароль пользователя. Обязательный

Пользователи

Создать пользователя

Создать запись одного пользователя в БД.

Пример запроса:

curl -X POST \
    "https://YOUR_SITE.COM/admin/users" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -H "X-AUTH-TOKEN: {token}" \
    -d '{"email":"ivansidorov@mail.ru","fullName":"Иван Петрович Сидоров","phone":"555-555","role":"ROLE_USER","isActive":true,"password":"123456789","confirmPassword":"123456789","apiToken":null,"options":[]}'
const url = new URL(
    "https://YOUR_SITE.COM/admin/users"
);

let headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-AUTH-TOKEN": "{token}"
};

let body = {
    "email": "ivansidorov@mail.ru"
};

fetch(url, {
    method: "GET",
    headers: headers,
    body: body
})
    .then(response => response.json())
    .then(json => console.log(json));

$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://YOUR_SITE.COM/admin/users',
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'X-AUTH-TOKEN' => '{token}',
        ],
        'json' => [
            'email' => 'ivansidorov@mail.ru'
        ]
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

HTTP запрос

POST /admin/users

Список пользователей

Получить список пользователей.

Пример запроса:

curl -X GET \
    "https://YOUR_SITE.COM/admin/users?sort_by=id&sort_dir=desc&page=1&limit=10" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -H "X-AUTH-TOKEN: {token}"
const url = new URL(
    "https://YOUR_SITE.COM/admin/users?sort_by=id&sort_dir=desc&page=1&limit=10"
);

let headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-AUTH-TOKEN": "{token}",
};

fetch(url, {
    method: "GET",
    headers: headers
})
    .then(response => response.json())
    .then(json => console.log(json));

$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://YOUR_SITE.COM/admin/users?sort_by=id&sort_dir=desc&page=1&limit=10',
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'X-AUTH-TOKEN' => '{token}',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Пример ответа (200):

{
    "items": [{
        "id": 1,
        "username": "aaa@bbb.cc",
        "email": "aaa@bbb.cc",
        "fullName": "user",
        "phone": "555-555",
        "options": [
            {"name": "state", "title": "Регион", "value": "Регион такой-то"},
            {"name": "zip", "title": "Индекс", "value": "112233"},
            {"name": "city", "title": "Город", "value": "Город такой-то"},
            {"name": "street", "title": "Улица", "value": "Улица такая-то"},
            {"name": "house", "title": "Дом", "value": "Дом такой-то"},
            {"name": "apartment", "title": "Квартира", "value": "Квартира такая-то"}
        ],
        "createdDate": "2020-09-13T19:38:26+03:00",
        "updatedDate": "2020-09-13T20:10:11+03:00",
        "isActive": true,
        "roles": ["ROLE_USER"],
        "role": "ROLE_USER"
    }, {
        ...
    }],
    "total": 2
}

HTTP запрос

GET /admin/users

Параметры URL

Параметр Описание По умолчанию
sort_by Поле для сортировки. name
sort_dir Направление сортировки. asc
page Номер страницы. 1
limit Максимальное число элементов. 10
search_word Поиск по полям "fullName", "email".

Один пользователь

Получить данные одного пользователя.

Пример запроса:

curl -X GET \
    "https://YOUR_SITE.COM/admin/users/1" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -H "X-AUTH-TOKEN: {token}"
const url = new URL(
    "https://YOUR_SITE.COM/admin/users/1"
);

let headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-AUTH-TOKEN": "{token}",
};

fetch(url, {
    method: "GET",
    headers: headers
})
    .then(response => response.json())
    .then(json => console.log(json));

$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://YOUR_SITE.COM/admin/users/1',
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'X-AUTH-TOKEN' => '{token}',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

HTTP запрос

GET /admin/users/{id}

Корзина покупок

Содержимое корзины

HTTP запрос

GET /api/{locale}/shop_cart/{type}

Пример запроса:

curl -X GET \
    "https://YOUR_SITE.COM/api/ru/shop_cart/shop" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -H "X-AUTH-TOKEN: {token}"

Добавить товар в корзину

HTTP запрос

POST /api/{locale}/shop_cart/action

curl -X POST \
    "https://YOUR_SITE.COM/api/ru/shop_cart/shop" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -H "Accept: application/json" \
    -H "X-AUTH-TOKEN: {token}" \
    -d "type=shop&action=add_to_cart&item_id=1&category_id=10&count=1&param__parameters=красный"

Создать заказ

Создать заказ с товарами из корзины.

HTTP запрос

POST /api/{locale}/checkout

curl -X POST \
    "https://YOUR_SITE.COM/api/ru/checkout" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -H "Accept: application/json" \
    -H "X-AUTH-TOKEN: {token}" \
    -d "order[email]=aaa@bbb.cc&order[fullName]=Иван иванов&order[phone]=555555&order[deliveryName]=0&order[paymentName]=0&order[comment]=&order[options][state]=&order[options][zip]=&order[options][city]=&order[options][street]&order[options][house]=&order[options][apartment]="

Пример ответа (200):

{
    "result": {
        "_id": 1,
        "createdDate": "2020-10-04T01:20:10+03:00",
        "updatedDate": "2020-10-04T01:20:10+03:00",
        "status": "Новый",
        "userId": 1,
        "email": "aaa@bbb.cc",
        "fullName": "Иван иванов",
        "content": [
            ...
        ]
        ...
    }
}

Пример ошибки (400):

{
    "message": "email: Значение не должно быть пустым.",
    "errors": {"order": {"email": "Значение не должно быть пустым."}}
}

Заказы

Все заказы

Получить список всех заказов.

HTTP запрос

GET /admin/orders

Пример запроса:

curl -X GET \
"http://YOUR_SITE.COM/admin/orders" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "X-AUTH-TOKEN: {token}"

Заказы пользователя

Получить список заказов авторизованного пользователя.

HTTP запрос

GET /api/{locale}/profile/history_orders/{page}

Пример запроса:

curl -X GET \
"http://YOUR_SITE.COM/api/ru/profile/history_orders" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "X-AUTH-TOKEN: {token}"

Страницы

Создание страницы пользователем

Создание страниц пользователями разрешено только, если в типе контента включен флажок "Разрешено создание пользователями".

HTTP запрос

POST /api/{locale}/user_content/{categoryId}

Параметры

Параметр Описание
locale Локаль
categoryId ID категории

Пример запроса:

curl -X POST \
"http://YOUR_SITE.COM/api/ru/user_content/5" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "X-AUTH-TOKEN: {token}" \
-d '{"title":"Заголовок", "description": "<p>Текст страницы...</p>"}'
const url = new URL(
    "https://YOUR_SITE.COM/api/ru/user_content/5"
);

let headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-AUTH-TOKEN": "{token}"
};

let body = {
    "title": "Заголовок",
    "description": "<p>Текст страницы...</p>"
};

fetch(url, {
    method: "POST",
    headers: headers,
    body: JSON.stringify(body)
})
    .then(response => response.json())
    .then(json => console.log(json));

$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://YOUR_SITE.COM/api/ru/user_content/5',
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'X-AUTH-TOKEN' => '{token}'
        ],
        'json' => [
            'title' => 'Заголовок',
            'description' => '<p>Текст страницы...</p>'
        ]
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Пример ответа (200):

{
    "success": true,
    "result": {
        "_id": 1,
        "parentId": 5,
        "isActive": true,
        "title": "Заголовок",
        "description": "<p>Текст страницы...</p>"
    }
}

Пример ошибки (422):

{
    "error": "Поле \"Заголовок\" обязательно для заполнения."
}

Получить страницу пользователя

Получить все данные страницы, созданной пользователем.

HTTP запрос

GET /api/{locale}/user_content/{categoryId}/{itemId}

Параметры

Параметр Описание
locale Локаль
categoryId ID категории
itemId ID страницы

Пример запроса:

curl -X GET \
"http://YOUR_SITE.COM/api/ru/user_content/5/1" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "X-AUTH-TOKEN: {token}"
const url = new URL(
    "https://YOUR_SITE.COM/api/ru/user_content/5/1"
);

let headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-AUTH-TOKEN": "{token}"
};

fetch(url, {
    method: "GET",
    headers: headers
})
    .then(response => response.json())
    .then(json => console.log(json));

$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://YOUR_SITE.COM/api/ru/user_content/5/1',
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'X-AUTH-TOKEN' => '{token}'
        ]
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Получить список страниц пользователя

Получить список всех страниц пользователя.

HTTP запрос

GET /api/{locale}/user_content/{categoryId}

Параметры URL

Параметр Описание По умолчанию
locale Локаль
categoryId ID категории
sort_by Поле для сортировки. id
sort_dir Направление сортировки. desc
page Номер страницы. 1
limit Максимальное число элементов. 12

Пример запроса:

curl -X GET \
"http://YOUR_SITE.COM/api/ru/user_content/5?sort_by=id&sort_dir=desc&page=1&limit=10" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "X-AUTH-TOKEN: {token}"
const url = new URL(
    "https://YOUR_SITE.COM/api/ru/user_content/5?sort_by=id&sort_dir=desc&page=1&limit=10"
);

let headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-AUTH-TOKEN": "{token}"
};

fetch(url, {
    method: "GET",
    headers: headers
})
    .then(response => response.json())
    .then(json => console.log(json));

$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://YOUR_SITE.COM/api/ru/user_content/5?sort_by=id&sort_dir=desc&page=1&limit=10',
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'X-AUTH-TOKEN' => '{token}'
        ]
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Пример ответа (200):

{
    "items": [{
        "id": 1,
        "parentId": 5,
        "isActive": true,
        "title": "Страница",
        "name": "stranitsa-1",
        "description": "Текст страницы...",
        "userId": 2
    }, {
        ...
    }],
    "total": 5
}

Редактировать страницу пользователя

Редактировать данные страницы, созданной пользователем.

HTTP запрос

PUT /api/{locale}/user_content/{categoryId}/{itemId}

Параметры

Параметр Описание
locale Локаль
categoryId ID категории
itemId ID страницы
curl -X PUT \
"http://YOUR_SITE.COM/api/ru/user_content/5/1" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "X-AUTH-TOKEN: {token}" \
-d '{"title":"Заголовок", "description": "<p>Текст страницы...</p>"}'
const url = new URL(
    "https://YOUR_SITE.COM/api/ru/user_content/5/1"
);

let headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-AUTH-TOKEN": "{token}"
};

let body = {
    "title": "Заголовок",
    "description": "<p>Текст страницы...</p>"
};

fetch(url, {
    method: "PUT",
    headers: headers,
    body: JSON.stringify(body)
})
    .then(response => response.json())
    .then(json => console.log(json));

$client = new \GuzzleHttp\Client();
$response = $client->put(
    'https://YOUR_SITE.COM/api/ru/user_content/5/1',
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'X-AUTH-TOKEN' => '{token}'
        ],
        'json' => [
            'title' => 'Заголовок',
            'description' => '<p>Текст страницы...</p>'
        ]
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Пример ответа (200):

{
    "success": true,
    "result": {
        "_id": 1,
        "parentId": 5,
        "isActive": true,
        "title": "Заголовок",
        "description": "<p>Текст страницы...</p>"
    }
}

Пример ошибки (422):

{
    "error": "Поле \"Заголовок\" обязательно для заполнения."
}

Удалить страницу пользователя

Удалить страницу, созданную пользователем.

HTTP запрос

DELETE /api/{locale}/user_content/{categoryId}/{itemId}

Параметры

Параметр Описание
locale Локаль
categoryId ID категории
itemId ID страницы

Пример запроса:

curl -X DELETE \
"http://YOUR_SITE.COM/api/ru/user_content/5/1" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "X-AUTH-TOKEN: {token}"
const url = new URL(
    "https://YOUR_SITE.COM/api/ru/user_content/5/1"
);

let headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-AUTH-TOKEN": "{token}"
};

fetch(url, {
    method: "DELETE",
    headers: headers
})
    .then(response => response.json())
    .then(json => console.log(json));

$client = new \GuzzleHttp\Client();
$response = $client->delete(
    'https://YOUR_SITE.COM/api/ru/user_content/5/1',
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'X-AUTH-TOKEN' => '{token}'
        ]
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Пример ответа (200):

{
    "success": true
}