Инструменты пользователя

Инструменты сайта


xhr_api

Это старая версия документа!


Описание взаимодействия через XHR

Выполнение запросов

  1. Запрос осуществляется может осуществляться как методом FormData (Content-type: application/x-www-form-urlencoded), так и Payload (Content-type: application/json)
  2. URL для обработки запросов имя сайта/?option=com_wmartalpha&task=api.methodName
  3. Первоначальное получение токена выполняется методом api.init
  4. CSRF-токен должен передаваться клиентом в заголовке csrf-token, либо в параметре csrfToken тела запроса. Пример
  5. Ответ возвращается в формате JSON

Общие структурные элементы

okФлаг успешности выполнения запросаint
errorsЗапись со списком ошибок запроса[]
  {
    ok: int,
    errors: [
      {
        error: string,
        type: string
      },
      ...
    ],
    ...
  }

Общие ошибки

corecsrfErrorCSRF токен не передан или передан неверный токен
coretooManyRequestsОбнаружен флуд запросами. Данный ip адрес временно заблокирован. Поле delay указывает время, оставшееся до конца блокировки
coreforbiddenДанная операция запрещена для данного пользователя

Инициализация

init

имя сайта/?option=com_wmartalpha&task=api.init

Инициализация сессии, получение токена

Результат

csrfTokencsrf токенstring

Авторизация

login

имя сайта/?option=com_wmartalpha&task=api.login

Авторизация пользователя

Запрос

loginЛогин(email или номер телефона в 11-значном формате)string обязательный
passwordПарольstring обязательный
rememberЗапомнить пользователяbool

Результат

userОсновные данные пользователяобъект User

Ошибки

loginincorrectФормат логина указан неверно
loginunregistredПользователь с таким логином не зарегистрирован
passwordwrongУказан неверный пароль

loginOAuth

имя сайта/?option=com_wmartalpha&task=api.loginOAuth

Регистрация/авторизация в сторонних сервисах по протоколу OAuth. Результат данного запроса должен собран и отправлен от имени пользователя.

Запрос

serviceТип сервисаПоддерживаемые типы: fb, google, vk, instagram, mailru, ok, vk,yandex
redirectUrlurl переадресации после авторизацииstring

Результат

OAuthrequestОбъект, описывающий запрособъект OAuthrequest

Ошибки

servicewrongСервис не существует или не подключен к системе

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 или smsstring обязательный

Результат

userОсновные данные пользователяобъект User

Ошибки

loginincorrectЛогин указан неверно
loginunregisteredДанный логин не зарегистрирован
passwordincorrectПароль указан некорректно
passwordConfirmincorrectПодтверждение пароля указано некорректно
passwordConfirmunmatchПароли не совпадают
codewrongНекорректный код подтверждения
codeoutdatedКод подтверждения устарел, необходимо перезапросить

recoverCheck

имя сайта/?option=com_wmartalpha&task=api.recoverCheck

Получение кода подтверждения для регистрации.

Запрос

loginЛогин(email или номер телефона в 11-значном формате)string обязательный

Результат

delayвремя, оставшееся до возможности запроса следующего кода подтвержденияfloat

Ошибки

loginincorrectЛогин указан неверно
loginunregisteredДанный логин не зарегистрирован
loginwaitНеобходимо подождать, прежде чем запрашивать код подтверждения снова

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 или smsstring обязательный

Результат

userОсновные данные пользователяобъект User

Ошибки

loginincorrectЛогин указан неверно
loginregisteredДанный логин уже зарегистрирован
agreeincorrectНеобходимо подтвердить обработку персональных данных
passwordincorrectПароль указан некорректно
passwordConfirmincorrectПодтверждение пароля указано некорректно
passwordConfirmunmatchПароли не совпадают
firstnameincorrectИмя указано некорректно
lastnameincorrectФамилия указана некорректно
codewrongНекорректный код подтверждения
codeoutdatedКод подтверждения устарел, необходимо перезапросить

registerCheck

имя сайта/?option=com_wmartalpha&task=api.registerCheck

Получение кода подтверждения для регистрации.

Запрос

loginЛогин(email или номер телефона в 11-значном формате)string обязательный

Результат

delayвремя, оставшееся до возможности запроса следующего кода подтвержденияfloat

Ошибки

