Skip to content
Bogdan edited this page Oct 7, 2017 · 4 revisions

Введение

API (Application Programming Interface) предоставляет удобный интерфейс для взаимодействия вашего приложения с L-Shop. Вы можете работать с L-Shop по средствам отправки http - запросов, следуя определенным правилам. Например, вы сможете авторизовывать пользователя, для того, чтобы ему не приходилось авторизовываться в магазине, если он уже вошёл в свой аккаунт на вашем ресурсе.

Основы

Для взаимодействия с API вам необходимо отправить HTTP - запрос (GET или POST, не важно) по определенному адресу. Каждый адрес соответствует опредленной функции, которая выполняется после успешной проверки подлинности данных. В зпросе необходимо передать какие-либо параметры, а также, контрольную сумму (hash) этих параметров.

Пример GET - запроса на авторизацию пользователя: http://example.ru/api/signin?username=d3lph1&hash=2080e2809b6ace6f6be9a1a22dba89aee2669ee1bb44e60476cfb9cf3d15c6a8

Здесь:

api - Эта часть url говорит о том, что запрос осуществяется к API, а не к другому компоненту магазина.
signin - Свидетельствует о том, что мы хоти авторизовать пользователя.
username - Имя пользователя.
hash - Контрольная сумма параметров запроса.

Что такое хэш и с чем его едят

Хэш (hash) или контрольная сумма - это строка фиксированной длины, полученная в результате выполнения определенного, необратимого алгоритма (алгоритмы бывают разные, md5 - один из них) над исходной строкой. Например, в результате хэширования строки test1234567890 алгоритмом sha256, мы получим вот такой хэш: 7afecb08fb6b7bab4bb45c755d857ae71d90ed2b37899f29b8bbc6ae758a5175. Мы получили что-то вроде сигнатуры, однозначно идентифицирующей исходную строку, при этом, вычислить саму исходную строку, зная хэш, крайне затруднительно или невозможно вовсе.
Контрольная сумма берется от строки, построенной из параметров запроса и секретного API - ключа, который хранится у вас на сайте, а также здесь, в магазине. Изменить его вы можете в разделе Администрирование > Управление > API. Там же имеется возможность выбрать алгоритм расчета контрольной суммы, а также, установить разделитель параметров.

Составляем запрос

И так, представьте, что пользователь уже вошел в свой аккаунтам на вашем сайте. И вам необходимо выдать пользователю ссылку на магазин, работающей на L-Shop, да так, чтобы этот пользователь, перейдя по ссылке, автоматически вошел в свой акаунт магазина и был готов совершать покупки. Давайте составим запрос для этого дела.
Начало ссылки для API авторизации выглядит так: http://example.ru/api/signin?
Далее, следует передать параметр username, начением которого является имя пользователя (логин), которого требуется авторизовать.
Теперь составим контрольнуя сумму нашего запроса, для этого, возьмем API - ключ, припишем к нему разделитель, и в конце концов, припишем к этому имя пользователя.
Например, если моим секреным ключем является строка kR6rrpgUO2Hn3*aI?1vHwvdKcVUFIB, разделителем - символ двоеточия (:), а имя пользователя - d3lph1, то в результате, мы получим вот такую строку: kR6rrpgUO2Hn3*aI?1vHwvdKcVUFIB:d3lph1. Возьмем хэш от этой строки тем алгоритмом, который вы указали в настройках API.
Например, если я использую алгоритм sha256, то результат будет таким: 22cc462bda02453b1bc7661a2045445756a9bffeb479d7668c3e03e7e4764da0.
Припишем этот хэш, значением параметра hash нашего запроса.
В конце концов, получаем вот такой url: http://example.ru/api/signin?username=d3lph1&hash=22cc462bda02453b1bc7661a2045445756a9bffeb479d7668c3e03e7e4764da0

Реализация

