Информация
Добро пожаловать на страницу документации RESTful API проекта Shopker
Начало работы
Требования
Для использования API Вам необходимы:
- URL доступа
- 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¶m__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
}