loginincorrectЛогин указан неверно
loginregisteredДанный логин уже зарегистрирован
loginwaitНеобходимо подождать, прежде чем запрашивать код подтверждения снова

Управление аккаунтом

passwordChange

имя сайта/?option=com_wmartalpha&task=api.passwordChange

Изменение пароля пользователя

Запрос

passwordстарый парольstring
passwordNewновый парольstring
passwordNewConfirmподтверждение пароляstring

Ошибки

passwordwrongУказан неверный пароль
passwordNewincorrectПароль указан некорректно
passwordNewConfirmincorrectПодтверждение пароля указано некорректно
passwordNewConfirmunmatchПароли не совпадают
lastnameincorrectФамилия указана некорректно
codewrongНекорректный код подтверждения
codeoutdatedКод подтверждения устарел, необходимо перезапросить

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

Ошибки

firstnameincorrectИмя указано некорректно
lastnameincorrectФамилия указана некорректно
sexincorrectПол указан некорректно
subjectsincorrectТематика указана некорректно
descriptionincorrectОписание указано некорректно
orgINNincorrectИНН организации указан некорректно
countryincorrectСтрана указана некорректно
regionincorrectРегион указан некорректно
localityincorrectНаселенный пункт указан некорректно

Результат

userОсновные данные пользователяобъект User

userinfo

имя сайта/?option=com_wmartalpha&task=api.userinfo

Получение информации о текущем пользователе

Результат

userОсновные данные пользователяобъект User

Системные функции

reference

имя сайта/?option=com_wmartalpha&task=api.reference

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

Запрос

referenceАлиас справочника (доступны: subjects,country,region,locality)string
parent_idid родительского значения из связанного справочника (например: отношение населенных пунктов к региону)?int
startОтступ выбираемых элементов?int
limitКоличество выбираемых элементов?int
searchСтрока для поиска?string

Результат

valuesМассив элементов справочника[{id:int,value:string},{id:int,value:string}, …]
values.idid элементаint
values.valueзначение элементаstring

Ошибки

referenceincorrectСправочник не существует

Списки объектов

usersFilter

имя сайта/?option=com_wmartalpha&task=api.usersFilter

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

Запрос

propQueryЗапрос свойствМассив объектов propQuery

Результат

propsCвойствa и значенияМассив объектов props

Ошибки

propertyincorrectСвойство не существует

Описание объектов

propQuery

Запрос свойств. Планируется, что структура объекта будет общая для всех фильтрующихся элементов. Выборка может осуществляется как по id свойства, так и по алиасу.

?idid свойстваint
?aliasАлиас свойстваstring
?countПодсчет количества элементов по свойствуbool
?formatформат значений. Доступно: list. Если не указан - значения свойства не возвращаются string
{   
  ?id: int,
  ?alias: string,
  ?count: bool,
  ?format: string,
}

props

Запрос свойств

idid свойстваint
titleИмя свойстваstring
aliasАлиас свойстваstring
?countКоличество элементов с данным свойствомint
?valuesМассив значений свойства[]
values.idid значения свойстваstring
values.aliasalias значения свойстваstring
values.valueМассив значений свойстваstring
values.?countКоличество элементов с данным значением свойстваint
{   
  id: int,
  title: string,
  alias: string,
  ?values: [
    {
      id: int,
      value: string,
      alias: string,
      ?count: int,
    },
    ...
  ]
}

OAuthRequest

Объект, описывающий OAuth запрос

urlurl запросаstring
methodМетодstring
paramsПередаваемые переменные{}
  {
    url: string,
    method: string,
    params: {
      param1: value1,
      param2: value2,
      ...
    }
  }

user

Информация о пользователе

idid пользователяint
registeredпользователь зарегистрированbool
loginПроритетный логинstring
firstnameИмяstring
lastnameФамилияstring
fullnameПолное имяstring
sexПол (1-мужской, 2 - женский)int
descriptionОписаниеstring
subjectsТематика[string, string, …]
orgINNИНН организацииstring
orgTitleНазвание организацииstring
countryСтранаstring
regionРегионstring
localityНаселенный пункт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: [string, string, ...],
    ?orgINN: string,
    ?orgTitle: string,
    ?country: string,
    ?region: string,
    ?locality: 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) });
xhr_api.1615511898.txt.gz · Последние изменения: 2021/03/12 04:18 — a1