# FunAdmin API 接口文檔
- 特別感謝 清靈之舞 QQ 349380886
## 一、多應用API數據配置
- 表名: <表前綴>_oatuh2_client

- 1、每個記錄對應一個api應用,關鍵字段appid、appsecret對應應用ID,應用密鑰,兩者用于后面簽名加密生成authentication使用。
- 2、目前api的設置暫未有入口,可自行在后臺編寫配置操作的界面。
## 二 access-token 獲取
- 1、生成authentication前需要獲取access-token,獲取access-token方法在Token控制器父類fun\auth\Token中的accessToken方法

在api的路由配置中已經寫好了token獲取的路由,請無視原注釋,訪問路徑 xxx.com/api/v1/token
```php
////生成access_token,post訪問Token類下的token方法
Route::post(':version/token','api/:version.token/accessToken');
Route::post(':version/token/refresh','api/:version.token/refresh');
```
- 2、access-token的獲取,對/api/v1/token進行post請求,需要提交的body為json對象,json參數如下:
```
? ·username:用戶名
? ·password:原始密碼
? ·nonce:隨機字符串
? ·timestamp:請求時間戳,與服務器收到請求的時間戳相差超過10秒視為無效時間戳,該時間在 vendor\funadmin\fun-addons\src\auth\Send.php中的$timeDif 定義,相關的過期時間都在這里定義了
? ·appid:對應的appid,如FunAdmin
? ·appsecret:對應appid的appsecret如123456
? ·sign:簽名
```
**sign生成算法:對以上除sign外的所有屬性+ key=appsecret 按key首字母進行升序排序后,對新數組進行http_build_query轉url參數形式的字符串 后進行urldecode編碼,最后再轉md5小寫即生成sign簽名,PHP代碼如下**
即
````
$params= [
"appid"=>"XXX"
“appsecret”=>'xxxxxx'
"key"=>"xxx" //等于appsecret
"nonce"=>"隨機字符串"
"timestamp"=>'時間戳'
]
sign = strtolower(md5(urldecode(http_build_query($params))));
````
后臺代碼如下
````
<?php
/**
* 生成簽名
* _字符開頭的變量不參與簽名
*/
public static function makeSign ($data = [],$app_secret = '')
{
unset($data['version']);
unset($data['sign']);
return self::buildSign($data,$app_secret);
}
/**
* 計算ORDER的MD5簽名
*/
private static function buildSign($params = [] , $app_secret = '') {
ksort($params);
$params['key'] = $app_secret;
return strtolower(md5(urldecode(http_build_query($params))));
}
```
- 3 .取請求成功后,將獲取的access-token和refresh_token,refresh_token用于刷新access-token,參數內包含用戶個人信息;
**需要注意的是,在vendor\funadmin\fun-addons\src\auth\Token.php的accessToken中默認查詢member數據庫,如果需要自定義查詢用戶登陸,比如管理員表登陸或者其他表的匹配登陸,可以直接修改源碼或者在api的控制器Token.php中,重寫父類的getMember自定義查詢,推薦后者,前者容易在更新依賴被覆蓋‘’**
## 三、authentication的生成
- 1、在進行api請求時,需要先生成authentication用于api請求,authentication鑒權的關鍵字可以自定義,在api應用下的config文件夾內定義authentication即可
```php
<?php
return [
'authentication'=>"authenticationValue"
];
```
? 在進行api請求時,header部分提交authenticationValue的值為:uid 鑒權加密字符串,即可,注意中間是空格,uid為登陸用戶id。
- 2 、生成authentication
將獲取的access-token ,使用以下格式
`appid:access-token:uid`
進行base64 生成密文,組成:`uid 密文`,用戶api請求 ;注意中間有個空格,uid 登陸用戶的id
通過上面的操作 即可以使用接口獲取你想要的數據了,
- 3、不需要鑒權的則在 控制器內 noAuth屬性 加入不需要鑒權的方法即可 //例如
~~~
$noAuth = [‘user’]
~~~
## 四、Api請求
對以上生成的鑒權密文,在頭部header設置authentication關鍵字的值為 `uid base64密文` 即可進行api請求,如沒有設置關鍵字,默認為authentication

- 介紹
- 系統架構
- 安裝
- 多語言
- 數據庫
- 控制器
- 開發示例
- 前端
- js 模板
- js cols字段解析
- 權限驗證
- table事件
- 常用組件
- input表單
- xmselect表單
- textarea表單
- upload表單
- editor表單
- select表單
- radio表單
- switch表單
- checkbox表單
- arrays表單
- icon表單
- date表單
- city表單
- region表單
- tags表單
- color表單
- submit按鈕
- close按鈕
- Api接口
- 插件基礎
- 目錄結構
- 插件市場
- 插件管理
- 插件開發
- 模塊
- 插件文件
- 插件配置
- 插件基礎信息
- 內置函數
- 插件數據庫
- 全局js 文件
- Curd命令行
- CURD命令
- Menu命令
- 表格規范
- CMS管理--待更新
- CMS目錄結構
- 內置標簽
- fun標簽
- 萬能標簽
- 分類標簽
- 導航標簽
- 廣告標簽
- tag標簽
- 友情鏈接
- 碎片標簽
- 常見問題