Конечно же, потребуется, так сказать, воплотить этот алгоритм в жизнь. Я написал для этого PHP - код, который составляет ссылку для авторизации пользователя.

/**
 * Разумеется, все эти данные вы будете вытаскивать из БД, конфига и тд.
 */
$key = 'kR6rrpgUO2Hn3*aI?1~vHwvd~KcVUFIB:d3lph1';   // Секретный ключ. Должен соответствовать секретному ключу в магазине.
$delimiter = ':';   // Разделитель параметров
$algo = 'sha256';   // Алгоритм расчета контрольной суммы
$url = 'http://example.ru/api/signin?';  // Адрес API-авторизации
$username = 'D3lph1';   // Имя пользователя, которого необходимо авторизовать
$str = sprintf('%s%s%s', $key, $delimiter, $username);
$hash = hash($algo, $str);
$paramsStr = http_build_query([
    'username' => $username,
    'hash' => $hash
]);
$link = $url . $paramsStr;   // Ссылка по переходу по которой, пользователь будет авторизован

Ответ

В качетсве ответа, сервер отдаст JSON строку. Распарсив JSON, получим массив. Он содержит 2 обязательных элемента: status - краткое описание результата запроса на английском и code - число, однозначно идентифицирующее результат запроса. Запрос на аутентификацию пользователя не отдает ответ, так как выполняется непосредственно самим пользователем. У разных запросов имеются разные вариации ответа, но некоторые из них схожи:

Status Code Описание
option disabled -1 Данная функция отключена или недоступна
invalid hash -2 Неверный хэш

Разбор другой функциональности

Регистрация пользователей

Для вашего удобства, я добавил возможность API-регистрации. Что это значит? Вы отправляете запрос к L-Shop'у, и в магазине создается пользователь с теми данными, которые вы передали в запросе. Делать это удобно, когда, пользователь регистрируется на вашем сайте. Таким образом, вы зарегистрируете его и в магазине тоже.

Url (без параметров)

http://example.ru/api/signup

Параметры

Запрос на регистрацию должен содержать следующие параметры: имя пользователя (username), адрес электронной почты (email), пароль (password), баланс (balance), нужно ли активировать пользователя мгновенно (force_activate) и, наконец, является ли он администратором (admin).
В итоге, получаем вот такую схему строки, от которой необходимо взять хэш (разделителями, в данном случае являются символы двоеточия (:)): key:username:email:password:balance:force_activate:admin.

Составление запроса

Предположим, что мы хотим зарегистрировать пользователя GeraltOfRivia с адресом электронной почты [email protected], паролем LambertLambert, выдать ему 100 рублей на счет и мгновенно активировать. В этом случае строка будет такой (Секретный ключ - kR6rrpgUO2Hn3aI?1vHwvdKcVUFIB*, разделитель - :): kR6rrpgUO2Hn3aI?1vHwvdKcVUFIB:GeraltOfRivia:[email protected]:LambertLambert: 100:1:0*. Так как значения таких параметром, как force_activate и admin являются логическими, то мы передаем в них либо ноль(0), либо - единицу(1). Если взять хэш от этой строки алгоритмом sha256, то получим нечто следующее: 592c19f8b889e33b9693f14957b341502728e5d3d281a53c3f032e93449bd154.

Таким образом, составим запрос

http://example.ru/api/signup?username=GeraltOfRivia&[email protected]&password=LambertLambert&balance=100&force_activate=1&admin=0&hash=592c19f8b889e33b9693f14957b341502728e5d3d281a53c3f032e93449bd154

Ответ

Status Code Описание
username already exists 1 Пользователь с таким логином уже существует
email already exists 2 Пользователь с таким адресом электронной почты уже существует
unable to create user 3 Не удалось создать пользователя по техническим причинам
success 0 Пользователь успешно зарегистрирован

↑ Понравился магазин? Вырази благодарность разработчикам "звездочкой" ★.

Clone this wiki locally