API интерфейс документ
Интерфейс вызова адреса: [baseUrl]/api/?do=[do]
, все запросы используют POST способ отправки, запрос данных нужно использовать RSA
открытый ключ шифрования.
Ответные данные (в формате JSON
) в случае авторизованного входа пользователя являются зашифрованными с помощью AES
; в случае отсутствия авторизации данные не шифруются.
db/token.sql
в базу данных;root/config/base.php
, добавить конфигурацию RSA
закрытого ключа:// RSA закрытый ключ (содержание или имя файла)
$config["rsaPrivateKey"] = '...';
Способ генерации RSA
открытого и закрытого ключей:
# Генерация закрытого ключа
openssl genrsa -out api.key 2048
# Извлечение открытого ключа из закрытого
openssl rsa -in api.key -out api.pub -pubout
include_once 'root/common/helper.php';
include_once 'root/include/misc/RSA.php';
include_once 'root/include/misc/AES.php';
// Адрес интерфейса
define('API_URL', 'http://localhost/bookmark/api/?do=[do]');
// Открытый ключ RSA
define('RSA_PUBLIC_KEY', '...');
/**
* Вызов интерфейса
*
* @param string $do Название операции
* @param array $params Параметры запроса
* @param string $appSecret Ключ AES
*
* @return array|null
*/
function apiCall($do, array $params, $appSecret = null)
{
// Шифрование данных
$rsa = new RSA();
$rsa->setPublicKey(RSA_PUBLIC_KEY);
$data = $rsa->encryptWithPublicKey(json_encode($params));
// Запрос POST
$url = str_replace('[do]', $do, API_URL);
$res = http($url, $data);
// Расшифровка данных
if (substr($res, 0, 1) != '{') {
$aes = new AES();
$res = $aes->decrypt($res, $appSecret);
}
// Ответные данные
return json_decode($res, true);
}
Запрос:
$do = 'User_Auth';
$params = array(
'app_id' => 1, // Идентификатор приложения
'app_secret' => '', // Закрытый ключ приложения (локально сгенерированный 32-битный случайный номер)
'oauth_type' => '', // Тип третьей стороны аккаунта (weibo, qq, baidu)
'oauth_token' => array(), // Информация о доступе после третьей стороны входа (массив)
);
Ответ:
array(
'status' => 1, // Статус (0: сбой; 1: успех)
'msg' => '', // Сообщение подсказки
'data' => array( // Данные
'user' => array( // Информация пользователя
'uid' => 1, // Идентификатор пользователя
'name' => '', // Псевдоним пользователя
'avatar' => '', // URL изображения профиля пользователя
),
'token' => '', // Идентификатор сессии (другие операции требуют предоставления этого параметра)
'expire_time' => 0, // Время истечения сессии
'create_time' => 0, // Время создания сессии
},
);
Запрос:
$do = 'Category_GetList';
$params = array(
'token' => '', // Идентификатор сессии
);
Ответ:
array(
'status' => 1, // Статус (0: сбой; 1: успех)
'msg' => '', // Сообщение подсказки
'data' => array( // Данные
array(
'id'=> 1, // Идентификатор категории
'name' => '', // Название категории
'sort' => 1, // Значение сортировки категории
'is_default' => 0, // Является ли категория по умолчанию (категории по умолчанию нельзя удалить)
'is_private' => 0, // Является ли это частной категорией
'ctime' => 0, // Время создания категории
),
...
},
);
Запрос:
$do = 'Category_Add';
$params = array(
'token' => '', // Идентификатор сессии
'name' => '', // Название категории
'is_private' => 0, // Является ли это частной категорией
);
Ответ:
array(
'status' => 1, // Статус (0: сбой; 1: успех)
'msg' => '', // Сообщение подсказки
'data' => 1, // Идентификатор категории
);
Запрос:
$do = 'Category_Edit';
$params = array(
'token' => '', // Идентификатор сессии
'id' => 1, // Идентификатор категории
'name' => '', // Название категории
'is_private' => 0, // Является ли это частной категорией
);
Ответ:
array(
'status' => 1, // Статус (0: сбой; 1: успех)
'msg' => '', // Сообщение подсказки
'data' => null,
);
Запрос:
$do = 'Category_Edit';
$params = array(
'token' => '', // Идентификатор сессии
'id' => 1, // Идентификатор категории
);
Ответ:
array(
'status' => 1, // Статус (0: сбой; 1: успех)
'msg' => '', // Сообщение подсказки
'data' => null,
);
Запрос:
$do = 'Category_Edit';
$params = array(
'token' => '', // Идентификатор сессии
'id1' => 1, // Идентификатор категории 1
'id2' => 2, // Идентификатор категории 2
);
Ответ:
array(
'status' => 1, // Статус (0: сбой; 1: успех)
'msg' => '', // Сообщение подсказки
'data' => null,
);
Запрос:
Текст запроса отсутствует. ```
array(
'status' => 1, // 状态(0:失败;1:成功)
'msg' => '', // 提示信息
'data' => array(
'list' => array( // 网址列表
array(
'id' => 1, // 网址ID
'title' => '', // 网址标题
'url' => '', // 网址URL
'ctime' => 0, // 网址添加时间
'cid' => 0, // 分类ID
),
...
),
'count' => 0, // 网址总量
'page' => 1, // 页码
'each' => 5, // 每页数量
),
);
Запрос:
$do = 'Link_Add';
$params = array(
'token' => '', // 会话ID
'cid' => 0, // 分类ID
'title' => '', // Веб-сайт название
'url' => '', // Веб-сайт URL
);
Ответ:
array(
'status' => 1, // 状态(0:失败;1:成功)
'msg' => '', // 提示信息
'data' => 1, // Веб-сайт ID
);
Запрос:
$do = 'Link_Edit';
$params = array(
'token' => '', // 会话ID
'id' => 1, // Веб-сайт ID
'cid' => 0, // 分类ID
'title' => '', // Веб-сайт название
'url' => '', // Веб-сайт URL
);
Ответ:
array(
'status' => 1, // 状态(0:失败;1:成功)
'msg' => '', // 提示信息
'data' => null,
);
Запрос:
$do = 'Link_Delete';
$params = array(
'token' => '', // 会话ID
'id' => 1, // Веб-сайт ID
);
Ответ:
array(
'status' => 1, // 状态(0:失败;1:成功)
'msg' => '', // 提示信息
'data' => null,
);
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )