Описание взаимодействия через XHR
Выполнение запросов
Запрос осуществляется может осуществляться как методом FormData (Content-type: application/x-www-form-urlencoded), так и Payload (Content-type: application/json)
URL для обработки запросов
имя сайта/?option=com_wmartalpha&task=api.methodName
Первоначальное получение токена выполняется методом
api.init
CSRF-токен должен передаваться клиентом в заголовке
csrf-token, либо в параметре
csrfToken тела запроса.
Пример
Ответ возвращается в формате JSON
Общие структурные элементы
| ok | Флаг успешности выполнения запроса | int |
| errors | Запись со списком ошибок запроса | [] |
{
ok: int,
errors: [
{
error: string,
type: string
},
...
],
...
}
Общие ошибки
| core | csrfError | CSRF токен не передан или передан неверный токен |
| core | tooManyRequests | Обнаружен флуд запросами. Данный ip адрес временно заблокирован. Поле delay указывает время, оставшееся до конца блокировки |
| core | forbidden | Данная операция запрещена для данного пользователя |
Инициализация
init
имя сайта/?option=com_wmartalpha&task=api.init
Инициализация сессии, получение токена
Результат
| csrfToken | csrf токен | string |
Авторизация
login
имя сайта/?option=com_wmartalpha&task=api.login
Авторизация пользователя
Запрос
| login | Логин(email или номер телефона в 11-значном формате) | string обязательный |
| password | Пароль | string обязательный |
| remember | Запомнить пользователя | bool |
Результат
Ошибки
| login | incorrect | Формат логина указан неверно |
| login | unregistred | Пользователь с таким логином не зарегистрирован |
| password | wrong | Указан неверный пароль |
loginOAuth
имя сайта/?option=com_wmartalpha&task=api.loginOAuth
Регистрация/авторизация в сторонних сервисах по протоколу OAuth. Результат данного запроса должен собран и отправлен от имени пользователя.
Запрос
| service | Тип сервиса | Поддерживаемые типы: fb, google, vk, instagram, mailru, ok, vk,yandex |
| redirectUrl | url переадресации после авторизации | string |
Результат
Ошибки
| service | wrong | Сервис не существует или не подключен к системе |
logout
имя сайта/?option=com_wmartalpha&task=api.logout
Завершение сессии пользователя
Регистрация
recover
имя сайта/?option=com_wmartalpha&task=api.recover
Восстановление пароля пользователя. Перед процедурой регистрации необходимо запросить код подтверждения методом api.recoverCheck
Запрос
| login | Логин(email или номер телефона в 11-значном формате) | string обязательный |
| password | пароль | string обязательный |
| passwordConfirm | подтверждение пароля | string обязательный |
| code | код подтверждения из email или sms | string обязательный |
Результат
Ошибки
| login | incorrect | Логин указан неверно |
| login | unregistered | Данный логин не зарегистрирован |
| password | incorrect | Пароль указан некорректно |
| passwordConfirm | incorrect | Подтверждение пароля указано некорректно |
| passwordConfirm | unmatch | Пароли не совпадают |
| code | wrong | Некорректный код подтверждения |
| code | outdated | Код подтверждения устарел, необходимо перезапросить |
recoverCheck
имя сайта/?option=com_wmartalpha&task=api.recoverCheck
Получение кода подтверждения для регистрации.
Запрос
| login | Логин(email или номер телефона в 11-значном формате) | string обязательный |
Результат
| delay | время, оставшееся до возможности запроса следующего кода подтверждения | float |
Ошибки
| login | incorrect | Логин указан неверно |
| login | unregistered | Данный логин не зарегистрирован |
| login | wait | Необходимо подождать, прежде чем запрашивать код подтверждения снова |
register
имя сайта/?option=com_wmartalpha&task=api.register
Регистрация пользователя. Перед процедурой регистрации необходимо запросить код регистрации методом api.registerCheck
Запрос
| login | Логин(email или номер телефона в 11-значном формате) | string обязательный |
| password | пароль | string обязательный |
| passwordConfirm | подтверждение пароля | string обязательный |
| firstname | имя пользователя | string обязательный |
| lastname | фамилия пользователя | string обязательный |
| agree | согласие на обработку персональных данных | bool обязательный |
| code | код подтверждения из email или sms | string обязательный |
Результат
Ошибки
| login | incorrect | Логин указан неверно |
| login | registered | Данный логин уже зарегистрирован |
| agree | incorrect | Необходимо подтвердить обработку персональных данных |
| password | incorrect | Пароль указан некорректно |
| passwordConfirm | incorrect | Подтверждение пароля указано некорректно |
| passwordConfirm | unmatch | Пароли не совпадают |
| firstname | incorrect | Имя указано некорректно |
| lastname | incorrect | Фамилия указана некорректно |
| code | wrong | Некорректный код подтверждения |
| code | outdated | Код подтверждения устарел, необходимо перезапросить |
registerCheck
имя сайта/?option=com_wmartalpha&task=api.registerCheck
Получение кода подтверждения для регистрации.
Запрос
| login | Логин(email или номер телефона в 11-значном формате) | string обязательный |
Результат
| delay | время, оставшееся до возможности запроса следующего кода подтверждения | float |
Ошибки
| login | incorrect | Логин указан неверно |
| login | registered | Данный логин уже зарегистрирован |
| login | wait | Необходимо подождать, прежде чем запрашивать код подтверждения снова |
Управление аккаунтом
passwordChange
имя сайта/?option=com_wmartalpha&task=api.passwordChange
Изменение пароля пользователя
Запрос
| password | старый пароль | string |
| passwordNew | новый пароль | string |
| passwordNewConfirm | подтверждение пароля | string |
Ошибки
| password | wrong | Указан неверный пароль |
| passwordNew | incorrect | Пароль указан некорректно |
| passwordNewConfirm | incorrect | Подтверждение пароля указано некорректно |
| passwordNewConfirm | unmatch | Пароли не совпадают |
| lastname | incorrect | Фамилия указана некорректно |
| code | wrong | Некорректный код подтверждения |
| code | outdated | Код подтверждения устарел, необходимо перезапросить |
profileChange
имя сайта/?option=com_wmartalpha&task=api.profileChange
Регистрация пользователя.
Запрос
| firstname | имя пользователя | string |
| lastname | фамилия пользователя | string |
| sex | пол, 1 - мужской, 2 - женский | int |
| subjects | тематика | [string,string, …] |
| description | Описание | ?string |
| orgINN | ИНН организации | ?string |
| country | Страна | ?string |
| region | Регион | ?string |
| locality | Населенный пункт | ?string |
Ошибки
| firstname | incorrect | Имя указано некорректно |
| lastname | incorrect | Фамилия указана некорректно |
| sex | incorrect | Пол указан некорректно |
| subjects | incorrect | Тематика указана некорректно |
| description | incorrect | Описание указано некорректно |
| orgINN | incorrect | ИНН организации указан некорректно |
| country | incorrect | Страна указана некорректно |
| region | incorrect | Регион указан некорректно |
| locality | incorrect | Населенный пункт указан некорректно |
Результат
Системные функции
reference
имя сайта/?option=com_wmartalpha&task=api.reference
Получить значения из справочника
Запрос
| reference | Алиас справочника (доступны: subjects,country,region,locality) | string |
| parentId | id родительского значения из связанного справочника (например: отношение населенных пунктов к региону) | ?int |
| start | Отступ выбираемых элементов | ?int |
| limit | Количество выбираемых элементов | ?int |
| search | Строка для поиска | ?string |
Результат
| values | Массив элементов справочника | [{id:int,value:string},{id:int,value:string}, …] |
| values.id | id элемента | int |
| values.value | значение элемента | string |
Ошибки
| reference | incorrect | Справочник не существует |
Пользователи
usersFilter
имя сайта/?option=com_wmartalpha&task=api.usersFilter
Получить свойства и значения для фильтрации
Запрос
Результат
| props | Cвойствa и значения | Массив объектов props |
Ошибки
| property | incorrect | Свойство не существует |
userinfo
имя сайта/?option=com_wmartalpha&task=api.userinfo
Получение информации о пользователе. Если id не указан, возвращается информация о текущем пользователе
Запрос
Результат
Ошибки
| user | incorrect | Пользователь не существует |
usersList
имя сайта/?option=com_wmartalpha&task=api.usersList
Получить свойства и значения для фильтрации
Запрос
Результат
| users | Выбранные пользователи | Массив объектов user |
Ошибки
| property | incorrect | Свойство не существует |
Описание объектов
OAuthRequest
Объект, описывающий OAuth запрос
| url | url запроса | string |
| method | Метод | string |
| params | Передаваемые переменные | {} |
{
url: string,
method: string,
params: {
param1: value1,
param2: value2,
...
}
}
props
Запрос свойств
| id | id свойства | int |
| title | Имя свойства | string |
| alias | Алиас свойства | string |
| ?count | Количество элементов с данным свойством | int |
| ?values | Массив значений свойства | [] |
| values.id | id значения свойства | string |
| values.alias | alias значения свойства | string |
| values.value | Массив значений свойства | string |
| values.?count | Количество элементов с данным значением свойства | int |
{
id: int,
title: string,
alias: string,
?values: [
{
id: int,
value: string,
alias: string,
?count: int,
},
...
]
}
filterQuery
Запрос свойств. Планируется, что структура объекта будет общая для всех фильтрующихся элементов.
Для свойства необходимо указать id либо алиас.
| ?id | id свойства | int |
| ?alias | Алиас свойства | string |
| ?count | Подсчет количества элементов по свойству | bool |
| ?format | формат значений. Доступно: list. Если не указан - значения свойства не возвращаются | string |
{
?id: int,
?alias: string,
?count: bool,
?format: string,
}
listQuery
Запрос выборки по элементам. Для свойства необходимо указать id или алиас.
| ?props | Массив выбранных свойств | string |
| props ?id | id свойства | string |
| props ?alias | Алиас свойства | string |
| props ?min | min значение для свойств типа число и дата | float/datetime |
| props ?max | max значение для свойств типа число и дата | float/datetime |
| props ?valueId | массив id значений | [] |
| props ?valueAlias | массив алиасов значений | [] |
| props ?search | Строка для поиска по свойству | string |
| ?search | Строка для поиска по основным свойствам | string |
| ?start | Отступ выбираемых элементов | bool |
| ?limit | Количество выбираемых элементов | bool |
| ?sort | Порядок сортировки | string |
| ?direction | Направление сортировки asc или desc | string |
{
?props: {
{
?id: int,
?alias: string,
?min: float/datetime,
?max: float/datetime,
?search: string,
?valueId: [int, ...],
?valueAlias: [string, ...],
},
...
}
?search: string,
?limit: int,
?start: int,
?sort: string,
?direction: string,
}
user
Информация о пользователе
| id | id пользователя | int |
| registered | пользователь зарегистрирован | bool |
| login | Проритетный логин | string |
| firstname | Имя | string |
| lastname | Фамилия | string |
| fullname | Полное имя | string |
| sex | Пол (1-мужской, 2 - женский) | int |
| description | Описание | string |
| subjects | Массив объектов свойства-справочника Тематика | [{referenceId: int,value: string}, …] |
| orgINN | ИНН организации | string |
| orgTitle | Название организации | string |
| country | Объект свойства-справочника страна | {referenceId: int,value: string} |
| region | Объект свойства-справочника регион | {referenceId: int,value: string} |
| locality | Объект свойства-справочника населенный пункт | {referenceId: int,value: string} |
| loginData | Массив данных авторизации пользователя | [] |
| loginData.type | тип логина | string |
| loginData.login | Массив данных авторизации пользователя | string |
{
id: int,
registered: bool,
?login: string,
?firstname: string,
?lastname: string,
?fullname: string,
?sex: int,
?description: string,
?subjects: [
{
referenceId: int,
value: string
},
...
],
?orgINN: string,
?orgTitle: string,
?country: {
referenceId: int,
value: string
},
?region: {
referenceId: int,
value: string
},
?locality: {
referenceId: int,
value: string
},
loginData: [
{
type: string,
login: string
},
...
],
}
Пример взаимодействия
function cookieGet(name) {
var matches = document.cookie.match(new RegExp(
"(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
));
return matches ? decodeURIComponent(matches[1]) : undefined;
};
function cookieSet(name, value, options) {
options = options || {};
var expires = options.expires;
if (!options.path)
options.path = '/';
if (typeof expires == "number" && expires) {
var d = new Date();
d.setTime(d.getTime() + expires * 1000);
expires = options.expires = d;
}
if (expires && expires.toUTCString) {
options.expires = expires.toUTCString();
}
value = encodeURIComponent(value);
var updatedCookie = name + "=" + value;
for (var propName in options) {
updatedCookie += "; " + propName;
var propValue = options[propName];
if (propValue !== true) {
updatedCookie += "=" + propValue;
}
}
document.cookie = updatedCookie;
return true;
}
function request(method,data,func){
data = JSON.stringify(data); //for Payload
let csrfToken=cookieGet('csrfToken');
let xhr = new XMLHttpRequest();
xhr.open('POST', 'https://fetch.melissa.team/?task=api.'+method);
xhr.setRequestHeader('csrf-token', csrfToken);
//xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); //for FormData
xhr.setRequestHeader('Content-type', 'application/json;charset=UTF-8'); //for Payload
xhr.responseType = 'json';
xhr.withCredentials = true;
xhr.onload = function() {
if (xhr.status != 200) {
console.error('connection error');
} else {
if(xhr.response.errors){
if(xhr.response.errors.core==='tooManyRequests'){
console.error('flood detect. wait ' + xhr.response.data.delay);
return false;
}
if(xhr.response.errors.core==='csrfError'){
console.error('wrong csrf token');
return false;
}
}
if(typeof(func)==='function'){
func(xhr.response);
}
if(xhr.response.csrfToken){
cookieSet('csrf_token', xhr.response.csrfToken);
}
}
};
xhr.send(data);
}
//Инициализация
request('init');
//Авторизация
request('login',{login:'a1@lct.su', password:'12345'},data=>{ console.log(data) });
//Получение информации о текущем пользователе
request('userinfo','',data=>{ console.log(data) });