3.8.1
101
public/wiki/2x-account.md
Normal file
@@ -0,0 +1,101 @@
|
||||
# 账号体系
|
||||
|
||||
PhalApi Pro 提供了全面的账号体系,以满足企业、开发者和最终顾客不同层级的账号需求。
|
||||
|
||||
## 账号层级
|
||||
|
||||
账号层级,主要分为三大类,权限从高到低,分别是:
|
||||
|
||||
+ **管理员**:内部管理员,默认分为普通管理员、超级管理员(最高权限),可以扩展更多管理员等级。
|
||||
+ **开发者**:内部或外部开发者,例如个人开发者、企业开发者、合作伙伴、供应商、分销等,可以扩展更多开发者等级。
|
||||
+ **顾客**:最终的顾客,例如普通会员、高级会员、VIP会员、终身会员等。
|
||||
|
||||

|
||||
|
||||
|
||||
## 账号体系汇总
|
||||
|
||||
下面表格,系统罗列了不同账号的区别、权限以及使用的产品。
|
||||
|
||||
账号分类|账号等级(0~255)|权限|默认账号类型|使用产品|API接口|备注
|
||||
---|---|---|---|---|---|---
|
||||
管理员|200~255|高|200表示普通管理员,255表示超级管理员,201~254之间可自定义|Admin管理后台|可以使用```Admin.*.*```和```Platform.*.*```系列接口|适合内部人员使用
|
||||
开发者|100~199|中|100表示个人开发者,101表示企业开发者,102~199之间可自定义|Platform开放平台|可以使用```Platform.*.*```系列接口|适合内部或外部开发者使用
|
||||
顾客|0~99|低|0表示普通会员,1~99间可自定义|由开发者开发的应用|可以使用```App.*.*```系列开放接口|最终的顾客人群
|
||||
|
||||
|
||||
默认情况下,权限从高到低,已提供以下账号类型:
|
||||
+ **管理员**:超级管理员(255)
|
||||
+ **管理员**:普通管理员(200)
|
||||
+ **开发者**:企业开发者(101)
|
||||
+ **开发者**:个人开发者(100)
|
||||
+ **顾客**:普通会员(0)
|
||||
|
||||
括号的数字表示账号等级,范围是0~255,权限越高等级越大,不可重复。
|
||||
|
||||
## 管理员
|
||||
|
||||
管理员,是企业内部的管理员,是开放平台管理员,默认分为普通管理员、超级管理员(最高权限),可以扩展更多管理员等级。
|
||||
可以为内部的技术研发团队、信息部或职能部门创建管理员账号。
|
||||
|
||||
### 如何创建超级管理员账号?
|
||||
在首次安装时会创建超级管理员账号。
|
||||

|
||||
|
||||
安装并登录管理后台,只有超级管理员账号才可以创建超级管理员账号,超级管理员拥有最高的操作权限。
|
||||
|
||||
### 如何创建普通管理员账号?
|
||||
普通管理员,权限比超级管理员低,只有管理员的账号才能登录Admin管理后台。
|
||||
|
||||
登录管理后台,可以创建普通管理员账号。
|
||||
|
||||
### 如何创建其他管理员等级及账号?
|
||||
|
||||
PhalApi Pro默认提供了普通管理员和超级管理员,如果需要添加其他更多管理员等级,可以修改```./config/app.php```配置文件的member_level_map配置,添加更多管理员等级。
|
||||
|
||||
例如,添加一个新的等级,主管,等级为201。
|
||||
```php
|
||||
// 0,100,101,200,201为系统自带等级,不宜更改。可扩展追加
|
||||
'member_level_map' => array(
|
||||
// 200~255区间表示内部管理员
|
||||
200 => array(
|
||||
'name' => '普通管理员',
|
||||
'is_register' => false, // 是否允许注册
|
||||
),
|
||||
|
||||
// 例如:添加一个新的等级
|
||||
201 => array(
|
||||
'name' => '主管',
|
||||
'is_register' => false, // 是否允许注册
|
||||
),
|
||||
|
||||
255 => array(
|
||||
'name' => '超级管理员',
|
||||
'is_register' => false, // 是否允许注册
|
||||
),
|
||||
),
|
||||
```
|
||||
|
||||
随后,进入管理后台创建账号,然后选择新的等级即可。
|
||||
|
||||
## 开发者
|
||||
|
||||
开发者,可以是内部或外部开发者,默认提供了:个人开发者、企业开发者两个等级,可以根据需要配置合作伙伴、供应商、分销等更多开发者等级。
|
||||
|
||||
### 如何注册开发者账号?
|
||||
通过开放平台,可以进行开发者账号的注册。
|
||||
|
||||
### 如何添加开发者账号?
|
||||
通过管理后台,可以在后台添加开发者账号。
|
||||
|
||||
## 顾客
|
||||
顾客,是指最终的顾客,例如电商行业的消费者、交通行业的乘客、旅游行业的游客、教育行业的学员等,可以根据业务需要分为普通会员、高级会员、VIP会员、终身会员等。默认提供了普通会员,可自行扩展。如果不需要新的会员体系,或企业系统原来已经有顾客账号体系,可忽略此部分。
|
||||
|
||||
### 如何注册会员账号?
|
||||
通过开发者应用,或者内部提供的产品、客户端,调用API接口进行注册。
|
||||
|
||||
### 如何添加会员账号?
|
||||
也可以通过管理后台,在后台添加会员账号。
|
||||
|
||||
|
||||
|
||||
211
public/wiki/2x-api-authorization.md
Normal file
@@ -0,0 +1,211 @@
|
||||
# 4.0 第三方登录接入流程
|
||||
以下已做好的微信登录为例
|
||||
## 第一步,配置微信第三方登录
|
||||
修改 根目录的config/app.php文件,找到authorization_app填写需要接入的第三方登录:
|
||||
```php
|
||||
//第三方登录总开关
|
||||
'authorization_app'=>array(
|
||||
//自己编写获取第三方登录链接对应的方法
|
||||
'weChat'=>[
|
||||
'icon' => '/images/login_wechat.png', // 第三方应用的图标
|
||||
'app_callback_url'=>'\Base\Domain\Authorization', //自己编写获取第三方微信登录链接的类---包含命名空间
|
||||
'desc'=>'微信', //第三方应用的描述
|
||||
'sort_id'=>1, //排序字段
|
||||
'type'=>1, //用于解绑的
|
||||
'can_unbind'=>1, //可以解绑的
|
||||
'authorization_type'=>1,
|
||||
|
||||
'can_bing'=>1, //可以在个人中心进行绑定
|
||||
'can_bing_url_class'=>'\Base\Domain\Authorization',//自己编写获取第三方登录绑定链接的类--包含命名空间
|
||||
'can_bing_url_fun'=>'weChat', //自己编写获取第三方登录绑定链接的类对应的方法
|
||||
|
||||
//以下根据自己申请得到的资料进行填写
|
||||
'appid'=>'wx9b33877e791de406', //appid
|
||||
'secret'=>'04b99c4526076e6d8ffbc6a5e6619bd2', //密钥
|
||||
'login_redirect_uri'=>'http://www.yesdev.cn/server_callback/wechat_login.php', //登录回调地址配置
|
||||
],
|
||||
),
|
||||
```
|
||||
### 下面是详细配置步骤:
|
||||
一般第三方登录都涉及了几个配置:
|
||||
注:每个配置合起来是上面的配置,为清晰,把每个配置单独分开,便于理解
|
||||
|
||||
#### 1、配置生成用于第三方登录的url的类和方法:
|
||||
```php
|
||||
//key是自己编写用于获取第三方登录链接对应的方法
|
||||
'weChat'=>[
|
||||
'app_callback_url'=>'\Base\Domain\Authorization', //自己编写获取第三方登录链接的类---包含命名空间
|
||||
),
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
#### 2、填写配置申请到第三方登录得到的资料:
|
||||
```php
|
||||
//key是自己编写用于获取第三方登录链接对应的方法
|
||||
'weChat'=>[
|
||||
//以下根据自己申请得到的资料进行填写
|
||||
'icon' => '/images/login_wechat.png', // 第三方应用的图标
|
||||
'desc'=>'微信', //第三方应用的描述
|
||||
'appid'=>'', //appid
|
||||
'secret'=>'', //密钥
|
||||
'login_redirect_uri'=>'http://*****',
|
||||
),
|
||||
```
|
||||
|
||||
#### 3、填写用于个人中心进行绑定所生成的url的类和方法:
|
||||
```php
|
||||
//key是自己编写用于获取第三方登录链接对应的方法
|
||||
'weChat'=>[
|
||||
'can_bing'=>1, //可以在个人中心进行绑定
|
||||
'can_bing_url_class'=>'\Base\Domain\Authorization',//自己编写获取第三方登录绑定链接的类--包含命名空间
|
||||
'can_bing_url_fun'=>'weChat', //自己编写获取第三方登录绑定链接的类对应的方法
|
||||
),
|
||||
```
|
||||
|
||||
#### 4、其它配置:
|
||||
```php
|
||||
//key是自己编写用于获取第三方登录链接对应的方法
|
||||
'weChat'=>[
|
||||
'type'=>1, //用于解绑的,值跟下面的authorization_type值一样
|
||||
'authorization_type'=>1,//对应于pp_authorization表中的authorization_type类型
|
||||
),
|
||||
```
|
||||
|
||||
## 第二步,根据配置新建或者编写对应的文件类和方法
|
||||
|
||||
### 1、根据配置编写用于第三方登录的url的类和方法:
|
||||
如:配置编写了
|
||||
```php
|
||||
//key是自己编写用于获取第三方登录链接对应的方法
|
||||
'weChat'=>[
|
||||
'app_callback_url'=>'\Base\Domain\Authorization', //自己编写获取第三方登录链接的类---包含命名空间
|
||||
),
|
||||
|
||||
```
|
||||
|
||||
那么需要在路径/Base/Domain/下新建Authorization.php文件及编写weChat方法:
|
||||
|
||||

|
||||
|
||||
|
||||
### 2、根据配置编写用于个人中心进行绑定所生成的url的类和方法:
|
||||
|
||||
如:配置编写了
|
||||
```php
|
||||
'weChat'=>[
|
||||
'can_bing'=>1, //可以在个人中心进行绑定
|
||||
'can_bing_url_class'=>'\Base\Domain\Authorization',//自己编写获取第三方登录绑定链接的类--包含命名空间
|
||||
'can_bing_url_fun'=>'weChat', //自己编写获取第三方登录绑定链接的类对应的方法
|
||||
),
|
||||
```
|
||||
|
||||
那么需要在路径Base/Domain/下新建Authorization.php文件及编写weChat方法:
|
||||

|
||||
|
||||
### 3、根据配置编写用于回调地址及业务逻辑
|
||||
|
||||
如:配置编写了
|
||||
|
||||
```php
|
||||
//key是自己编写用于获取第三方登录链接对应的方法
|
||||
'weChat'=>[
|
||||
'login_redirect_uri'=>'http://www.xxx.cn/server_callback/wechat_login.php', //登录回调地址配置
|
||||
),
|
||||
```
|
||||
那么需新建/public/server_callback/wechat_login.php 进行回调业务逻辑编写
|
||||

|
||||
|
||||
|
||||
### 第四步,编写具体业务逻辑前,先进行第三方登录数据库分析
|
||||
|
||||
以下是涉及第三方登录的三张表数据结构:
|
||||
|
||||
```sql
|
||||
CREATE TABLE `pp_authorization` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`openid` varchar(10000) NOT NULL DEFAULT '0' COMMENT '第三方平台对应用户的唯一id',
|
||||
`unionid` varchar(1000) NOT NULL DEFAULT '0' COMMENT '微信开放平台对应的unionidid',
|
||||
`authorization_type` int(11) NOT NULL DEFAULT '0' COMMENT '第三登录类型:0无 1微信 2微信小程序 3qq 4是短信 5程序员客栈 等等',
|
||||
`member_id` int(11) NOT NULL DEFAULT '0' COMMENT '版本的用户id',
|
||||
`add_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=357 DEFAULT CHARSET=utf8mb4 COMMENT='第三方授权表';
|
||||
|
||||
CREATE TABLE `pp_authorization_details` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`nickname` varchar(255) NOT NULL DEFAULT '' COMMENT '昵称',
|
||||
`sex` tinyint(2) unsigned NOT NULL DEFAULT '0' COMMENT '性别:1未知 2男 3女',
|
||||
`headimgurl` varchar(10000) NOT NULL DEFAULT '' COMMENT '用户头像url',
|
||||
`province` varchar(255) NOT NULL DEFAULT '' COMMENT '省',
|
||||
`city` varchar(255) NOT NULL DEFAULT '' COMMENT '城市',
|
||||
`country` varchar(255) NOT NULL DEFAULT '' COMMENT '国家',
|
||||
`privilege` varchar(1000) NOT NULL DEFAULT '' COMMENT '用户特权信息',
|
||||
`add_time` datetime DEFAULT NULL,
|
||||
`authorization_id` int(11) NOT NULL DEFAULT '0' COMMENT '关联第三方表',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=355 DEFAULT CHARSET=utf8mb4 COMMENT='授权详情表';
|
||||
|
||||
CREATE TABLE `pp_member` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`username` varchar(50) NOT NULL COMMENT '账号',
|
||||
`salt` varchar(64) NOT NULL COMMENT '盐值',
|
||||
`password` varchar(64) DEFAULT NULL COMMENT '密码',
|
||||
`register_time` datetime DEFAULT NULL COMMENT '注册时间',
|
||||
`avatar` varchar(500) DEFAULT '' COMMENT '头像',
|
||||
`nickname` varchar(100) DEFAULT '' COMMENT '昵称',
|
||||
`email` varchar(100) DEFAULT '' COMMENT '邮箱',
|
||||
`sex` varchar(10) DEFAULT '' COMMENT '性别,0未知1男2女',
|
||||
`mobile` varchar(20) DEFAULT '' COMMENT '手机号',
|
||||
`ip` varchar(30) DEFAULT '' COMMENT '注册IP',
|
||||
`uuid` varchar(64) DEFAULT '' COMMENT 'UUID,全局唯一ID',
|
||||
`member_level` smallint(4) NOT NULL DEFAULT '0' COMMENT '用户等级(0~99区间表示用户,100~199区间表示开发者, 200~255区间表示内部管理员)',
|
||||
`member_status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '用户状态(0表示禁止,1表示正常)',
|
||||
`wx_openid` text COMMENT '微信openid ',
|
||||
`wx_type` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '0微信公众号 1是微信小程序',
|
||||
`balance` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '余额',
|
||||
`from_channel` varchar(100) NOT NULL DEFAULT '' COMMENT '来源',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `username` (`username`) USING BTREE
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=50 DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
|
||||
|
||||
|
||||
```
|
||||
第三方登录主要业务逻辑是:
|
||||
首次进行登录把第三方信息写入pp_authorization表和pp_authorization_details表
|
||||
|
||||
个人绑定主要是pp_authorization表中的字段member_id对应pp_member的id
|
||||
|
||||
## 第三步,本框架的第三方登录业务编写规范
|
||||
如有更成熟的编写规范可以自行编写,可以不往下看,只要配置正确就可以。
|
||||
|
||||
下面提供本框架的接入的三方登录规范
|
||||
|
||||
### 1、本框架第三方登录核心目录结构介绍
|
||||
|
||||
核心目录结构路径在/src/base路径下的Authorization目录和lib目录
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
### 2、WeChat.php 代码分析
|
||||

|
||||
|
||||
|
||||
### 3、WeChatBusiness.php 代码分析
|
||||

|
||||
|
||||
### 4、WeChatBusiness.php 代码分析
|
||||
主要是准备数据,如何首次登录写入
|
||||

|
||||
|
||||
### 4、AuthorizationLogin.php 代码分析
|
||||
主要是进行成员注册或绑定登逻辑
|
||||

|
||||
|
||||
### 5、借鉴并进行开发
|
||||
到这里就可以借鉴想应的写法进行开发了
|
||||
|
||||
|
||||
65
public/wiki/2x-api-docs.md
Normal file
@@ -0,0 +1,65 @@
|
||||
# 在线接口文档
|
||||
|
||||
## 访问接口文档
|
||||
|
||||
部署和安装好PhalApi专业版后,便可以通过浏览器访问:```http://你的域名/docs.php```,查看在线接口文档。
|
||||
|
||||
例如:http://open.phalapi.net/docs.php
|
||||
|
||||
看到的在线接口文档效果类似如下:
|
||||
|
||||

|
||||
|
||||
|
||||
## 如何编写接口文档
|
||||
|
||||
请参考[接口文档 - PhalApi 2.x 开发文档](http://docs.phalapi.net/#/v2.0/api-docs)。
|
||||
|
||||
## 如何查看全部接口
|
||||
默认情况下隐藏了内部接口(Platform开放平台接口、Admin管理后台接口和Task计划任务接口),登录管理后台后,方可查看全部接口。避免被外部开发者看到敏感的接口。
|
||||
|
||||
非管理员只能看到App开放接口。
|
||||

|
||||
|
||||
管理员登录后可查看全部接口。
|
||||

|
||||
|
||||
但无论是否为管理员登录,都可以通过完整的在线接口文档详情页链接直接访问相应的接口文档。
|
||||
|
||||
## 如何设置文档查看密码
|
||||
|
||||
默认情况下,查看在线接口文档不需要输入密码。若为了保护接口文档不被外界访问,可以设置文档查看密码。
|
||||
|
||||
打开```./config/app.php```配置文件,找到```doc_view_code```,然后把此配置修改为所需要的查看密码,例如:123456。
|
||||
```php
|
||||
// 查看文档的密码,为空时不需要密码
|
||||
'doc_view_code' => '123456',
|
||||
```
|
||||
|
||||
重新打开接口文档,会提示输入查看密码。
|
||||
|
||||
例如:
|
||||

|
||||
|
||||
如果输入的密码错误,将会提示相应的错误。
|
||||

|
||||
|
||||
如果查看密码正确,将直接进入相应的接口文档页面。
|
||||
|
||||
|
||||
## 如何生成离线接口文档
|
||||
|
||||
在根目录,执行以下脚本命令,可生成离线接口文档。
|
||||
|
||||
```
|
||||
$ php ./public/docs.php
|
||||
|
||||
脚本执行完毕!离线文档保存路径为:
|
||||
/path/to/phalapi-pro/public/docs
|
||||
```
|
||||
|
||||
生成离线文档后,可以在目录里看到类似以下的HTML文档:
|
||||

|
||||
|
||||
用浏览器打开public/docs/index.html首页,便可查看离线版的接口文档。
|
||||
|
||||
119
public/wiki/2x-api-new-namespace.md
Normal file
@@ -0,0 +1,119 @@
|
||||
# 3.9 新增接口目录教程
|
||||
|
||||
添加一个新的接口目录,可以先参考[如何增加一个顶级命名空间?](http://docs.phalapi.net/#/v2.0/autoload?id=%e5%a6%82%e4%bd%95%e5%a2%9e%e5%8a%a0%e4%b8%80%e4%b8%aa%e9%a1%b6%e7%ba%a7%e5%91%bd%e5%90%8d%e7%a9%ba%e9%97%b4%ef%bc%9f)。
|
||||
|
||||
下面以添加Teacher接口命名空间为例(对应teacher目录)进行讲解,其他目录名称相应改成自己的即可。
|
||||
|
||||
## 第1步,更新composer
|
||||
修改 根目录的composer.json 文件,找到autoload里的psr-4,在前面添加一行:
|
||||
```
|
||||
"Teacher\\": "src/teacher",
|
||||
```
|
||||
前面是接口命名空间名称,后面是对应的文件目录,注意大小写。
|
||||
|
||||
添加后完整的部分是:
|
||||
```
|
||||
"autoload" : {
|
||||
"files" : [
|
||||
"src/app/functions.php"
|
||||
],
|
||||
"psr-4" : {
|
||||
"Teacher\\": "src/teacher",
|
||||
"App\\" : "src/app",
|
||||
"Platform\\" : "src/platform",
|
||||
"Task\\": "src/task",
|
||||
"Base\\": "src/base",
|
||||
"Mall\\": "src/mall",
|
||||
"Admin\\" : "src/admin"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
然后更新命名空间的映射关系,执行命令:
|
||||
```
|
||||
composer dumpautoload
|
||||
```
|
||||
|
||||
## 第2步,添加接口目录
|
||||
|
||||
根据上面的配置,以及PhalApi的规范,接口目录放置在src目录里,这里需要添加的接口目录是:```src/teacher```。
|
||||
|
||||

|
||||
|
||||
随后,可以继续添加 ```src/teacher/Api```目录,放置你的接口PHP代码文件。
|
||||
|
||||
## 第3步,添加接口访问入口文件
|
||||
|
||||
在接口大师,每个接口目录,即每个接口命名空间,都需要提供独立、配套、对应的外部访问入口。
|
||||
|
||||
针对这里的Teacher,把原来的开发平台的入口文件 ./public/api/platform.php 复制一份给 ./public/api/teacher.php ,修改里面的filter过滤器进行重新注册。
|
||||
|
||||
```php
|
||||
// 切换你的过滤器
|
||||
// $di->filter = new \Platform\Common\Filter();
|
||||
$di->filter = new \Teacher\Common\Filter();
|
||||
```
|
||||
|
||||
## 第4步,实现你的过滤器
|
||||
|
||||
添加```src/teacher/Common```目录,并新建```src/teacher/Common/Filter.php```文件,放置以下代码,并根据自己的需要调整逻辑。
|
||||
|
||||
```php
|
||||
<?php
|
||||
namespace Teacher\Common;
|
||||
|
||||
use Base\Common\Filter as BaseFilter;
|
||||
use PhalApi\Exception\BadRequestException;
|
||||
|
||||
class Filter extends BaseFilter {
|
||||
|
||||
public function check() {
|
||||
parent::check();
|
||||
|
||||
// 实现你自己的检测逻辑
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 第5步,修改接口文档的路径
|
||||
|
||||
打开修改 ```./src/view/docs/api_desc_tpl.php```接口详情模板文件,添加接口命名空间和访问路径的映射。
|
||||
|
||||
```php
|
||||
$uriMap = array(
|
||||
'Teacher' => '/api/teacher.php', // 添加新映射
|
||||
'Admin' => '/api/admin.php',
|
||||
'App' => '/api/app.php',
|
||||
'Platform' => '/api/platform.php',
|
||||
'Task' => '/api/task.php',
|
||||
);
|
||||
```
|
||||
|
||||
就可以解决访问路径不对的问题,例如:
|
||||

|
||||
|
||||
此外,还可以修改 ./language/zh_cn/common.php 翻译文件,最后添加一行(注意双斜杠):
|
||||
```php
|
||||
'Teacher\\' => '教师平台',
|
||||
```
|
||||
|
||||
解决接口列表页的名称显示问题。例如:
|
||||

|
||||
|
||||
## 第6步,接口列表文档的显示控制
|
||||
|
||||
例如,有些新加的接口目录,只是内部使用的,那么可以隐藏接口列表的入口。
|
||||
|
||||
如果想控制新接口目录在接口列表的显示,可以修改 ```./public/docs.php ```文件,找到以下代码,并在最后添加自己的接口命名空间,就可以隐藏。
|
||||
|
||||
```
|
||||
// 对外排除的命名空间,如果需要增加项目,需要在此追加
|
||||
$globalExcludeNamespaces = array('Task', 'Platform', 'Admin', 'Teacher'); // 在最后追加
|
||||
```
|
||||
|
||||
## 第7步,开始使用新目录
|
||||
|
||||
到这里,就可以在新目录添加和开发自己的接口。
|
||||
|
||||
剩下的事情,接口大师会自动帮你完成,包括接口的权限以及分配等。
|
||||
|
||||
57
public/wiki/2x-api-righst.md
Normal file
@@ -0,0 +1,57 @@
|
||||
# 开放接口权限
|
||||
|
||||
针对提供给开发者的开放接口API,PhalApi Pro设计了一套完善的权限控制体系,可在不同维度进行灵活的权限控制。
|
||||
|
||||
## 接口权限规则
|
||||
|
||||
从开发者账号类型为起点,开发者账号类型分为个人开发者、企业开发者等多种开发者类型;每种开发者账号类型下可注册多个开发者;而每个开发者可以创建多个应用;每个应用可以调用多个开放接口API。因此,整体的结构如下:
|
||||
|
||||

|
||||
|
||||
## 授权项目
|
||||
|
||||
授权项目,主要是针对开放接口,对应```App.*.*```系列接口,如果需要管理其他系列的接口,可以手动添加。
|
||||
|
||||

|
||||
|
||||
位于App命名空间下的接口,会自动纳入接口权限管理,因此推荐在App下扩展添加新的开放接口。
|
||||
|
||||
## 授权对象
|
||||
|
||||
> 温馨提示:管理员账号下的全部应用,拥有全部接口权限。接口权限,主要针对开发者进行权限分配。
|
||||
|
||||
### 开发者应用维度
|
||||
授权对象主要是针对开发者的客户端应用,因为使用开放接口的主要对象是程序。每个开发者应用都有一个唯一的app_key,因此通过对app_key维度可进行接口权限的控制。
|
||||
|
||||
### 开发者账号维度
|
||||
每个开发者应用最多可属于一位开发者,因此也可以通过开发者账号进行接口权限控制。
|
||||
|
||||
### 账号类型维度
|
||||
最后,可以对开发者的账号类型统一进行角色权限。
|
||||
|
||||
因此,接口权限的授权对象可以分为:开发者应用、开发者账号和账号类型三个维度。
|
||||
|
||||
## 授权优先级
|
||||
|
||||
根据前面的维度,对于接口权限的优先级,最高到低,依次是:
|
||||
|
||||
> 开发者应用接口权限 -> 开发者账号接口权限 -> 账号类型接口权限 -> 默认开放接口权限
|
||||
|
||||
+ 最高:开发者应用接口权限,通过app_key匹配规则库
|
||||
+ 开发者账号接口权限,通过账号ID匹配规则库
|
||||
+ 账号类型接口权限,通过账号等级匹配规则库
|
||||
+ 最低:默认开放接口权限,通过```default_app_api_rigths_is_allow```配置项指定
|
||||
|
||||
按优先级从高到低,依次寻找权限规则,命中即生效,进行短路判断。
|
||||
|
||||
> 再次温馨提示:管理员账号下的全部应用,拥有全部接口权限。接口权限,主要针对开发者进行权限分配。所以,管理员所创建的应用,只适合内部使用。
|
||||
|
||||
## 接口权限规则配置
|
||||
|
||||
进入管理后台,可进行各个维度的接口权限配置。
|
||||
|
||||
## 如何取消接口权限判断?
|
||||
|
||||
如果需要取消全部接口的权限判断,可以修改```default_app_api_rigths_is_allow```配置为true,但不推荐。
|
||||
|
||||
如果需要取消某个接口的权限判断,可以在PHP代码中配置白名单,此部分将会在技术文档进行说明。查看[接口白名单配置文档](http://docs.phalapi.net/#/v2.0/filter?id=%e7%99%bd%e5%90%8d%e5%8d%95%e9%85%8d%e7%bd%ae)。
|
||||
175
public/wiki/2x-api-sign.md
Normal file
@@ -0,0 +1,175 @@
|
||||
# 第二套接口验签方案
|
||||
|
||||
以下是第二套接口签名算法的介绍,如果项目不适合使用第一套access_token的验证方式,或者有其他需要可选择第二套接口验签方案。
|
||||
|
||||
## 动态签名方案介绍
|
||||
|
||||
access_token的验证方式,是客户端先凭借明文的app_key和app_secret密钥,申请获得access_token的验证方式,然后就可以使用分配的access_token令牌调用其他接口。
|
||||
|
||||
其缺点在于第一次授权时容易泄露app_key和app_secret密钥,并且access_token泄露后容易被第三方使用。此方案不适合客户端使用,因此容易造成被抓包。但好处在于,调用方只需要申请一次令牌,就可以方便调用其他接口。
|
||||
|
||||
而动态签名方案,则是每一次调用接口,都要根据既定的加密方案进行签名的验证。一旦任何一个参数发生变化,那么就需要重新生成接口签名。这意味着,客户端在服务端进行接口通信时安全性相对更高。缺点是:客户端每次都要按算法生成签名,提高了API接入成本,同时相同的接口链接参数是一样的,可以对相同的接口链接重复调用。此时可以在服务端进行业务层的限制,例如每个用户每天只能投5票,或者追加当前时间戳的误差核对。
|
||||
|
||||
小结一下,动态签名方案特点:
|
||||
+ 每次都要根据参数生成动态签名
|
||||
+ 不需要对外暴露app_secret密钥
|
||||
|
||||
## 如何开启第二套接口验签方案
|
||||
|
||||
注意,PhalApi Pro 专业版,默认提供的是access_token令牌验签方案。这套方案已经被Platform开放平台和Admin管理后台使用,因此默认的第一套接口验签方案不能被关掉。
|
||||
|
||||
> 注意:需要保留第一套access_token令牌验签方案。
|
||||
|
||||
在保留原来默认第一套接口验签方案的同时,你可以开启第二套接口验签方案。并且,第二套接口验签方案,仅适合用于对外提供的开放接口,包括App命名空间下的全部接口,以及自定义添加的新的接口命名空间,但不包括Admin、Platform。
|
||||
|
||||
下面将来介绍如何开启第二套接口验签方案。
|
||||
|
||||
## 第1步:切换filter服务
|
||||
打开 ./public/api/app.php这个入口文件,添加以下新代码,目的是为了重新注册fitler服务。
|
||||
```php
|
||||
require_once dirname(__FILE__) . '/../init.php';
|
||||
|
||||
// 如果你需要使用第二套加密算法,请开启以下服务
|
||||
$di->filter = new \App\Common\SignFilter();
|
||||
```
|
||||
|
||||
这样,就可以针对./public/api/app.php这个入口的接口,对应App接口命名空间和自定义的接口命名空间的接口,切换到第二套接口验签方案。
|
||||
|
||||
## 第2步:配置默认接口参数
|
||||
打开./config/app.php配置文件,将原来的:
|
||||
```php
|
||||
/**
|
||||
* 应用接口层的统一参数
|
||||
*/
|
||||
'apiCommonRules' => array(
|
||||
'accessToken' => array('name' => 'access_token', 'default' => '', 'desc' => '访问令牌,仅当开启签名验证时需要传递,生成令牌可使用App.Auth.ApplyToken接口'),
|
||||
|
||||
/** ----- 如果你需要使用第二套加密算法,请开启以下参数规则 ----- **/
|
||||
|
||||
// 'app_key' => array('name' => 'app_key', 'default' => '', 'desc' => 'app_key,用于区分客户端应用,首次接入需要创建应用并等待管理员审核通过'),
|
||||
// 'sign' => array('name' => 'sign', 'desc' => '动态签名,签名算法是:<br/><ul><li>1、全部参数(排除sign),按key进行字典排序</li><li>2、全部参数值,把原始值按字符串进行拼接,并在最后加上app_secret密钥</li><li>3、对第2步结果,拼接密钥后,进行MD5加密</li><li>4、对第3步结果,转成大写,得到sign签名</li></ul>'),
|
||||
// 'uid' => array('name' => 'uid', 'type' => 'int', 'default' => 0, 'desc' => ''),
|
||||
// 'accessToken' => array('name' => 'access_token', 'default' => '', 'desc' => '访问令牌,保留使用但不需要在文档上展示', 'is_doc_hide' => true),
|
||||
),
|
||||
```
|
||||
改成:
|
||||
```php
|
||||
/**
|
||||
* 应用接口层的统一参数
|
||||
*/
|
||||
'apiCommonRules' => array(
|
||||
// 'accessToken' => array('name' => 'access_token', 'default' => '', 'desc' => '访问令牌,仅当开启签名验证时需要传递,生成令牌可使用App.Auth.ApplyToken接口'),
|
||||
|
||||
/** ----- 如果你需要使用第二套加密算法,请开启以下参数规则 ----- **/
|
||||
|
||||
'app_key' => array('name' => 'app_key', 'default' => '', 'desc' => 'app_key,用于区分客户端应用,首次接入需要创建应用并等待管理员审核通过'),
|
||||
'sign' => array('name' => 'sign', 'desc' => '动态签名,签名算法是:<br/><ul><li>1、全部参数(排除sign),按key进行字典排序</li><li>2、全部参数值,把原始值按字符串进行拼接,并在最后加上app_secret密钥</li><li>3、对第2步结果,拼接密钥后,进行MD5加密</li><li>4、对第3步结果,转成大写,得到sign签名</li></ul>'),
|
||||
'uid' => array('name' => 'uid', 'type' => 'int', 'default' => 0, 'desc' => ''),
|
||||
'accessToken' => array('name' => 'access_token', 'default' => '', 'desc' => '访问令牌,保留使用但不需要在文档上展示', 'is_doc_hide' => true),
|
||||
),
|
||||
```
|
||||
|
||||
注意,原来的access_token参数还是保留,但进行了隐藏,避免在线文档上显示出来,误导开发者。
|
||||
|
||||
保存后,刷新在线接口文档,可以看到以下3个新增加的公共接口参数。
|
||||
|
||||

|
||||
|
||||
> 温馨提示:熟悉后,你可根据项目的需要调整公共参数的规则,例如是否必须。
|
||||
|
||||
## 第3步:测试调用接口
|
||||
|
||||
完成上面两步,就可以实现第二套接口验签方案的开启了。
|
||||
|
||||
接下来,你可以进行接口的测试,验证新的加密方案是否已生效。
|
||||
|
||||
例如,故意填写错误的签名sign参数。
|
||||

|
||||
|
||||
会如期得到“签名错误”的返回结果。
|
||||
|
||||
```
|
||||
{
|
||||
"ret": 400,
|
||||
"data": {},
|
||||
"msg": "非法请求:签名错误"
|
||||
}
|
||||
```
|
||||
|
||||
## 如何查看正确的sign签名?
|
||||
你可以通过查看日志来查看正确的签名是什么。
|
||||
|
||||
查看当天的运行日记,例如:
|
||||
```bash
|
||||
$ tailf ./runtime/log/202004/20200429.log
|
||||
|
||||
2020-04-29 23:44:29');|{"request":{"service":"App.HelloWorld.HiRights","need_sign":"dMYpWZkvC6U40FbnIM6eGr","sign":"XXXX","uid":"0"}}
|
||||
```
|
||||
从上面日志可以看到需要的正确签名应该是:```dMYpWZkvC6U40FbnIM6eGr```,但客户端实际提供的签名是:```XXXX```。
|
||||
|
||||
## 如何临时去掉签名验证?
|
||||
|
||||
在调试模式下,可以去掉签名验证,并且可以通过app_key和uid参数手动设置当前的应用和顾客ID。
|
||||
|
||||
## 动态签名算法及示例
|
||||
|
||||
以下是动态签名的算法,也是一种很主流很流行的签名方式。
|
||||
|
||||
动态签名,签名算法是:
|
||||
|
||||
+ 1、全部参数(排除sign),按key进行字典排序
|
||||
+ 2、全部参数值,把原始值按字符串进行拼接,并在最后加上app_secret密钥
|
||||
+ 3、对第2步结果,拼接密钥后,进行MD5加密
|
||||
+ 4、对第3步结果,转成大写,得到sign签名
|
||||
|
||||
以下是一个示例。
|
||||
|
||||
假设app_key是dMYpWZkvC6U40FbnIM6eGr,同时app_secret密钥是Eb8LgJGSA2juKjmND6R3XuHdqe3n5xEEjPx。
|
||||
|
||||
待请求的API接口链接是:
|
||||
```
|
||||
http://你的域名/api/app.php?service=App.HelloWorld.HiApp&app_key=dMYpWZkvC6U40FbnIM6eGr&uid=1
|
||||
```
|
||||
|
||||
那么:
|
||||
|
||||
|
||||
+ 1、全部参数(排除sign),按key进行字典排序
|
||||
得到:
|
||||
```
|
||||
app_key=dMYpWZkvC6U40FbnIM6eGr
|
||||
service=App.HelloWorld.HiApp
|
||||
uid=1
|
||||
```
|
||||
+ 2、全部参数值,把原始值按字符串进行拼接
|
||||
得到:
|
||||
```
|
||||
dMYpWZkvC6U40FbnIM6eGrApp.HelloWorld.HiApp1Eb8LgJGSA2juKjmND6R3XuHdqe3n5xEEjPx
|
||||
```
|
||||
+ 3、对第2步结果,拼接密钥后,进行MD5加密
|
||||
得到:
|
||||
```
|
||||
175113721BD679F455D15F96CB2CDCA0
|
||||
```
|
||||
|
||||
+ 4、对第3步结果,转成大写,得到sign签名(32位大写)
|
||||
得到:
|
||||
```
|
||||
175113721BD679F455D15F96CB2CDCA0
|
||||
```
|
||||
|
||||
最后,得到sign=175113721BD679F455D15F96CB2CDCA0,从而得到完整的接口请求链接是:
|
||||
```
|
||||
http://你的域名/api/app.php?service=App.HelloWorld.HiApp&app_key=dMYpWZkvC6U40FbnIM6eGr&uid=1&sign=175113721BD679F455D15F96CB2CDCA0
|
||||
```
|
||||
|
||||
请求后,得到结果(接口签名通过):
|
||||
```
|
||||
{
|
||||
"ret": 200,
|
||||
"data": {
|
||||
"content": "Hello app: dMYpWZkvC6U40FbnIM6eGr"
|
||||
},
|
||||
"msg": ""
|
||||
}
|
||||
```
|
||||
67
public/wiki/2x-api.md
Normal file
@@ -0,0 +1,67 @@
|
||||
# 接口分类
|
||||
|
||||
API接口主要分为四大类,分别是:
|
||||
|
||||
+ App开放接口:提供给开发者客户端应用使用的API接口,可以进行接口权限分配和管理。
|
||||
+ Platform开放平台接口:提供给Platform开放平台调用的接口,需要开发者账号或者管理员账号。
|
||||
+ Admin管理后台接口:提供给Admin管理后台使用的接口,需要管理员权限。
|
||||
+ Task计划任务接口:提供给后台调用的定时任务,不需要权限,但需要校验静态的令牌。
|
||||
|
||||
> 温馨提示:为避免外部查看内部接口,需要登录管理员后,才能在在线接口文档查看Platform开放平台接口、Admin管理后台接口和Task计划任务接口。
|
||||
|
||||
## 接口对比
|
||||
|
||||
为方便对比不同系列的接口,可参考以下表格。
|
||||
|
||||
对比项|App开放接口|Platform开放平台接口|Admin管理后台接口|Task计划任务接口
|
||||
---|---|---|---|---|---
|
||||
调用方|开发者客户端应用|Platform开放平台前端|Admin管理后台前端|crontab计划任务
|
||||
权限要求|应用需要具备接口权限|开发者账号或管理员账号|管理员账号|不限
|
||||
访问入口|```/api/app.php```|```/api/platform.php```|```/api/admin.php```|```/api/task.php```,或通过```./bin/run_task.php```执行
|
||||
是否统计接口次数|统计,超出后限制调用|不统计|不统计|不统计
|
||||
接口基类|App\Common\Api|Platform\Common\Api|Admin\Common\Api|PhalApi\Api
|
||||
|
||||
## App开放接口
|
||||
|
||||
App开放接口,对应的命名空间为```App```,目录路径是:```./src/app```,即接口服务名称统一以```App.```为前缀,例如:```App.Auth.ApplyToken```、```App.Config.GetConfig```、```App.User.Register```等。
|
||||
|
||||
通过在线接口文档,可以看到全部的前台接口。
|
||||
|
||||
当需要新加开放接口API给开发者时,可以在这里添加。具体接口开发请见后面的技API接口开发文档。
|
||||
|
||||
> 客户端调用的入口为:http://你的域名/api/app.php
|
||||
|
||||
## Platform开放平台接口
|
||||
|
||||
提供给Platform开放平台调用的接口,对应的命名空间为```Platform```,目录路径是:```./src/platform```。
|
||||
|
||||
当需要增加开放平台的功能时,可以在此追加需要的接口。
|
||||
|
||||
> 客户端调用的入口为:http://你的域名/api/platform.php
|
||||
|
||||
## Admin管理后台接口
|
||||
|
||||
管理后台接口,对应的命名空间为```Admin```,目录路径是:```./src/admin```,即接口服务名称统一以```Admin.```为前缀,例如:```Admin.File.GetList```、```Admin.Index.GetDataFlow```等。
|
||||
|
||||
通过在线接口文档,可以看到全部的后台接口。
|
||||
|
||||
当需要增加管理后台的功能时,可以在此追加需要的接口。
|
||||
|
||||
> 客户端调用的入口为:http://你的域名/api/admin.php
|
||||
|
||||
## Task计划任务接口
|
||||
|
||||
提供给计划任务调用的接口,对应的命名空间为```Task```,目录路径是:```./src/task```。
|
||||
|
||||
静态令牌,在./config/app.php的task_access_token配置,可自行修改。
|
||||
```php
|
||||
// 计划任务专用的静态访问令牌,可以自行修改,通过HTTP请求时需要使用,CLI执行时不需要
|
||||
'task_access_token' => 'erVDwgv98Ls',
|
||||
```
|
||||
|
||||
当需要增加计划任务时,可以在此追加需要的接口。
|
||||
|
||||
> 客户端调用的入口为:http://你的域名/api/task.php
|
||||
|
||||
|
||||
|
||||
82
public/wiki/2x-app.md
Normal file
@@ -0,0 +1,82 @@
|
||||
# 接口大师开发者App源码说明(需要单独购买)
|
||||
|
||||
> 接口大师开发者App源代码,如有需要,请单独购买。
|
||||
|
||||
## 概述
|
||||
接口大师专属客户端,采用Flutter跨平台开发框架实现,同时支持Android/IOS两端。
|
||||
|
||||
参考[《Flutter开发文档》](https://flutter.cn/docs)
|
||||
|
||||
## 搭建开发环境
|
||||
推荐使用Flutter官方推荐的Android Studio进行开发。
|
||||
|
||||
#### 1.安装Android Studio
|
||||
|
||||
下载地址:[https://developer.android.com/studio/](https://developer.android.com/studio/)
|
||||
|
||||
#### 2.安装flutter插件
|
||||
|
||||
点击Android Studio菜单,进入属性界面:
|
||||

|
||||
|
||||
选择【Plugins】选项,搜索Flutter,安装Flutter插件和国际化插件:
|
||||

|
||||
|
||||
安装完成后需要重启Android Studio才能启用插件。
|
||||
|
||||
#### 3.加载工程
|
||||
|
||||
1. 用Android Studio选择工程根目录打开。打开工程根目录下的 pubspec.yaml 文件
|
||||
|
||||
2. 点击【Pub get】下载项目相关的依赖库。
|
||||
|
||||

|
||||
|
||||
3. 安装完毕即可以连接真机或者模拟器运行了。
|
||||
|
||||
## 修改应用信息
|
||||
|
||||
### Android端修改方法
|
||||
|
||||
1. 修改应用名:直接AndroidManifest.xml文件下修改:
|
||||

|
||||
|
||||
2. 修改包名:打开android/app/build.gradle 文件,找到applicationId,设置相应的包名。
|
||||
|
||||

|
||||
|
||||
3. Android App图标存放位置:
|
||||
|
||||
`.../android/app/src/main/res/`
|
||||
|
||||
|
||||
### IOS端修改方法
|
||||
|
||||
1. 修改包名、应用名:
|
||||
|
||||
IOS端需要在Mac系统下,使用xcode打开`/ios/Runner.xcworkspace`工程文件,打开以下选项中进行修改:
|
||||
|
||||

|
||||
|
||||
2. IOS App图标存放位置:
|
||||
|
||||
`.../ios/Runner/Assets.xcassets/`
|
||||
|
||||
## 国际化
|
||||
App国际化多语音采用 intl v0.16.1 自动化插件实现,在以下文件分别定义多语音字段:
|
||||
|
||||
```
|
||||
// 中文配置
|
||||
lib/l10n/intl_zh.arb
|
||||
|
||||
// 英文配置
|
||||
lib/l10n/intl_en.arb
|
||||
```
|
||||
编辑完成,保存后会自动生成代码。然后便可以在代码中引用相应的字段了。
|
||||
引用方法如下:
|
||||
|
||||
```
|
||||
'${S.of(context).home_1}' //home_1为多语音字段
|
||||
```
|
||||
|
||||
注意:同一个字段需要在中英文配置文件中都有定义才会生效。
|
||||
302
public/wiki/2x-config.md
Normal file
@@ -0,0 +1,302 @@
|
||||
# 重要项目配置
|
||||
考虑到为了方便项目进行配置,同时兼顾系统性能,将一些常用、需要进行个性但不频繁调整的配置,统一放置在./config/app.php配置文件中统一维护。
|
||||
|
||||
其中,project为项目配置,你可能会在你的项目中看到类似以下的配置内容:
|
||||
```php
|
||||
|
||||
/**
|
||||
* 项目配置
|
||||
*/
|
||||
'project' => array(
|
||||
// 项目名称
|
||||
'name' => '果果云',
|
||||
// logo链接
|
||||
'logo' => '/logo.png',
|
||||
// 顶端图标
|
||||
'ico' => '/favicon.ico',
|
||||
// 查看文档的密码,为空时不需要密码
|
||||
'doc_view_code' => '',
|
||||
// 总开关,是否允许会员注册,true允许,false不允许
|
||||
'is_member_register' => true,
|
||||
// 总开关,是否允许开放者注册,true允许,false不允许
|
||||
'is_dev_register' => true,
|
||||
// 用户等级及映射,下标对应member表的member_level字段,建议按权限从低到高配置
|
||||
// 0,100,101,200,201为系统自带等级,不宜更改。可扩展追加
|
||||
'member_level_map' => array(
|
||||
// 0~99区间表示会员
|
||||
0 => array(
|
||||
'name' => '普通会员',
|
||||
'is_register' => true, // 是否允许注册
|
||||
),
|
||||
|
||||
// 100~199区间表示开发者
|
||||
100 => array(
|
||||
'name' => '个人开发者',
|
||||
'is_register' => true, // 是否允许开放平台注册
|
||||
'app_limit' => 0, // 开发者角色每日接口调用次数限制,为0时表示无限制(优先使用应用的app_limit)
|
||||
),
|
||||
101 => array(
|
||||
'name' => '企业开发者',
|
||||
'is_register' => true, // 是否允许开放平台注册
|
||||
'app_limit' => 0, // 开发者角色每日接口调用次数限制,为0时表示无限制(优先使用应用的app_limit)
|
||||
),
|
||||
|
||||
// 200~255区间表示内部管理员
|
||||
200 => array(
|
||||
'name' => '普通管理员',
|
||||
'is_register' => false, // 是否允许注册
|
||||
),
|
||||
255 => array(
|
||||
'name' => '超级管理员',
|
||||
'is_register' => false, // 是否允许注册
|
||||
),
|
||||
),
|
||||
// 每个开发者最多可以创建的应用数量上限
|
||||
'dev_max_app_num' => 10,
|
||||
// 计划任务专用的静态访问令牌,可以自行修改,通过HTTP请求时需要使用,CLI执行时不需要
|
||||
'task_access_token' => 'erVDwgv98Ls',
|
||||
// 默认应用接口每日接口次数上限,0表示没有限制
|
||||
'default_daily_app_limit' => 100000,
|
||||
// 默认接口权限,没有任何配置时应用对于接口调用的默认权限,推荐设置为false
|
||||
'default_app_api_rigths_is_allow' => false,
|
||||
// 开放接口的命名空间,配置后可提供接口权限分配,可配置多个
|
||||
'open_api_namespaces' => array('App'),
|
||||
// 默认语言,简体中文,可选:zh_cn/zh_tw/fr/de/en,或自行扩展
|
||||
'default_language' => 'zh_cn',
|
||||
// 语言列表
|
||||
'language_list' => array(
|
||||
'zh_cn' => '简体中文',
|
||||
'en' => 'English',
|
||||
),
|
||||
// 验证码
|
||||
'captcha' => array(
|
||||
'switch' => array(
|
||||
'admin_login_captcha' => true, // 管理后台登录页面验证码开关
|
||||
'platform_login_catpcha' => true, // 开放平台登录页面验证码开关
|
||||
'platform_register_captcha' => true, // 开放平台注册页面验证码开关
|
||||
),
|
||||
'options' => array(
|
||||
'charset' => 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', // 验证码字符
|
||||
'length' => 4, // 验证码长度(默认长度为4,范围4~5)
|
||||
'height' => 50, // 验证码显示高度(默认40,单位像素)
|
||||
'width' => 200, // 验证码显示宽度(默认300,单位像素)
|
||||
'is_case_sensitive' => false, // 是否区分大小写
|
||||
),
|
||||
),
|
||||
// IP白名单,为空时不限制IP,只针对App开放接口
|
||||
'allow_ips' => array(
|
||||
// '127.0.0.1', // 每一组一个IP地址
|
||||
),
|
||||
),
|
||||
```
|
||||
|
||||
下面分别介绍一些重要的项目配置。
|
||||
|
||||
## 项目名称
|
||||
### 配置项:name
|
||||
|
||||
用于平台站点展示的项目名称,修改只影响展示和文案的显示,不影响功能使用。
|
||||
|
||||
```php
|
||||
// 项目名称
|
||||
'name' => '果果云',
|
||||
```
|
||||
|
||||
## 项目Logo和图标
|
||||
|
||||
### 配置项:logo和ico
|
||||
|
||||
```php
|
||||
// logo链接
|
||||
'logo' => '/logo.png',
|
||||
// 顶端图标
|
||||
'ico' => '/favicon.ico',
|
||||
```
|
||||
|
||||
## 接口文档查看密码
|
||||
### 配置项:doc_view_code
|
||||
查看文档的密码,为空时不需要密码,可防止外部非相关的人员查看接口文档。
|
||||
```php
|
||||
// 查看文档的密码,为空时不需要密码
|
||||
'doc_view_code' => '',
|
||||
```
|
||||
|
||||
## 是否允许会员注册
|
||||
### 配置项:is_member_register
|
||||
总开关,是否允许会员注册,true允许,false不允许。关闭后,顾客将不能进行注册。
|
||||
```php
|
||||
// 总开关,是否允许会员注册,true允许,false不允许
|
||||
'is_member_register' => true,
|
||||
```
|
||||
|
||||
## 每日接口请求次数限制
|
||||
### 配置项:app_limit
|
||||
角色级别的每日掊次数限制,优先使用应用配置。应用未限制时,再使用此配置。
|
||||
```php
|
||||
'app_limit' => 0, // 开发者角色每日接口调用次数限制,为0时表示无限制(优先使用应用的app_limit)
|
||||
|
||||
```
|
||||
|
||||
## 是否允许开放者注册
|
||||
### 配置项:is_dev_register
|
||||
总开关,是否允许开放者注册,true允许,false不允许。关闭后,开发者将不能在开放平台上进行注册。但可以通过管理后台进行添加。
|
||||
```php
|
||||
// 总开关,是否允许开放者注册,true允许,false不允许
|
||||
'is_dev_register' => true,
|
||||
```
|
||||
|
||||
## 用户等级及映射
|
||||
### 配置项:member_level_map
|
||||
用户等级及映射,下标对应member表的member_level字段,建议按权限从低到高配置。0,100,101,200,201为系统自带等级,不宜更改。可扩展追加。
|
||||
|
||||
```php
|
||||
// 用户等级及映射,下标对应member表的member_level字段,建议按权限从低到高配置
|
||||
// 0,100,101,200,201为系统自带等级,不宜更改。可扩展追加
|
||||
'member_level_map' => array(
|
||||
// 0~99区间表示会员
|
||||
0 => array(
|
||||
'name' => '普通会员',
|
||||
'is_register' => true, // 是否允许注册
|
||||
),
|
||||
|
||||
// 100~199区间表示开发者
|
||||
100 => array(
|
||||
'name' => '个人开发者',
|
||||
'is_register' => true, // 是否允许开放平台注册
|
||||
),
|
||||
101 => array(
|
||||
'name' => '企业开发者',
|
||||
'is_register' => true, // 是否允许开放平台注册
|
||||
),
|
||||
|
||||
// 200~255区间表示内部管理员
|
||||
200 => array(
|
||||
'name' => '普通管理员',
|
||||
'is_register' => false, // 是否允许注册
|
||||
),
|
||||
255 => array(
|
||||
'name' => '超级管理员',
|
||||
'is_register' => false, // 是否允许注册
|
||||
),
|
||||
),
|
||||
```
|
||||
|
||||
添加后,建议同步修改./src/base/Domain/UserType.php文件,定义账号类型常量,方便开发,避免使用魔法数字。
|
||||
```php
|
||||
/**
|
||||
* 账号类型和等级
|
||||
* - 依赖于app.project.member_level_map配置
|
||||
*/
|
||||
class UserType {
|
||||
|
||||
// 用户等级
|
||||
const MEMBER_LEVEL_USER = 0; // 普通用户
|
||||
const MEMBER_LEVEL_PERSON_DEVELOPER = 100; // 个人开发者
|
||||
const MEMBER_LEVEL_COMPAY_DEVELOPER = 101; // 企业开发者
|
||||
const MEMBER_LEVEL_ADMIN = 200; // 管理员
|
||||
const MEMBER_LEVEL_SUPER_ADMIN = 255; // 超级管理员
|
||||
```
|
||||
|
||||
## 开发者应用最大数量
|
||||
### 配置项:dev_max_app_num
|
||||
每个开发者最多可以创建的应用数量上限。管理后台添加应用不受数量限制。
|
||||
```php
|
||||
// 每个开发者最多可以创建的应用数量上限
|
||||
'dev_max_app_num' => 10,
|
||||
```
|
||||
|
||||
## 默认应用接口每日接口次数上限
|
||||
### 配置项:default_daily_app_limit
|
||||
默认应用接口每日接口次数上限,0表示没有限制,不分接口。每个应用的接口次数限制可通过管理后台单独修改和配置。
|
||||
|
||||
```php
|
||||
// 默认应用接口每日接口次数上限,0表示没有限制
|
||||
'default_daily_app_limit' => 100000,
|
||||
```
|
||||
|
||||
## 默认接口权限
|
||||
### 配置项:default_app_api_rigths_is_allow
|
||||
|
||||
```php
|
||||
// 默认接口权限,没有任何配置时应用对于接口调用的默认权限,推荐设置为false
|
||||
'default_app_api_rigths_is_allow' => false,
|
||||
```
|
||||
|
||||
## 开放接口的命名空间
|
||||
### 配置项:open_api_namespaces
|
||||
```php
|
||||
// 开放接口的命名空间,配置后可提供接口权限分配,可配置多个
|
||||
'open_api_namespaces' => array('App'),
|
||||
```
|
||||
可以追加自己新增的接口命名空间。后面文档会有专门介绍。
|
||||
|
||||
## 翻译语言
|
||||
|
||||
见default_language和language_list。
|
||||
|
||||
|
||||
## 验证码
|
||||
|
||||
见captcha。
|
||||
|
||||
|
||||
## 其他配置:JWT令牌
|
||||
jwt对应access_token的配置,你可以修改```key```,但修改后原来全部授权的access_token都会全部生效,需要客户端重新申请新的令牌。
|
||||
你还可以修改```exp```令牌有效的时间,只对新分配的令牌有影响。言下之意,对已经申请的令牌无影响。
|
||||
|
||||
```php
|
||||
/**
|
||||
* JWT令牌
|
||||
*/
|
||||
'jwt' => array(
|
||||
'key' => '*#FD2F9DM~E*', // 用于加密的key(安装时自动生成,不能修改!)
|
||||
'exp' => 30 * 86400, // 令牌生成后多少秒内有效,可自行修改
|
||||
),
|
||||
```
|
||||
|
||||
## 其他配置:用户
|
||||
账号用户里面有一个配置,是用于进行密码加密的公共盐值。不要修改,会导致原有的全部账号密码不正确。
|
||||
强烈建议不要修改,除非清楚在做什么。
|
||||
|
||||
```php
|
||||
/**
|
||||
* 用户
|
||||
*/
|
||||
'member' => array(
|
||||
'salt' => '9DfnseJ%sD#', // 用于增强用户密码(安装时自动生成,不能修改!)
|
||||
),
|
||||
```
|
||||
|
||||
## 其他配置:上传配置
|
||||
如果你需要单独为图片文件配置域名,可以修改```host```;如果需要切换上传的目录位置,可以修改```upload_folder_path```并确保有写入权限。
|
||||
|
||||
```php
|
||||
/**
|
||||
* 上传配置
|
||||
*/
|
||||
'upload' => [
|
||||
'host' => '', // 图片文件域名,为空时取当前域名,修改不影响原有的文件地址,可单独配置图片域名或CDN域名,格式:http://img.xxx.com(前面加协议,最后不用斜杠)
|
||||
'upload_folder_path' => 'uploads', // 上传目录,可修改,注意:1)目录存在且有写入权限;2)需要放置在public目录下,支持外部访问;
|
||||
|
||||
// 如果需要存储到阿里云OSS,请修改以下配置(全部必填方可生效)。若OSS上传失败,将会降级使用本地存储
|
||||
// 如何开通阿里云开通OSS服务:https://help.aliyun.com/document_detail/31884.html?spm=a2c4g.11186623.2.15.d8f41c62os2XRV#task-njz-hf4-tdb
|
||||
// 开通后,创建bucket,并把权限设置为:公共读
|
||||
'aliyu_oss' => array(
|
||||
'accessKeyId' => '', // TODO:修改成你的配置
|
||||
'accessSecret' => '', // TODO
|
||||
'bucket' => '', // TODO Bucket名称
|
||||
'endpoint' => '', // TODO endpoint,例如:http://oss-cn-beijing.aliyuncs.com
|
||||
),
|
||||
],
|
||||
```
|
||||
|
||||
## IP白名单配置
|
||||
如果需要配置全局的IP白名单,这部分IP白名单只针对调用App命名空间的开放接口的客户端IP地址进行限制,可以修改以下配置。为空时不限制,每一组一个IP地址。
|
||||
```
|
||||
// IP白名单,为空时不限制IP,只针对App开放接口
|
||||
'allow_ips' => array(
|
||||
// '127.0.0.1', // 每一组一个IP地址
|
||||
),
|
||||
```
|
||||
> 温暖提示:如果需要针对单个应用进行限制,可以进入Admin管理后台单独修改应用的IP白名单。
|
||||
|
||||
51
public/wiki/2x-connect-more-database.md
Normal file
@@ -0,0 +1,51 @@
|
||||
# 连接其他数据库
|
||||
|
||||
如果项目原有已经有数据库,或者在使用Pro开发过程中需要连接其他数据库,可按本教程进行开发。
|
||||
|
||||
## 第1步:添加其他数据库配置
|
||||
修改数据库配置文件```./config/db_plus.php```,修改里面的数据库连接配置。例如:
|
||||
```php
|
||||
'servers' => array(
|
||||
'db_master' => array( // 服务器标记
|
||||
'type' => 'mysql', // TODO: 数据库类型,暂时只支持:mysql, sqlserver
|
||||
'host' => '127.0.0.1', // TODO: 数据库域名
|
||||
'name' => 'phalapi_pro', // TODO: 数据库名字
|
||||
'user' => 'root', // TODO: 数据库用户名
|
||||
'password' => '', // TODO: 数据库密码
|
||||
'port' => 3306, // 数据库端口
|
||||
'charset' => 'utf8mb4', // 数据库字符集 utf8mb4或utf8
|
||||
'pdo_attr_string' => false, // 数据库查询结果统一使用字符串,true是,false否
|
||||
'driver_options' => array( // PDO初始化时的连接选项配置
|
||||
// 若需要更多配置,请参考官方文档:https://www.php.net/manual/zh/pdo.constants.php
|
||||
),
|
||||
),
|
||||
),
|
||||
```
|
||||
> 关于数据库的配置,可参考数据库连接文档:http://docs.phalapi.net/#/v2.0/database-connect
|
||||
|
||||
## 第2步:在di服务中注册新数据库NotORM
|
||||
请修改DI注册文件```./config/di.php```,去掉以下代码的注释,注册并开启```$di->notorm_plus```服务。
|
||||
```php
|
||||
// 连接其他数据库(或项目原有的数据库,需要时去掉注释)
|
||||
// $di->notorm_plus = new NotORMDatabase($di->config->get('dbs_plus'), $di->config->get('sys.notorm_debug'));
|
||||
```
|
||||
|
||||
## 第3步:实现Model基类,切换数据库
|
||||
此步骤,默认已经实现,可参考代码:```./src/base/Model/PlusBase.php```。如果需要连接第3个数据库或更多,可将此文件复制一份,作相应修改。
|
||||
|
||||
## 第4步:开发Model子类,实现你的业务逻辑
|
||||
在完成前面配置后,最后一步,便可以开始开发你的业务逻辑,连接或操作其他数据库。此时,新加的Model子类,如果是操作新增的数据库,则需要继承于```Base\Model\PlusBase```基类。例如:
|
||||
```php
|
||||
<?php
|
||||
namespace App\Model\Plus;
|
||||
|
||||
use Base\Model\PlusBase;
|
||||
|
||||
class Comment extends PlusBase {
|
||||
// 实现具体的数据库操作
|
||||
}
|
||||
```
|
||||
|
||||
> 温馨提示:为了将不同数据库的Model代码文件分开管理,推荐对于不同的数据库,在./src/app/Model目录下创建相应的子目录,分开管理和维护。例如上面放置在./src/app/Model/Plus目录。
|
||||
|
||||
更多帮助说明,请参考开源版[支持任意多个不同数据库](http://docs.phalapi.net/#/v2.0/database-other?id=%e5%a4%8d%e6%9d%82%e6%96%b9%e6%a1%88%ef%bc%9a%e6%94%af%e6%8c%81%e4%bb%bb%e6%84%8f%e5%a4%9a%e4%b8%aa%e4%b8%8d%e5%90%8c%e6%95%b0%e6%8d%ae%e5%ba%93)。
|
||||
1
public/wiki/2x-demo.md
Normal file
@@ -0,0 +1 @@
|
||||
demo
|
||||
50
public/wiki/2x-how-to-debug-api.md
Normal file
@@ -0,0 +1,50 @@
|
||||
# 接口调试
|
||||
|
||||
PhalApi专业版的调试继续保留[开源版的调试](http://docs.phalapi.net/#/v2.0/response-and-debug),并加以升级,进行了新的调整。
|
||||
|
||||
## 开启调试模式
|
||||
|
||||
开启调试模式很简单,主要有两种方式:
|
||||
|
||||
+ **单次请求开启调试**:默认添加请求参数```&__debug__=1```
|
||||
+ **全部请求开启调试**:把配置文件```./Config/sys.php```文件中的配置改成```'debug' => true,```
|
||||
|
||||
如果不允许手动单次开启调试,可以修改./config/di.php文件,把```$di->debug```调整为:
|
||||
```php
|
||||
// 调试模式,仅允许由系统配置指定
|
||||
$di->debug = $di->config->get('sys.debug');
|
||||
```
|
||||
|
||||
开启调试模式后,将不会进行进行access_token严格的检测,即不会进行后置权限、状态等统一的Filter检测。如果要手动指定当前会员ID或者app_key,可以使用以下参数:
|
||||
|
||||
+ 调试模式时,通过```&_uid=123```可指定本次登录的会员ID
|
||||
+ 调试模式时,通过```&_app_key=abc```可指定本次的app_key
|
||||
|
||||
## 查看SQL语句
|
||||
在runtime目录下,在每天运行的日志文件,通过匹配SQL关键字可以看到每次接口请求背后执行的SQL语句。
|
||||
|
||||
例如,对于获取配置的接口```App.Config.GetConfig```,接口背后执行的SQL部分日志效果如下:
|
||||
```
|
||||
$ tail -f ./runtime/log/202001/20200109.log | grep SQL
|
||||
2020-01-09 11:27:08|SQL|[#2 - 45.49ms - SQL]/path/to/phalapi-pro/src/app/Domain/Config.php(55): App\Model\Base::getBy() pp_config SELECT * FROM pp_config WHERE (config_name = 'config_year') LIMIT 1;|{"request":{"service":"App.Config.GetConfig","access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiI5ODMwOTk0MyIsImF1ZCI6InVzZXIiLCJzdWIiOiJ0ZXN0IiwidWlkIjozLCJpYXQiOjE1Nzg0NTU0ODksImV4cCI6MTU4MTA0NzQ4OX0.YSRAdAjRmCD1616rMsligyhf0qIOtMEEhwYtQBmMQuQ","config_name":"config_year"}}
|
||||
```
|
||||
|
||||
## 查看错误日志
|
||||
在runtime目录下,可以看到错误日志。
|
||||
|
||||
例如,一些关于警告、提醒和错误的日志:
|
||||
```
|
||||
$ ll ./runtime/log/202004
|
||||
-rwxrwxrwx 1 _www staff 2.7K 4 5 17:08 error_20200405.log
|
||||
-rwxrwxrwx 1 _www staff 1.4K 4 7 22:48 error_20200407.log
|
||||
-rwxrwxrwx 1 _www staff 662B 4 9 11:06 error_20200409.log
|
||||
-rwxrwxrwx 1 _www staff 576B 4 2 09:27 notice_20200402.log
|
||||
-rwxrwxrwx 1 _www staff 192B 4 4 22:34 notice_20200404.log
|
||||
-rwxrwxrwx 1 _www staff 78K 4 8 23:11 notice_20200408.log
|
||||
-rwxrwxrwx 1 _www staff 9.1K 4 9 14:59 notice_20200409.log
|
||||
-rwxrwxrwx 1 dogstar staff 92K 4 5 17:17 warning_20200405.log
|
||||
-rwxrwxrwx 1 dogstar staff 174K 4 8 23:11 warning_20200408.log
|
||||
-rwxrwxrwx 1 _www staff 19K 4 9 14:59 warning_20200409.log
|
||||
```
|
||||
|
||||
|
||||
184
public/wiki/2x-how-to-dev-admin.md
Normal file
@@ -0,0 +1,184 @@
|
||||
# 如何开发Admin管理后台
|
||||
|
||||
## 管理后台源代码
|
||||
|
||||
PhalApi Pro 管理后台,是基于[iView-admin2.0](https://lison16.github.io/iview-admin-doc/#/icons)开发的,源代码位置```pro_admin```目录。
|
||||
|
||||
目录结构如下:
|
||||
|
||||
```
|
||||
.
|
||||
├── config 开发相关配置
|
||||
├── public 打包所需静态资源
|
||||
└── src
|
||||
├── api AJAX请求
|
||||
└── assets 项目静态资源
|
||||
├── icons 自定义图标资源
|
||||
└── images 图片资源
|
||||
├── components 业务组件
|
||||
├── config 项目运行配置
|
||||
├── directive 自定义指令
|
||||
├── libs 封装工具函数
|
||||
├── locale 多语言文件
|
||||
├── mock mock模拟数据
|
||||
├── router 路由配置
|
||||
├── store Vuex配置
|
||||
├── view 页面文件
|
||||
└── tests 测试相关
|
||||
```
|
||||
|
||||
## 本地运行
|
||||
|
||||
修改根目录下的vue.config.js文件中的接口测试域名,更换成您本地的测试域名或正式域名。
|
||||
```js
|
||||
// 添加如下配置
|
||||
devServer: {
|
||||
proxy: {
|
||||
'/api': {
|
||||
// TODO:更换成您本地的测试域名或正式域名
|
||||
target: 'http://pro-test.api.yesapi.cn/',
|
||||
changeOrigin: true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
在本地首次运行管理后台时,需要进行npm安装,进入```pro_admin```目录后,执行命令:
|
||||
```
|
||||
$ npm install
|
||||
```
|
||||
|
||||
安装完毕后,再运行命令:
|
||||
```
|
||||
$ npm run dev
|
||||
```
|
||||
|
||||
然后,浏览器会自动打开管理后台,例如:
|
||||

|
||||
|
||||
## 需要使用的接口
|
||||
|
||||
管理后台需要用到的接口,建议统一放置在Admin后台API系列中,进行统一的管理员身份和权限的验证。
|
||||
|
||||
## 发布
|
||||
|
||||
管理后台开发完成后,进行打包:
|
||||
```
|
||||
$ npm run build
|
||||
```
|
||||
|
||||
打包后会生成dist目录,其目录结构如下:
|
||||
|
||||
```
|
||||
./dist
|
||||
├── css # 样式
|
||||
├── favicon.ico # 图标
|
||||
├── fonts # 字段
|
||||
├── img # 图片
|
||||
├── index.html # 首页文件
|
||||
└── js # js代码
|
||||
```
|
||||
|
||||
最后把dist目录里面全部的文件复制替换到```public/admin/```,更新到生产环境即可。
|
||||
|
||||
## 如何自定义国际化语言包
|
||||
1.本项目全局注入了vue-i18n,切换语言原理很简单,在```/src/locale```目录下操作即可
|
||||
|
||||
2.在```/src/locale/lang```目录下创建需要的语言包js文件,例如zh-TW.js。
|
||||
在该文件中以键值对的形式配置每个需要翻译的变量值。
|
||||
注意:每添加一个需要翻译的变量key都要在该目录下的其他语言包配置相应的翻译值
|
||||
|
||||
3.配置```/src/locale/index.js```文件
|
||||
```javascript
|
||||
//引入自定义的语言包
|
||||
import customZhCn from './lang/zh-CN'
|
||||
import customZhTw from './lang/zh-TW'
|
||||
import customEnUs from './lang/en-US'
|
||||
//引入iview语言包
|
||||
import zhCnLocale from 'iview/src/locale/lang/zh-CN'
|
||||
import enUsLocale from 'iview/src/locale/lang/en-US'
|
||||
import zhTwLocale from 'iview/src/locale/lang/zh-TW'
|
||||
|
||||
// 引进语言包
|
||||
// vue-i18n 6.x+写法
|
||||
const messages = {
|
||||
'zh-CN': Object.assign(zhCnLocale, customZhCn),
|
||||
'zh-TW': Object.assign(zhTwLocale, customZhTw),
|
||||
'en-US': Object.assign(enUsLocale, customEnUs)
|
||||
}
|
||||
export const i18n = new VueI18n({
|
||||
locale: lang,
|
||||
messages
|
||||
})
|
||||
|
||||
// 配置项目中要调用的语言包,用于界面选择语言中下拉选项调用
|
||||
export const localList = {
|
||||
'zh-CN': '中文简体',
|
||||
'en-US': 'English'
|
||||
}
|
||||
```
|
||||
|
||||
完成。
|
||||
|
||||
## 前端页面的鉴权
|
||||
1.admin权限配置方法: 运行项目 >> 使用超级管理员登录后台管理admin >> 在权限管理目录中进行权限管理
|
||||
① 权限分配的页面根据前端代码中```/src/router```路由表的路径path进行一一对应, 在操作列表中的每个操作代表一个页面的权限,
|
||||
点击**添加新操作**可添加一个新路径的权限控制
|
||||
② 对每个页面的权限分配还可以通过分配给*用户类型*或者*特定用户ID*进行权限分配
|
||||
③ 对子级别路由的path进行分配可控制子级别页面的权限
|
||||
对父级别路由的path进行分配可控制父级别页面的权限以及在页面左侧目录中的展示情况
|
||||
父子路由的权限配置相互独立
|
||||
|
||||
2.鉴权原理:
|
||||
admin和platform项目中vueRouter的路由分为```/src/router/router.js```中的基础页面以及```/src/router/aysnRouters.js```中的异步路由。
|
||||
异步路由aysnRouters的加载需要前端调接口获得相应账号的权限数组permission (permission与aysnRouters进行匹配后通过addRouter方法加载到项目路由表中)
|
||||
二次开发可对基础路由和异步路由进行修改, 添加新异步路由后可使用超管账号对新路径进行**添加新操作**
|
||||
|
||||
3.在该项目vue组件开发中判断运行时路径是否有访问权限的方法
|
||||
```/src/libs/util.js```中的*hasPermission*方法
|
||||
开发中可能遇到以下场景: 设置一个button, 点击跳转到某个需要权限的页面, button的显示隐藏与是否有权限相关
|
||||
例如Platform项目中的```/src/view/account/accountInfo.vue```(具体可参见项目源码)
|
||||
|
||||
```html
|
||||
<!-- /src/view/account/accountInfo.vue -->
|
||||
<template>
|
||||
<div class="content-layer accountInfo min-h">
|
||||
<h3>{{$t('developer_info')}}</h3>
|
||||
<div class="content">
|
||||
<header class="header">
|
||||
<img :src="avatar">
|
||||
<span class="username">{{userProfile.username }}</span>
|
||||
<!-- 示例: 通过/account/accountSettings权限情况, 判断是否显示组件 -->
|
||||
<!-- 将权限状态保存在showAccess后 绑定组件判断显示隐藏-->
|
||||
<Button v-if="showAccess" @click="setInfo">{{$t('developer_info_alter')}} >></Button>
|
||||
</header>
|
||||
<Table
|
||||
:columns="columns1"
|
||||
:data="data1"
|
||||
:show-header=false
|
||||
width=660
|
||||
>
|
||||
</Table>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
```
|
||||
|
||||
|
||||
```javascript
|
||||
// /src/view/account/accountInfo.vue
|
||||
// hasPermission方法判断是否有访问该路径的权限
|
||||
import { getToken, hasPermission } from '@/libs/util'
|
||||
export default {
|
||||
name: 'accountInfo',
|
||||
computed: {
|
||||
// 用计算属性保存hasPermission的状态值,用于组件v-if判断
|
||||
showAccess () {
|
||||
return hasPermission('/account/accountSettings')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 绑定完成。
|
||||
```
|
||||
365
public/wiki/2x-how-to-dev-api.md
Normal file
@@ -0,0 +1,365 @@
|
||||
# 如何开发接口
|
||||
|
||||
使用PhalApi专业版开发接口,非常简单,大致流程如下。
|
||||
|
||||
## 目录结构
|
||||
|
||||
PhalApi Pro版的目录结构如下,
|
||||
|
||||
```
|
||||
./
|
||||
├── README.md # 简介
|
||||
├── bin # 脚本目录
|
||||
├── config # 配置目录
|
||||
│ ├── app.php # 应用配置
|
||||
│ ├── dbs.php # 数据库配置
|
||||
│ ├── di.php # 依赖服务配置
|
||||
│ └── sys.php #系统配置
|
||||
├── data # 数据库
|
||||
│ └── phalapi_pro.sql # 数据库安装时的文件
|
||||
├── language # 翻译包
|
||||
├── pro_admin # 管理后台的前端源代码,基于iview-admin
|
||||
├── pro_platform # 开放平台的前端源代码,基于iview-admin
|
||||
├── public # 对外访问的目录
|
||||
│ ├── admin # 管理后台访问入口(相当于pro_admin打包构建后的dist目录)
|
||||
│ ├── api # 接口访问入口(内分前台API和后台API)
|
||||
│ ├── docs # 离线生成的HTML接口文档
|
||||
│ ├── docs.php # 在线版接口文档访问入口
|
||||
│ ├── index.php
|
||||
│ ├── init.php # 全局初始化文件
|
||||
│ ├── install # 安装向导(成功安装后建议删除此目录)
|
||||
│ ├── platform # 开放平台访问入口(相当于pro_platform打包构建后的dist目录)
|
||||
│ ├── static # 静态资源
|
||||
│ ├── uploads # 上传目录(需要有写入权限)
|
||||
│ └── wiki # 技术文档
|
||||
├── runtime # 运行目录
|
||||
│ ├── _install.lock # 安装锁定文件
|
||||
│ ├── cache # 文件缓存
|
||||
│ └── log # 文件日志
|
||||
├── sdk # SDK包
|
||||
├── src # 项目源代码,非常重要
|
||||
│ ├── admin # 后台接口源代码(遵循ADM模式)
|
||||
│ ├── app # 开放平台接口源代码(遵循ADM模式)
|
||||
│ ├── base # 基础包源代码(放置底层公共的代码,不对外直接提供接口,即不提供Api层)
|
||||
│ ├── platform # 开放平台接口源代码(遵循ADM模式)
|
||||
│ ├── task # 计划任务接口源代码(遵循ADM模式)
|
||||
│ └── view # 页面模板目录(如接口文档)
|
||||
├── tests # 单元测试
|
||||
└── vendor # composer包,不需要手动修改,通过composer install/update可进行安装和更新
|
||||
```
|
||||
|
||||
PHP代码层次结构如下:
|
||||

|
||||
|
||||
## 编写Api接口层
|
||||
|
||||
如果需要编写开放接口,可以在./src/app/Api目录下新增一个PHP文件,类名和文件名一样(需要区分大小写)。并继承App\Common\Api基类即可。
|
||||
|
||||
例如开放接口的Hello World示例,接口文件是:./src/app/Api/HelloWorld.php,类名是:App\Api\HelloWorld,对接的接口服务名称是:App.HelloWorld.Say。
|
||||
|
||||
```php
|
||||
<?php
|
||||
namespace App\Api;
|
||||
use App\Common\Api;
|
||||
|
||||
/**
|
||||
* Hello World示例
|
||||
*/
|
||||
class HelloWorld extends Api {
|
||||
// 接口参数配置
|
||||
public function getRules() {
|
||||
return array(
|
||||
'say' => array(
|
||||
'nickname' => array('name' => 'nickname', 'desc' => '昵称'),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 示例
|
||||
* @desc 第一个前台接口示例
|
||||
*/
|
||||
public function say() {
|
||||
$nickname = $this->nickname;
|
||||
return array('content' => 'Hello world!');
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
保存后,访问接口文档列表,可以看到以下新接口:
|
||||

|
||||
|
||||
同时在接口详情文档可以查看到相应的详细接口文档:
|
||||

|
||||
|
||||
如果需要编写后台接口,则需要放置在./src/admin/Api目录下,并继承Admin\Common\Api基类。其他开发要求类似。
|
||||
|
||||
> 温馨提示:以下方法是系统保留的函数名,不以用于接口函数名称,否则会影响接口正常运行。系统保留接口函数名称有:tryToGetUid()、checkUserLogin()、tryToGetAppKey()、checkAppOnline()、getCurContext()、init()、createMemberValue()、getApiRules()、getApiCommonRules()、getRules()、filterCheck()、userCheck()、isServiceWhitelist()、equalOrIngore()。
|
||||
|
||||
## 如何取消接口令牌验证?
|
||||
|
||||
默认情况下,前台接口需要进行```access_token```令牌验证,以保护接口不被非法请求。如果不需要对指定的接口进行验证,可以在配置文件./config/app.php中的service_whitelist白名单中添加接口。例如上面的HelloWorld接口不需要接口验证,可以在最后追加配置:
|
||||
|
||||
```php
|
||||
'service_whitelist' => array(
|
||||
'Site.Index',
|
||||
'HelloWorld.Say', // 追加Hello World示例白名单
|
||||
),
|
||||
```
|
||||
|
||||
接口白名单配置,会取消过滤器,不进行任何校验和判断,此时不会相应调整应用的接口权限。如果需要让接口权限在界面上显示保持一致,可以配置接口权限规则。
|
||||
|
||||
> 温馨提示:配置接口白名单,开放平台和管理后台的接口权限显示不会影响。
|
||||
|
||||
## 如何取消接口权限判断?
|
||||
|
||||
+ 如何取消全部接口权限判断?
|
||||
可以修改./config/app.php里面的default_app_api_rigths_is_allow配置项为true,即可让开放接口默认拥有权限,相当于取消全部接口权限判断。
|
||||
|
||||
+ 如何取消某个接口类的接口权限判断?
|
||||
|
||||
在你的接口具体子类中,重载```\App\Common\Api::userCheck()```方法,不进行任何操作即可。
|
||||
```php
|
||||
/**
|
||||
* 平台接口基类
|
||||
*/
|
||||
class Api extends \App\Common\Api {
|
||||
|
||||
/**
|
||||
* 进行接口权限判断
|
||||
* @throws BadRequestException
|
||||
*/
|
||||
protected function userCheck() {
|
||||
// 不需要
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
> 温馨提示:通过代码取消接口权限判断,开放平台和管理后台的接口权限显示不会影响。
|
||||
|
||||
+ 如何取消一个接口的接口权限判断?
|
||||
|
||||
在你的接口具体子类中,重载```\App\Common\Api::userCheckActionWhitelist()```方法,返回不需要进行接口权限判断的接口白名单。
|
||||
```php
|
||||
<?php
|
||||
namespace App\Api;
|
||||
use App\Common\Api;
|
||||
|
||||
/**
|
||||
* Hello World示例
|
||||
*/
|
||||
class HelloWorld extends Api {
|
||||
|
||||
protected function userCheckActionWhitelist() {
|
||||
return array('hiApp', 'hiMember');
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
> 温馨提示:通过代码取消接口权限判断,开放平台和管理后台的接口权限显示不会影响。
|
||||
|
||||
## 如何获取当前上下文信息?
|
||||
如何获取当前上下文、登录会员ID和app_key?
|
||||
|
||||
在App\Common\Api接口基类中,已经封装了针对于当前上下文、登录会员ID和app_key等接口,方便项目快速开发。
|
||||
|
||||
以下是使用代码和相关说明。
|
||||
|
||||
```php
|
||||
class HelloWorld extends Api {
|
||||
public function say() {
|
||||
// 获取会员ID,未登录时异常返回
|
||||
$uid = $this->tryToGetUid();
|
||||
|
||||
// 获取会员ID,未登录时返回0
|
||||
$uid = $this->tryToGetUid(false);
|
||||
|
||||
// 检测会员是否已登录,未登录时异常返回
|
||||
$this->checkUserLogin();
|
||||
|
||||
// 获取app_key,未指定时异常返回
|
||||
$appKey = $this->tryToGetAppKey();
|
||||
|
||||
// 获取app_key,未指定时返回空字符串
|
||||
$appKey = $this->tryToGetAppKey(false);
|
||||
|
||||
// 检测是否已指定app_key
|
||||
$this->checkAppOnline();
|
||||
|
||||
// 获取当前上下文
|
||||
$context = $this->getCurContext();
|
||||
var_dump($context->getUid()); // 会员ID
|
||||
var_dump($context->getAppKey()); // app_key
|
||||
}
|
||||
}
|
||||
````
|
||||
|
||||
## 如何隐藏access_token参数?
|
||||
|
||||
如果不需要在接口文档上显示```access_token```参数,可以在接口参数规则里这样配置(设置is_doc_hide为true即可)。
|
||||
```php
|
||||
class HelloWorld extends Api {
|
||||
public function getRules() {
|
||||
return array(
|
||||
'say' => array(
|
||||
'accessToken' => array('name' => 'access_token', 'is_doc_hide' => true),
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 编写Domain领域层
|
||||
|
||||
Domain领域层主要用于封装复杂的业务逻辑、规则和算法。此部分PHP代码放置在./src/app/Domain目录下。此部分根据不同项目的业务需求,具体开发即可。
|
||||
|
||||
## 编写Model数据层
|
||||
|
||||
Model数据层主要用于操作MySQL数据库,全部的Model子类可继承Base\Model\Base基类,此基类封装了很多实用的方法和接口,极大减少了数据库封装的代码。例如对应配置表的配置Model类代码如下:
|
||||
|
||||
```php
|
||||
<?php
|
||||
namespace App\Model;
|
||||
|
||||
class Config extends Base {
|
||||
}
|
||||
```
|
||||
对应源代码文件是:./src/app/Model/Config.php。
|
||||
|
||||
在继承```Base\Model\Base```数据库基类后,可以很方便进行数据库的操作和查询。
|
||||
|
||||
更多关于数据库的连接、操作、查询、多数据库使用等,请参考[DataModel数据模型 - PhalApi 2.x 开发文档](http://docs.phalapi.net/#/v2.0/database-datamodel)。
|
||||
|
||||
## 如何新增API接口命名空间?
|
||||
|
||||
默认情况,推荐将接口统一放置在App命名空间,即src/app目录下。如果项目有需要,可以新增自己的接口命名空间。
|
||||
|
||||
首先,参考开源版文档[如何增加一个顶级命名空间?](http://docs.phalapi.net/#/v2.0/autoload?id=%e5%a6%82%e4%bd%95%e5%a2%9e%e5%8a%a0%e4%b8%80%e4%b8%aa%e9%a1%b6%e7%ba%a7%e5%91%bd%e5%90%8d%e7%a9%ba%e9%97%b4%ef%bc%9f),增加一个新的顶级命名空间。
|
||||
|
||||
然后,修改```./config/app.php```配置文件里的open_api_namespaces配置,追加你的命名空间。
|
||||
```php
|
||||
// 开放接口的命名空间,配置后可提供接口权限分配,可配置多个
|
||||
'open_api_namespaces' => array('App', '新的顶级命名空间'),
|
||||
```
|
||||
|
||||
例如,加了Task命名空间后:
|
||||
```php
|
||||
// 开放接口的命名空间,配置后可提供接口权限分配,可配置多个
|
||||
'open_api_namespaces' => array('App', 'Task'),
|
||||
```
|
||||
|
||||
在管理后台可以自动管理该命名空间下的接口权限。
|
||||
接口权限分配:
|
||||

|
||||
接口服务列表:
|
||||

|
||||
|
||||
在开放平台,开发者也可自动看到新增命名空间下的接口。
|
||||

|
||||
|
||||
## 如何隐藏接口?
|
||||
|
||||
和开源版一样,在接口类或方法中添加```@ignore```注释。
|
||||
|
||||
如:
|
||||
```php
|
||||
<?php
|
||||
namespace App\Api;
|
||||
use App\Common\Api;
|
||||
|
||||
/**
|
||||
* Hello World示例
|
||||
* @ignore
|
||||
*/
|
||||
class HelloWorld extends Api {
|
||||
|
||||
/**
|
||||
* 接口示例
|
||||
* @desc 一个开放接口示例,可直接访问,不需要任何验证,因为配置了service_whitelist白名单。熟悉后可删除此示例接口。
|
||||
* @ignore
|
||||
* @return string content 一句话
|
||||
*/
|
||||
public function say() {
|
||||
return array('content' => 'Hello PhalApi Pro!');
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 如何开启接口参数加密传输?
|
||||
|
||||
为了保护客户端传递的参数不被外界非法获取,除了使用HTTPS协议外,也可以通过代码方式来增加。
|
||||
|
||||
在PhalApi专业版,你可以:
|
||||
|
||||
** 客户端RSA公钥加密传输API接口参数 + 服务端RSA私钥解密API接口参数。**
|
||||
|
||||
### 重要配置
|
||||
|
||||
首先,是RSA私钥和公钥的文件,分别是:
|
||||
+ rsa私钥文件:./config/phalapi_pro_rsa.pri
|
||||
+ rsa公钥文件:./config/phalapi_pro_rsa.pub
|
||||
|
||||
在项目启动或开始时,你可以更换以上RSA配置文件,项目开始使用后,不建议再更换。
|
||||
|
||||
其次,还可以开启./config/app.php配置文件中的encrypt_data公共参数,方便客户端查看可以传递此参数以及其格式要求说明。
|
||||
|
||||
```php
|
||||
|
||||
/**
|
||||
* 应用接口层的统一参数
|
||||
*/
|
||||
'apiCommonRules' => array(
|
||||
'accessToken' => array('name' => 'access_token', 'default' => '', 'desc' => '访问令牌,仅当开启签名验证时需要传递,生成令牌可使用App.Auth.ApplyToken接口'),
|
||||
|
||||
/** ----- 如果你需要使用第二套加密算法,请开启以下参数规则 ----- **/
|
||||
|
||||
// 'app_key' => array('name' => 'app_key', 'default' => '', 'desc' => 'app_key,用于区分客户端应用,首次接入需要创建应用并等待管理员审核通过'),
|
||||
// 'sign' => array('name' => 'sign', 'desc' => '动态签名,签名算法是:<br/><ul><li>1、全部参数(排除sign),按key进行字典排序</li><li>2、全部参数值,把原始值按字符串进行拼接,并在最后加上app_secret密钥</li><li>3、对第2步结果,拼接密钥后,进行MD5加密</li><li>4、对第3步结果,转成大写,得到sign签名(32位)</li></ul>'),
|
||||
// 'uid' => array('name' => 'uid', 'type' => 'int', 'default' => 0, 'desc' => ''),
|
||||
// 'accessToken' => array('name' => 'access_token', 'default' => '', 'desc' => '访问令牌,保留使用但不需要在文档上展示', 'is_doc_hide' => true),
|
||||
|
||||
'encryptData' => array('name' => 'encrypt_data', 'desc' => '客户端加密的接口,格式是:RSA公钥加密(base64编码(JSON原始数据))。开启后,同时支持原来普通的参数传递方式。'),
|
||||
),
|
||||
```
|
||||
|
||||
### 客户端RSA公钥加密传输API接口参数
|
||||
|
||||
将rsa公钥文件:./config/phalapi_pro_rsa.pub提供给受信任的客户端开发人员,其中待加密的encrypt_data参数格式是:
|
||||
|
||||
encrypt_data = RSA公钥加密(base64编码(JSON原始数据))
|
||||
|
||||
也就是:
|
||||
+ 第1步、把全部的原始参数通过JSON格式封装
|
||||
+ 第2步、对第1步结果进行base64编码
|
||||
+ 第3步、使用RSA公钥进行加密
|
||||
+ 第4步、得到encrypt_data
|
||||
|
||||
以下是PHP作为客户端编写的代码示例:
|
||||
```php
|
||||
// 公钥加密-由客户端完成
|
||||
$public_key = openssl_pkey_get_public(file_get_contents('./phalapi_pro_rsa.pub'));
|
||||
openssl_public_encrypt('{"name":"phalapi pro"}', $crypted, $public_key);
|
||||
$_REQUEST['encrypt_data'] = base64_encode($crypted);
|
||||
// K07LIy/V+cfZqfHgZpIPnmdkwlkFbTkyRXVXx2JfQrF3YFAIsFcHnC9TjGTezzyup2f0V24nYH71Uf3oXVIqz/X9wgPXW0AGAbJw4kDOIq9Jao5L0mG7t5FV/2DLzJ14qO6fvANv6e/Hy2pFBcKvHnQ8uRJ/wyAV+RpUAa21wCY6zzuo9OhS89NPZg4B4CUORR8SIuIqWTUlXHB0woFIfRiO/AKCGltc9oDkyzJFYVvgI0LwijkQUV9RoruCEx6EvmZY7OVLB5+AXwfnfFKKtCw3jucqHyclzXwCQoif8FXN1NzCNpYvwj7DbzqU/WzRgxnPgXQSyjbCDlw19BrWoQ==
|
||||
```
|
||||
以上,原始的参数是:```{"name":"phalapi pro"}```,最后加密后的结果如上。
|
||||
|
||||
> 温馨提示:客户端可以把需要加密的参数放到encrypt_data,同时服务端接口也会继续支持原来原始参数的传递。两者重复时以加密的参数为准。
|
||||
|
||||
### 服务端RSA私钥解密API接口参数
|
||||
|
||||
此部分由后端API接口自动完成。不影响原有的接口参数传递方式和接口参数规则配置。
|
||||
|
||||
## composer的使用
|
||||
|
||||
PhalApi专业版和PhalApi 2.x开源一样,都是使用了composer,如果对PHP composer不熟悉,可以查看[Composer 中文网 / Packagist 中国全量镜像](https://www.phpcomposer.com/),简单来说,composer是 PHP 用来管理依赖(dependency)关系的工具。
|
||||
|
||||
由于国外镜像通常会很慢,本地使用时可以切换到中国镜像。执行以下命令:
|
||||
```
|
||||
$ composer config -g repo.packagist composer https://packagist.phpcomposer.com
|
||||
```
|
||||
|
||||
## 扩展阅读
|
||||
更多内容请参考[PhalApi 2.x 开发文档](http://docs.phalapi.net/#/)。
|
||||
|
||||
|
||||
193
public/wiki/2x-how-to-dev-platform.md
Normal file
@@ -0,0 +1,193 @@
|
||||
# 如何开发Platform开放平台
|
||||
|
||||
## 开放平台源代码
|
||||
|
||||
Platform开放平台,是基于[iView-admin2.0](https://lison16.github.io/iview-admin-doc/#/icons)开发的,源代码位置```pro_platform```目录。
|
||||
|
||||
目录结构如下:
|
||||
|
||||
```
|
||||
.
|
||||
├── config 开发相关配置
|
||||
├── public 打包所需静态资源
|
||||
└── src
|
||||
├── api AJAX请求
|
||||
└── assets 项目静态资源
|
||||
├── icons 自定义图标资源
|
||||
└── images 图片资源
|
||||
├── components 业务组件
|
||||
├── config 项目运行配置
|
||||
├── directive 自定义指令
|
||||
├── libs 封装工具函数
|
||||
├── locale 多语言文件
|
||||
├── mock mock模拟数据
|
||||
├── router 路由配置
|
||||
├── store Vuex配置
|
||||
├── view 页面文件
|
||||
└── tests 测试相关
|
||||
```
|
||||
|
||||
## 本地运行
|
||||
|
||||
修改根目录下的vue.config.js文件中的接口测试域名,更换成您本地的测试域名或正式域名。
|
||||
```js
|
||||
// 添加如下配置
|
||||
devServer: {
|
||||
proxy: {
|
||||
'/api': {
|
||||
// TODO:更换成您本地的测试域名或正式域名
|
||||
target: 'http://pro-test.api.yesapi.cn/',
|
||||
changeOrigin: true,
|
||||
pathRewrite: {
|
||||
'^api/': '/api'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
在本地首次运行开放平台时,需要进行npm安装,进入```pro_platform```目录后,执行命令:
|
||||
```
|
||||
$ npm install
|
||||
```
|
||||
成功安装后可以看到:
|
||||

|
||||
|
||||
> 推荐使用:[NPM镜像-NPM下载地址-NPM安装教程-阿里巴巴开源镜像站](http://npm.taobao.org/)。
|
||||
> 使用说明,你可以使用我们定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm:
|
||||
> ```$ npm install -g cnpm --registry=https://registry.npm.taobao.org```
|
||||
|
||||
安装完毕后,再运行命令:
|
||||
```
|
||||
$ npm run dev
|
||||
```
|
||||
|
||||
然后,浏览器会自动打开管理后台,例如:
|
||||

|
||||
|
||||
## 需要使用的接口
|
||||
|
||||
开放平台需要用到的接口,建议统一放置在Platform开放平台接口API系列中。访问的接口入口是:```http://你的域名/api/platform.php```,请与你的后端开发确认此接口入口。
|
||||
|
||||
## 发布
|
||||
|
||||
管理后台开发完成后,进行打包:
|
||||
```
|
||||
$ npm run build
|
||||
```
|
||||
|
||||
打包后会生成dist目录,其目录结构如下:
|
||||
|
||||
```
|
||||
./dist
|
||||
├── css # 样式
|
||||
├── favicon.ico # 图标
|
||||
├── fonts # 字段
|
||||
├── img # 图片
|
||||
├── index.html # 首页文件
|
||||
└── js # js代码
|
||||
```
|
||||
|
||||
最后把dist目录里面全部的文件复制替换到```public/platform/```,更新到生产环境即可。
|
||||
|
||||
## 如何自定义国际化语言包
|
||||
1.本项目全局注入了vue-i18n,切换语言原理很简单,在```/src/locale```目录下操作即可
|
||||
|
||||
2.在```/src/locale/lang```目录下创建需要的语言包js文件,例如zh-TW.js。
|
||||
在该文件中以键值对的形式配置每个需要翻译的变量值。
|
||||
注意:每添加一个需要翻译的变量key都要在该目录下的其他语言包配置相应的翻译值
|
||||
|
||||
3.配置```/src/locale/index.js```文件
|
||||
```javascript
|
||||
//引入自定义的语言包
|
||||
import customZhCn from './lang/zh-CN'
|
||||
import customZhTw from './lang/zh-TW'
|
||||
import customEnUs from './lang/en-US'
|
||||
//引入iview语言包
|
||||
import zhCnLocale from 'iview/src/locale/lang/zh-CN'
|
||||
import enUsLocale from 'iview/src/locale/lang/en-US'
|
||||
import zhTwLocale from 'iview/src/locale/lang/zh-TW'
|
||||
|
||||
// 引进语言包
|
||||
// vue-i18n 6.x+写法
|
||||
const messages = {
|
||||
'zh-CN': Object.assign(zhCnLocale, customZhCn),
|
||||
'zh-TW': Object.assign(zhTwLocale, customZhTw),
|
||||
'en-US': Object.assign(enUsLocale, customEnUs)
|
||||
}
|
||||
export const i18n = new VueI18n({
|
||||
locale: lang,
|
||||
messages
|
||||
})
|
||||
|
||||
// 配置项目中要调用的语言包,用于界面选择语言中下拉选项调用
|
||||
export const localList = {
|
||||
'zh-CN': '中文简体',
|
||||
'en-US': 'English'
|
||||
}
|
||||
```
|
||||
|
||||
完成。
|
||||
|
||||
## 前端页面的鉴权
|
||||
1.admin权限配置方法: 运行项目 >> 使用超级管理员登录后台管理admin >> 在权限管理目录中进行权限管理
|
||||
① 权限分配的页面根据前端代码中```/src/router```路由表的路径path进行一一对应, 在操作列表中的每个操作代表一个页面的权限,
|
||||
点击**添加新操作**可添加一个新路径的权限控制
|
||||
② 对每个页面的权限分配还可以通过分配给*用户类型*或者*特定用户ID*进行权限分配
|
||||
③ 对子级别路由的path进行分配可控制子级别页面的权限
|
||||
对父级别路由的path进行分配可控制父级别页面的权限以及在页面左侧目录中的展示情况
|
||||
父子路由的权限配置相互独立
|
||||
|
||||
2.鉴权原理:
|
||||
admin和platform项目中vueRouter的路由分为```/src/router/router.js```中的基础页面以及```/src/router/aysnRouters.js```中的异步路由。
|
||||
异步路由aysnRouters的加载需要前端调接口获得相应账号的权限数组permission (permission与aysnRouters进行匹配后通过addRouter方法加载到项目路由表中)
|
||||
二次开发可对基础路由和异步路由进行修改, 添加新异步路由后可使用超管账号对新路径进行**添加新操作**
|
||||
|
||||
3.在该项目vue组件开发中判断运行时路径是否有访问权限的方法
|
||||
```/src/libs/util.js```中的*hasPermission*方法
|
||||
开发中可能遇到以下场景: 设置一个button, 点击跳转到某个需要权限的页面, button的显示隐藏与是否有权限相关
|
||||
例如Platform项目中的```/src/view/account/accountInfo.vue```(具体可参见项目源码)
|
||||
|
||||
```html
|
||||
<!-- /src/view/account/accountInfo.vue -->
|
||||
<template>
|
||||
<div class="content-layer accountInfo min-h">
|
||||
<h3>{{$t('developer_info')}}</h3>
|
||||
<div class="content">
|
||||
<header class="header">
|
||||
<img :src="avatar">
|
||||
<span class="username">{{userProfile.username }}</span>
|
||||
<!-- 示例: 通过/account/accountSettings权限情况, 判断是否显示组件 -->
|
||||
<!-- 将权限状态保存在showAccess后 绑定组件判断显示隐藏-->
|
||||
<Button v-if="showAccess" @click="setInfo">{{$t('developer_info_alter')}} >></Button>
|
||||
</header>
|
||||
<Table
|
||||
:columns="columns1"
|
||||
:data="data1"
|
||||
:show-header=false
|
||||
width=660
|
||||
>
|
||||
</Table>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
```
|
||||
|
||||
|
||||
```javascript
|
||||
// /src/view/account/accountInfo.vue
|
||||
// hasPermission方法判断是否有访问该路径的权限
|
||||
import { getToken, hasPermission } from '@/libs/util'
|
||||
export default {
|
||||
name: 'accountInfo',
|
||||
computed: {
|
||||
// 用计算属性保存hasPermission的状态值,用于组件v-if判断
|
||||
showAccess () {
|
||||
return hasPermission('/account/accountSettings')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 绑定完成。
|
||||
```
|
||||
164
public/wiki/2x-how-to-use-api.md
Normal file
@@ -0,0 +1,164 @@
|
||||
# 如何调用接口
|
||||
|
||||
以下将通过简明的方式,介绍客户端如何调用接口。
|
||||
|
||||
## API入口
|
||||
假设您的域名是:http://open.phalapi.net,则:
|
||||
|
||||
+ App开放接口API入口:http://open.phalapi.net/api/app.php
|
||||
+ Platform开放平台接口API入口:http://open.phalapi.net/api/app.php
|
||||
+ Admin管理后台接口API入口:http://open.phalapi.net/api/admin.php
|
||||
+ Task计划任务接口API入口:http://open.phalapi.net/api/admin.php
|
||||
|
||||
首先,不同系列的接口,必须要找到对应的API入口。因为不同的入口处理的方式、权限判断和场景都不相同,并且方便分别进行个性化控制而不相互影响。
|
||||
|
||||
## 请求方式
|
||||
|
||||
通过HTTP/HTTPS协议,便可以请求接口。
|
||||
|
||||
例如对于默认的接口服务:http://open.phalapi.net/api/app.php?s=App.HelloWorld.Say,直接用浏览器打开访问,可以得到结果:
|
||||
```
|
||||
{
|
||||
"ret": 200,
|
||||
"data": {
|
||||
"content": "Hello PhalApi Pro!"
|
||||
},
|
||||
"msg": ""
|
||||
}
|
||||
```
|
||||
|
||||
如果通过CURL方式请求,则结果为:
|
||||
```
|
||||
$ curl http://open.phalapi.net/api/app.php\?s\=App.HelloWorld.Say
|
||||
{"ret":200,"data":{"content":"Hello PhalApi Pro!"},"msg":""}
|
||||
```
|
||||
|
||||
通常情况下,可以使用GET或POST方式请求接口,但推荐使用POST方式请求接口。原因有几点:
|
||||
+ 1、GET方式容易存在编码问题导致参数解析失败,但POST方式不会;
|
||||
+ 2、GET参数有最大长度限制,当GET参数过长过大时会提示错误,但POST方式不会;
|
||||
+ 3、GET方式容易被抓包或在服务器存在日志,容易导致密码等敏感信息泄露,POST方式相对安全。
|
||||
|
||||
## 指定接口
|
||||
|
||||
和PhalApi开源版一样,通过```s```参数(完整参数名是```service```,两者等效),可以指定调用哪一个接口服务。
|
||||
|
||||
关于全部的接口,可以通过在线接口文档查看。当未指定接口时,默认接口服务是```App.Site.Index```。
|
||||
|
||||
例如:
|
||||
```
|
||||
# 请求默认接口
|
||||
http://open.phalapi.net/api/app.php
|
||||
|
||||
# 请求会员注册接口
|
||||
http://open.phalapi.net/api/app.php?s=App.User.Register
|
||||
|
||||
# 请求获取文件列表接口(需要切换到后台API入口)
|
||||
http://open.phalapi.net/api/admin.php?s=Admin.File.GetList
|
||||
```
|
||||
|
||||
需要注意的是,不同接口的访问入口不同,需要注意区分。
|
||||
|
||||
## 请求参数
|
||||
|
||||
如你所见,s或service参数用于指定接口服务。除此之外,公共的接口参数目前有:
|
||||
|
||||
+ access_token:token令牌,用于接口验证,后面会继续讲解。
|
||||
|
||||
每个接口的参数,可以通过接口文档查看,例如:
|
||||

|
||||
|
||||
如无特殊说明,接口参数均可使用GET或POST。
|
||||
|
||||
## 返回结构
|
||||
|
||||
如前文所述,以及遵循PhalApi开源版的格式,接口返回的是JSON格式。例如:
|
||||
```
|
||||
{"ret":200,"data":{"title":"Hello PhalApi Pro","version":"1.0","time":1577697960},"msg":""}
|
||||
```
|
||||
格式后是:
|
||||
```
|
||||
{
|
||||
"ret": 200,
|
||||
"data": {
|
||||
"title": "Hello PhalApi Pro",
|
||||
"version": "1.0",
|
||||
"time": 1577697960
|
||||
},
|
||||
"msg": ""
|
||||
}
|
||||
```
|
||||
|
||||
全部接口,返回的接口结果结构分为三部分:
|
||||
|
||||
+ ret:状态码,整型,200表示成功,4xx表示客户端非法请求,5xx表示服务器错误
|
||||
+ data:成功时返回的业务数据,通常为对象类型,具体由接口服务而定
|
||||
+ msg:失败时的错误提示信息,字符类型
|
||||
|
||||
具体每个接口返回的结果,可以访问接口文档,查看指定接口服务文档的**返回结果**说明。例如:
|
||||

|
||||
|
||||
也可以查看接口返回示例:
|
||||

|
||||
|
||||
|
||||
## 验证方式
|
||||
|
||||
PhalApi专业版使用的是access_token令牌验证的方式,在开始使用接口时,需要先申请令牌。申请令牌有两种方式:
|
||||
|
||||
+ 方式一:通过应用来申请令牌:根据开发者应用的app_key和app_secret申请access_token令牌
|
||||
+ 方式二:通过会员来申请令牌:结合已获得的应用access_token令牌,根据会员账号和密码进行登录并获取新的access_token令牌
|
||||
|
||||
|
||||
## 获取令牌
|
||||
|
||||
### 方式一:通过应用来申请令牌
|
||||
|
||||
这种方式,要求:
|
||||
|
||||
+ 应用存在:首先需要创建应用,并且审核通过
|
||||
+ 密钥正确:应用app_key和app_secret正确
|
||||
+ 正常状态:应用处于正常状态(若为禁用则不可用)
|
||||
+ 接口权限:应用在调用指定接口时需要拥有相应接口的权限
|
||||
|
||||
需要使用的接口是:```App.Auth.ApplyToken```。
|
||||
|
||||
### 方式二:通过会员登录来申请令牌
|
||||
|
||||
方式二,要求:
|
||||
|
||||
+ 注册账号:已经有注册的会员账号
|
||||
+ 密码正确:会员账号和密码正确
|
||||
+ 正常状态:会员处于正常状态(若为禁用则不可登录)
|
||||
+ 指定应用:通过方式一获得有有效令牌
|
||||
|
||||
需要使用的接口是:```App.User.UserLogin```。
|
||||
|
||||
通过access_token参数传递成功申请到的令牌,若令牌过期或无效,接口将会返回ret=406,例如:
|
||||
```
|
||||
{
|
||||
"ret": 406,
|
||||
"data": {},
|
||||
"msg": "非法请求:access_token校验不通过"
|
||||
}
|
||||
```
|
||||
若令牌有效,则可以正常请求接口。
|
||||
|
||||
## 刷新令牌
|
||||
|
||||
令牌过期时间默认为30天,可以通过./config/app.php配置文件的jwt里的exp来自行修改,如设置为7天:
|
||||
```
|
||||
/**
|
||||
* JWT令牌
|
||||
*/
|
||||
'jwt' => array(
|
||||
'key' => '1j7zo53mnsLK', // 用于加密的key(安装时自动生成,不能修改!)
|
||||
'exp' => 7 * 86400, // 令牌生成后多少秒内有效,可自行修改
|
||||
),
|
||||
```
|
||||
在令牌过期前,可以通过```App.Auth.RefreshAccessToken```接口刷新令牌,从而延长有效期。刷新后有效期会重新延长到jwt里面exp指定的时间。
|
||||
|
||||
## 开放平台与管理后台的身份校验
|
||||
|
||||
对于内部,可以通过登录开发者账号,或者通过登录管理员账号来获得令牌。此时使用的接口是```Platform.User.UserLogin```。
|
||||
|
||||
|
||||
129
public/wiki/2x-mall.md
Normal file
@@ -0,0 +1,129 @@
|
||||
# 接口商城
|
||||
|
||||
为满足企业实现对API接口收费的需求,接口大师提供了接口商城,在管理后台配置好接口流量套餐后,开发者用户则可以通过开放平台或前台进行查看和购买,购买接口套餐后再调用接口就会进行流量计费。
|
||||
|
||||
## 接口流量套餐配置
|
||||
|
||||
使用管理员账号,登录Admin管理后台,进入【服务大厅】-【接口流量套餐】,查看当前的流量套餐。
|
||||

|
||||
|
||||
可以点击【添加套餐】,添加:付费购买/免费试用/组合套餐。
|
||||

|
||||
|
||||
+ **付费购买**套餐:是指单个API接口调用多少次需要多少钱,多久时间内有效。
|
||||
+ **免费试用**套餐:是指单个API接口同一个应用可以免费调用多少次,多久时间内有效。
|
||||
+ **组合套餐**:可以把多个不重复的付费购买套餐组合起来,进行优惠定价,吸引客户购买。
|
||||
|
||||
套餐保存后,仍然可以修改,但过去已经下单的套餐不影响。
|
||||
|
||||
## 支付方式
|
||||
|
||||
默认提供了现金支付、支付宝和Paypal三种支付方式,可以通过【服务大厅】-【支付配置】进行不同支付方式的修改和开关。
|
||||
|
||||

|
||||
|
||||
价格支持两位小数点,即人民币单位到:分。
|
||||
|
||||
## 前台套餐展示、下单和购买
|
||||
|
||||
### 游客如何查看接口流量套餐?
|
||||
未登录开放平台的游客,可以通过在线接口文档查看需要付费的接口流量套餐。
|
||||
|
||||
例如,在接口文档列表页,可以看到哪些接口需要付费才能使用。
|
||||

|
||||
|
||||
又如,在接口文档详情页,可以看到免费试用套餐和付费套餐。
|
||||

|
||||
|
||||
点击即可登录后进行下单。
|
||||
|
||||
### 开发者如何购买接口流量套餐?
|
||||
|
||||
已经登录的开发者,除了可以在在线接口文档和游客一样查看接口流量套餐外,还可以在开放平台的【接口权限】查看需要传费才能使用的接口购买入口。
|
||||
|
||||

|
||||
|
||||
### 如何查看组合套餐?
|
||||
|
||||
因为组合套餐是组合了不定个接口流量套餐,并且价格上会比单个接口流量套餐购买的更优惠和更划算。
|
||||
|
||||
当在管理后台,添加和设置了组合套餐后,例如:
|
||||

|
||||
|
||||
在开放平台的-【接口权限】页面下方,就可以看到:
|
||||
|
||||

|
||||
|
||||
### 下单
|
||||
|
||||
点击购买入口,就可以进入下单页面。
|
||||
|
||||
用户可以选择类似的套餐,以及选择需要购买的数量,还可以查看有效时间和套餐说明、套餐价值、付费服务协议。
|
||||
|
||||

|
||||
|
||||
还可以填写备注和留言,确定后创建订单。
|
||||

|
||||
|
||||
下单后,会进入到支付环节,用户可以选择自己喜欢的支付方式。
|
||||

|
||||
|
||||
例如,支付宝支付方式:
|
||||

|
||||
|
||||
支付成功后会返回到支付成功页。
|
||||
|
||||
## 我的订单和我的套餐
|
||||
|
||||
开发者在开放平台的【服务大厅】-【我的订单】,可以查看到我的订单,未支付的订单可以继续进行支付。
|
||||
|
||||

|
||||
|
||||
开发者在开放平台的的【服务大厅】-【我的套餐】,可以查看到我有哪些接口流量套餐,以及使用情况,或过期情况。
|
||||
|
||||

|
||||
|
||||
|
||||
## 接口流量计费
|
||||
|
||||
当配置好接口流量套餐,开发者也购买流量套餐后,就可以正常调用和请求接口,此时,API接口系统会进行接口流量统计和计费。
|
||||
|
||||
计费逻辑是:
|
||||
+ 1、优先使用已购买的接口流量套餐,并且优先使用最早付费的
|
||||
+ 2、如果没有付费套餐,则尝试使用免费试用套餐的流量
|
||||
|
||||
流量计费的代码入口位于./src/app/Common/Filter.php 文件的以下函数。
|
||||
```php
|
||||
/**
|
||||
* 对付费的接口进行流量计费
|
||||
*/
|
||||
protected function cutDownApiFlow() {
|
||||
$flow = new Flow();
|
||||
$cutRs = $flow->cutdown(\PhalApi\DI()->request->getService(), \PhalApi\DI()->context->getAppKey());
|
||||
if ($cutRs < 0) {
|
||||
throw new BadRequestException(\PhalApi\T('api flow not enough'), 9);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
> 温馨提示:仅当接口通过签名验证后,才进行流量计费,
|
||||
|
||||
|
||||
## 管理后台的订单处理和管理
|
||||
|
||||
在管理后台,除了可以设置接口流量套餐,还可以对开发者用户的订单和流量套餐进行管理和处理。
|
||||
|
||||
例如,在管理后台-【服务大厅】-【订单管理】,可以查看和修改订单的状态、对套餐进行调整。可以发放流量套餐和回收流量套餐。每个订单,最多只能发放一次流量(即只能最多发一次货,不能重复发货)。
|
||||

|
||||
|
||||
也可以在管理后台的【服务大厅】-【套餐管理】,对订单的套餐进行管理,也可以不需要订单直接给开发者发放接口流量套餐,例如内部测试或者内部使用时。
|
||||

|
||||
|
||||
## 一些注意事项
|
||||
|
||||
+ 1、付费的接口,需要先进行接口权限的设置
|
||||
+ 2、当接口有任意套餐时(不管试用或付费),都需要购买或拥有该接口的流量套餐后才可调用
|
||||
+ 3、调试模式下,不会进行接口流量的拦截和判断
|
||||
|
||||
|
||||
|
||||
77
public/wiki/2x-task.md
Normal file
@@ -0,0 +1,77 @@
|
||||
# 计划任务
|
||||
|
||||
|
||||
## 配置计划任务
|
||||
|
||||
安装完成后,在```pp_task_progress```表可以看到全部的计划任务。
|
||||
|
||||
通过管理后台或者后台接口或者数据库```pp_task_progress```表,可以配置和维护计划任务。
|
||||
|
||||
## 执行计划任务
|
||||
|
||||
完成上述的计划任务配置后,有两种方式可以执行计划任务。一种是常规的定时执行,另一种是人工通过MQ触发执行。
|
||||
|
||||
需要注意的是,
|
||||
+ 1)通过crontab定时任务执行时,会存在一定的延时(1分钟左右,视具体任务执行时间而定),不能严格保证按配置的时间点执行
|
||||
+ 2)通过MQ触发执行时,默认采用的是数据库MQ实现,如果需要支持高并发,需要先切换到Redis MQ(在./config/di.php把MQ改为```\PhalApi\Task\MQ\RedisMQ```)
|
||||
|
||||
### 定时执行计划任务
|
||||
|
||||
通过配置,可以定时执行计划任务。
|
||||
|
||||
在Linux系统上,通过```crontab -e```修改添加计划任务:
|
||||
```
|
||||
# PhalApi专业版计划任务
|
||||
*/1 * * * * php /path/to/bin/run_task.php > /dev/null
|
||||
```
|
||||
|
||||
如果需要手动执行或进行测试,可以进入专业版根目录,然后运行脚本命令:
|
||||
```
|
||||
$ php ./bin/run_task.php
|
||||
```
|
||||
|
||||
### 通过MQ手动执行计划任务
|
||||
|
||||
通过MQ,可以在API接口中(即同步请求中),把耗时严重或者执行资源过多的请求,改为异步的后台执行。实现代码是:
|
||||
```php
|
||||
$taskDomain = new \Base\Domain\Task();
|
||||
$taskDomain->push('App.Task.Demo', array('str' => '传递给计划任务的接口参数'));
|
||||
```
|
||||
|
||||
默认MQ是采用数据库存储,添加到MQ后,系统将会在1分钟内消费。
|
||||
|
||||
## 如何编写计划任务接口
|
||||
|
||||
编写计划任务的接口,和普通的前台接口类似,区别在于:
|
||||
|
||||
- 1、计划任务用于后台运行,通过调度器采用CLI方式执行
|
||||
- 2、计划任务没有上下文信息,如果需要指定uid或者app_key,请手动添加接口参数
|
||||
- 3、计划任务接口,推荐统一放置在```Task.*.*```里面
|
||||
|
||||
以下是一个计划任务示例代码:
|
||||
```php
|
||||
<?php
|
||||
namespace Task\Api;
|
||||
use App\Task\Api;
|
||||
|
||||
class Demo extends Api {
|
||||
|
||||
public function getRules() {
|
||||
return array(
|
||||
'demo' => array(
|
||||
'str' => array('name' => 'str', 'default' => '示例参数'),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 计划任务接口-示例
|
||||
* @return string str 接收到的参数
|
||||
*/
|
||||
public function run() {
|
||||
return array('str' => $this->str);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
40
public/wiki/README.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# PhalApi Pro 技术文档
|
||||
|
||||
## 简介
|
||||
|
||||
PhalApi Pro 是[PhalApi开源接口框架](https://www.phalapi.net/)的专业版, 基于主流的PHP+MySQL,可用于开发接口系统、搭建开放平台,能有效管理开发者、应用、接口和权限。通过开放平台可以快速整合资源,借助SaaS服务、Serverless、云服务、大数据和开放接口等互联网技术,连接最终顾客、开发者、合作伙伴、供应商和企业,形成商业闭环。
|
||||
|
||||
专业版包括API接口系统、Platform开放平台和Admin管理后台三个子系统,可快速用于接口开发管理和开放平台搭建。
|
||||
|
||||
由PhalApi作者dogstar及其研发团队自主设计和研发的软件系统,专业可靠,值得依赖!
|
||||
|
||||
## PhalApi Pro 产品介绍
|
||||
|
||||
PhalApi Pro 包括API接口、管理后台和开放平台三个子系统,假设您的域名是:http://open.phalapi.net,则:
|
||||
|
||||
+ 首页:http://open.phalapi.net/
|
||||
+ API接口:http://open.phalapi.net/docs.php
|
||||
+ 开放平台:http://open.phalapi.net/platform/
|
||||
+ 管理后台:http://open.phalapi.net/admin/
|
||||
+ 技术文档:http://open.phalapi.net/wiki/
|
||||
|
||||
### 1、API接口系统
|
||||
包括全部API接口,可自动生成在线接口代码,并进行全面而灵活的接口权限分配。基于PhalApi 2.x开发,采用经典的LNMP架构,也可部署运行在Apache和Windows系统,由后端开发工程师负责开发,提供API接口给开发者、客户端使用。
|
||||
|
||||
全部接口,可通过在线接口文档浏览。管理员登录后可查看全部内部接口。
|
||||

|
||||
|
||||
### 2、Platform开放平台
|
||||
提供给平台的开发者使用,可进行应用管理、查看接口权限等操作。基于iView Admin开发,采用前后端分离技术方案。
|
||||
|
||||

|
||||
|
||||
### 3、Admin管理后台
|
||||
提供给管理员使用,可进行全面的日常管理。基于iView Admin开发,采用前后端分离技术方案。
|
||||
|
||||

|
||||
|
||||
## 阅读对象
|
||||
|
||||
本技术文档主要面向PhalApi Pro的使用者,提供了关于技术开发、产品使用、业务介绍等内容,阅读对象包括但不限于后端开发人员、前端开发人员、测试人员、产品人员和运营人员。
|
||||
|
||||
10
public/wiki/_coverpage.md
Normal file
@@ -0,0 +1,10 @@
|
||||

|
||||
|
||||
# PhalApi Pro 技术文档
|
||||
|
||||
PhalApi Pro 是[PhalApi开源接口框架](https://www.phalapi.net/)的专业版, 基于主流的PHP+MySQL,是一套开发、管理和提供接口的软件源代码和解决方案。
|
||||
|
||||
由PhalApi作者dogstar及其研发团队自主设计和研发的软件系统,专业可靠,值得依赖!
|
||||
|
||||
[购买授权](http://pro.yesapi.cn/) [查看文档](/README.md)
|
||||
|
||||
4
public/wiki/_navbar.md
Normal file
@@ -0,0 +1,4 @@
|
||||
|
||||
- [官网](http://pro.yesapi.cn/)
|
||||
- [PhalApi开源文档](http://docs.phalapi.net/#/)
|
||||
|
||||
47
public/wiki/_sidebar.md
Normal file
@@ -0,0 +1,47 @@
|
||||
- 前言
|
||||
- [简介](/README.md)
|
||||
- [安装](/install.md)
|
||||
|
||||
- 一、使用手册
|
||||
- [1.1 API接口系统使用手册](/api.md)
|
||||
- [1.2 Platform开放平台使用手册](/platform.md)
|
||||
- [1.3 Admin管理后台使用手册](/admin.md)
|
||||
|
||||
- 二、产品介绍
|
||||
- [2.1 整体架构及业务流程](/product.md)
|
||||
- [2.2 账号体系](/2x-account.md)
|
||||
- [2.3 开放接口权限](/2x-api-righst.md)
|
||||
- [2.4 重要项目配置](/2x-config.md)
|
||||
- [2.5 接口商城](/2x-mall.md)
|
||||
|
||||
- 三、API接口开发文档
|
||||
- [3.1 接口分类](/2x-api.md)
|
||||
- [3.2 在线接口文档](/2x-api-docs.md)
|
||||
- [3.3 如何调用接口](/2x-how-to-use-api.md)
|
||||
- [3.4 如何开发接口](/2x-how-to-dev-api.md)
|
||||
- [3.5 接口调试](/2x-how-to-debug-api.md)
|
||||
- [3.6 计划任务](/2x-task.md)
|
||||
- [3.7 连接其他数据库](/2x-connect-more-database.md)
|
||||
- [3.8 第二套接口验签方案](/2x-api-sign.md)
|
||||
- [3.9 新增接口目录教程](/2x-api-new-namespace.md)
|
||||
- [4.0 第三方登录接入流程](/2x-api-authorization.md)
|
||||
|
||||
- 四、前端开发文档
|
||||
- [4.1 Platform开放平台开发文档](/2x-how-to-dev-platform.md)
|
||||
- [4.2 Admin管理后台开发文档](/2x-how-to-dev-admin.md)
|
||||
|
||||
- 五、开发者App(需单独购买)
|
||||
- [5.1 开发者App使用手册(单独购买)](/app-usage.md)
|
||||
- [5.2 开发者App客户端源码说明](/2x-app.md)
|
||||
|
||||
- 六、自动化单元测试(需单独购买)
|
||||
- [6.1 PHP接口自动化测试(单独购买)](/testcase.md)
|
||||
|
||||
- 七、附录
|
||||
- [6.1 版本更新日记](/changelog.md)
|
||||
- [6.2 数据库表结构](/database_tables.md)
|
||||
- [6.3 联系我们](/contact.md)
|
||||
- [6.4 如何编写开发手册](/how-to-wiki.md)
|
||||
- [6.5 文档编写规范](/guide.md)
|
||||
- [ ]()
|
||||
|
||||
16
public/wiki/admin-vs-portal.md
Normal file
@@ -0,0 +1,16 @@
|
||||
# 管理后台与运营平台的区别
|
||||
|
||||
## 管理后台
|
||||
管理后台是PhalApi专业版针对技术人员专门提供的,可用于进行接口管理、数据库管理、开发、测试、接口流量统计等。
|
||||
主要面向的人群是技术人员,以及是对内的。
|
||||
|
||||
登录管理后台只能是管理员或者超级管理员账号。
|
||||
|
||||
访问入口是:你的域名 + /admin
|
||||
|
||||
## 运营平台
|
||||
运营平台是PhalApi开源版提供的,针对非技术人员,可用于日常业务的管理,例如图片管理系统、ERP系统、HR系统等,使用人群主要是店长、管理者等非技术人员,即职能部门或者外部人员。
|
||||
|
||||
登录运营平台是单独的管理员账号。
|
||||
|
||||
访问入口是:你的域名 + /portal
|
||||
143
public/wiki/admin.md
Normal file
@@ -0,0 +1,143 @@
|
||||
# Admin管理后台使用手册
|
||||
|
||||
使用管理后台之前,请先配置并安装好PhalApi专业版,并创建超级管理员账号。
|
||||
|
||||
## 访问管理后台
|
||||
|
||||
假设配置的域名是http://open.phalapi.net,那么管理后台的地址是:
|
||||
```
|
||||
http://open.phalapi.net/admin/
|
||||
```
|
||||
|
||||
或者通过在线接口文档页面,点击【管理后台】直接进入,例如:
|
||||

|
||||
|
||||
## 登录管理后台
|
||||
|
||||
打开管理后台,首先需要进行管理员登录,登录界面如下:
|
||||

|
||||
|
||||
管理员账号密码,在安装向导时,由用户自行设定。如果忘记管理员账号,可查看member数据库表;如果忘记密码,需要重新安装。
|
||||
|
||||
## 使用管理后台
|
||||
|
||||
进入管理后台后,可以看到类似以下的后台首页:
|
||||
|
||||

|
||||
|
||||
其他功能模块,按界面指引操作即可。
|
||||
|
||||
下面简单介绍管理后台的功能,最新的界面以最新版的为准。
|
||||
|
||||
## 账号管理
|
||||
管理和查看全部账号,包括管理员、开发者和会员的账号,进行账号的管理,例如修改密码、修改资料、创建账号。
|
||||

|
||||
|
||||
创建账号:
|
||||

|
||||
|
||||
## 应用管理
|
||||
可以对客户端应用进行管理,如审核开发者应用、查看应用信息、限制应用接口调用次数、禁用或恢复等。
|
||||

|
||||
|
||||
## 接口管理(权限、设计、测试)
|
||||
可以进行接口权限分配和管理(权限分配)、进行可视化接口设计(接口开发)、接口自动化黑盒测试(接口测试)。
|
||||
|
||||
接口权限:
|
||||
为开发者角色分配接口权限:
|
||||

|
||||
|
||||
创建接口授权规则:
|
||||

|
||||
|
||||
接口设计:
|
||||
可以在线生成接口代码、保存接口代码,还可以创建数据库表,生成对应的CURD通用数据接口。
|
||||

|
||||
|
||||
接口测试:
|
||||

|
||||
|
||||
## 素材库
|
||||
对上传的图片、文档进行管理:
|
||||

|
||||
|
||||
## 配置管理
|
||||
动态配置:
|
||||

|
||||
|
||||
## 计划任务
|
||||
定时计划任务,需要添加crontab配置,启动后台任务。
|
||||

|
||||
|
||||
通过crontab -e,添加以下计划任务:
|
||||
```
|
||||
# PhalApi Pro 计划任务
|
||||
*/1 * * * * php /path/to/phalapi-pro/bin/run_task.php > /dev/null
|
||||
```
|
||||
|
||||
## 数据库管理
|
||||
可以统计数据库容量,可视化直观的统计。
|
||||

|
||||
|
||||
还可以查看实时数据库进程,方便知道当前有哪些查询和操作。
|
||||

|
||||
|
||||
## 统计
|
||||
|
||||
接口统计:
|
||||

|
||||
|
||||
注册统计和登录统计:
|
||||

|
||||
|
||||
## 管理后台权限分配
|
||||
|
||||
点击【权限】-【管理后台权限分配】,可针对管理后台的功能操作,向管理员进行权限分配。
|
||||
|
||||

|
||||
|
||||
> 温馨提示:只有超级管理员,才有权限进行权限分配。
|
||||
|
||||
添加新操作,如果有新增的菜单,可添加新操作,然后再进行权限分配。
|
||||
|
||||

|
||||
|
||||
其中,URI链接为管理后台的页面路径,不需要域名,不需要```/admin/```,对应页面后面的路径。
|
||||
|
||||
针对管理员角色分配管理后台菜单操作权限:
|
||||
|
||||

|
||||
|
||||
> 温馨提示:超级管理员拥有全部管理后台的权限,无须分配。
|
||||
|
||||
也可以针对个别的账号ID分配管理后台菜单权限:
|
||||
|
||||

|
||||
|
||||
## 开放平台权限分配
|
||||
|
||||
可以针对开放平台操作,向开发者进行权限分配。
|
||||
|
||||
> 温馨提示:只有超级管理员,才有权限进行权限分配。
|
||||
|
||||
添加新操作,如果有新增的菜单,可添加新操作,然后再进行权限分配。
|
||||
|
||||

|
||||
|
||||
|
||||
针对开发者角色分配开放平台的菜单操作权限:
|
||||
|
||||

|
||||
|
||||
> 温馨提示:管理员(包括普通管理员和超级管理员,以及新增的自定义管理员)拥有全部开放平台的权限,无须分配。
|
||||
|
||||
也可以针对个别开发者账号ID,单独分配开放平台的操作权限。
|
||||
|
||||

|
||||
|
||||
|
||||
## 英文版
|
||||
你可以切换语言到英文版,也可以添加其他翻译语言。
|
||||

|
||||
|
||||
|
||||
74
public/wiki/aliyun.md
Normal file
@@ -0,0 +1,74 @@
|
||||
# 阿里云短信
|
||||
|
||||
## 配置
|
||||
修改./config/app.php文件,配置自己的阿里云短信服务的配置:
|
||||
```php
|
||||
/**
|
||||
* 阿里云配置
|
||||
*/
|
||||
'aliYun' => array(
|
||||
'accessKeyId' => '', // TODO: 修改成你的key
|
||||
'accessSecret' => '', // TODO: 修改成你的secret
|
||||
)
|
||||
```
|
||||
|
||||
## 使用接口
|
||||
|
||||
+ 阿里云发送短信接口:App.Sms.AliyunSendSms
|
||||
+ 阿里云查看短信发送记录和发送状态:App.Sms.AliyunQuerySendDetails
|
||||
+ 校验短信验证码: App.Sms.CheckSmsCaptcha
|
||||
|
||||
## 示例效果
|
||||
|
||||
1、调用阿里云的SendSms发送短信,传递号码,短信签名名称,短信模板ID和短信模板变量对应的实际值,JSON格式。例如返回:
|
||||
```
|
||||
curl 'http://你的接口域名/api/app.php?s=App.Sms.AliyunSendSms&PhoneNumbers=号码&SignName=短信签名名称
|
||||
&TemplateCode=短信模板ID&TemplateParam={"code":"1111"}'
|
||||
{
|
||||
"ret": 200,
|
||||
"data": {
|
||||
"Message": "OK",
|
||||
"RequestId": "4674148E-F8CE-4CBA-AF26-D3F13B7F5162",
|
||||
"BizId": "734404282527581474^0",
|
||||
"Code": "OK"
|
||||
},
|
||||
"msg": ""
|
||||
}
|
||||
```
|
||||

|
||||
|
||||
2. 阿里云查看短信发送记录和发送状态
|
||||
```
|
||||
curl 'http://你的接口域名/api/app.php?s=App.Sms.AliyunQuerySendDetails&PhoneNumber=号码&SendDate=日期'
|
||||
{
|
||||
"ret": 200,
|
||||
"data": {
|
||||
"TotalCount": 1,
|
||||
"Message": "OK",
|
||||
"RequestId": "FC95F662-4FC1-4692-ADEE-2B1AD4BBB90F",
|
||||
"SmsSendDetailDTOs": {
|
||||
"SmsSendDetailDTO": [
|
||||
{
|
||||
"SendDate": "2020-02-24 14:59:41",
|
||||
"SendStatus": 3,
|
||||
"ReceiveDate": "2020-02-24 14:59:48",
|
||||
"ErrCode": "DELIVERED",
|
||||
"TemplateCode": "SMS_177253065",
|
||||
"Content": "【YesApi】您的验证码1234,该验证码15分钟内有效,请勿泄漏于他人!",
|
||||
"PhoneNum": "15914283683"
|
||||
}
|
||||
]
|
||||
},
|
||||
"Code": "OK"
|
||||
},
|
||||
"msg": ""
|
||||
}
|
||||
```
|
||||
|
||||
3. 检验短信验证码
|
||||
+ 检验的接口保存在pp_sms_cache表中,验证码将在15分钟内有效,可尝试5次,成功校验的失败。
|
||||
+ 检验结果:0成功,1验证码不存在或已过期,2验证码已失效(失败次数过多),3验证码错误
|
||||
|
||||
|
||||
|
||||
|
||||
47
public/wiki/api.md
Normal file
@@ -0,0 +1,47 @@
|
||||
# API接口系统使用手册
|
||||
|
||||
API接口是最为重要的服务,是可以提供给客户端应用、第三方系统,以及内部项目使用的接口。
|
||||
|
||||
这里简单介绍下如何查看和使用在线接口文档。
|
||||
|
||||
## 访问在线接口文档
|
||||
|
||||
安装好后,进入首页,通过点击顶部的【开放接口】,可以访问接口文档。
|
||||
|
||||

|
||||
|
||||
如果管理员有设置密码,则需要输入文档查看密码方能查看接口。
|
||||

|
||||
|
||||
## 在线接口文档列表
|
||||
|
||||
在线接口文档列表,会根据PHP接口代码自动生成,无须人工编辑和维护。
|
||||
|
||||
为了避免内部接口暴露,游客只能看到开放部分的API接口。如下:
|
||||

|
||||
|
||||
管理员登录管理后台后,可以查看全部的API接口,包括内部接口。如下:
|
||||

|
||||
|
||||
## 接口文档详情页
|
||||
|
||||
点击进入,可查看接口文档详情页。如下:
|
||||

|
||||
|
||||
填写接口参数后,可以进行在线接口测试:
|
||||

|
||||
|
||||
|
||||
## 展开查看全部接口
|
||||
点击【切换到展开版】,可以查看全部的接口。
|
||||

|
||||
|
||||
## 搜索接口
|
||||
|
||||
可以进行接口的搜索,模糊匹配接口名称和接口描述,以及接口英文名称。
|
||||

|
||||
|
||||
## 英文版
|
||||
你可以切换语言到英文版,也可以添加其他翻译语言。
|
||||

|
||||
|
||||
10
public/wiki/app-admin-portal-api.md
Normal file
@@ -0,0 +1,10 @@
|
||||
# 前台接口、运营平台接口和后台接口
|
||||
|
||||
## App前台接口
|
||||
App前台接口,是提供给外部的客户端使用的,例如小程序、App、H5等客户端。
|
||||
|
||||
## Portal运营平台接口
|
||||
Portal运营平台接口,是提供给运营平台使用的接口。
|
||||
|
||||
## Admin后台接口
|
||||
Admin后台接口,是提供给管理后台使用的接口。
|
||||
85
public/wiki/app-usage.md
Normal file
@@ -0,0 +1,85 @@
|
||||
# 开发者App客户端使用手册(单独购买)
|
||||
|
||||
> 接口大师开发者App和源代码,如有需要,请单独购买。
|
||||
|
||||
## App简介
|
||||
|
||||
接口大师的开发者App客户端,是和接口大师配套的终端,可以提供给您的开发者使用,让开发者通过移动App也能使用开放平台的功能。采用Flutter跨平台开发框架实现,同时支持Android/IOS两端。
|
||||
|
||||
目前版本,实现的主要功能有:
|
||||
|
||||
+ 首页
|
||||
- 工单
|
||||
- 我的应用
|
||||
- 我的订单
|
||||
- 我的套餐
|
||||
- 接口总数
|
||||
- 接口流量统计
|
||||
|
||||
+ 商城
|
||||
- 我的应用
|
||||
- 接口列表及权限
|
||||
|
||||
+ 应用
|
||||
- 我的应用
|
||||
- 编辑申请应用
|
||||
- 创建新应用
|
||||
|
||||
+ 我的
|
||||
- 我的订单
|
||||
- 我的套餐
|
||||
- 编辑资料
|
||||
- 退出登录
|
||||
|
||||
+ 国际化
|
||||
- 支持语言切换
|
||||
|
||||
|
||||
|
||||
## 安装
|
||||
|
||||
编译打包后,可以进行安装。
|
||||
|
||||
> 演示版Apk安装包下载链接:[http://pro.yesapi.cn/ApiMaster.apk](http://pro.yesapi.cn/ApiMaster.apk)
|
||||
> 演示账号和密码,请联系我们获取。
|
||||
|
||||
下面是安卓版的安装效果:
|
||||
|
||||

|
||||
|
||||
## 登录和注册
|
||||
|
||||
登录界面,登录账号和密码,请使用开发者的账号和密码。
|
||||
|
||||

|
||||
|
||||
|
||||
## 首页
|
||||
|
||||
首页可以展示接口流量统计,以及工单、我的应用、我的订单、我的套餐、接口总数等统计数据,以及访问入口。
|
||||
|
||||

|
||||
|
||||
## 商城
|
||||
|
||||
可以查看我的应用app_key 和 应用密钥,以及切换查看每个应用的接口列表和接口权限。
|
||||
|
||||

|
||||
|
||||
## 应用
|
||||
|
||||
开发者可以创建申请自己的新应用,可以查看已经申请或申请通过的应用,对未通过的应用进行修改重新申请。
|
||||
|
||||

|
||||
|
||||
## 我的
|
||||
|
||||
可以查看我的订单、我的套餐、修改个人资料、退出登录等。
|
||||
|
||||

|
||||
|
||||
## 国际化翻译
|
||||
|
||||
开发者App客户端也同样支持国际化翻译,可以进行中、英语言切换。
|
||||
|
||||

|
||||
147
public/wiki/changelog.md
Normal file
@@ -0,0 +1,147 @@
|
||||
# 版本更新日记
|
||||
|
||||
## PhalApi专业版 3.8.0(2021-07)
|
||||
+ 1、开放平台,支持微信扫码授权登录和快速注册,并提供第三方登录开发文档
|
||||
+ 2、商城,支持组合套餐,可以在后台配置组合套餐,前台进行展示、下单和购买
|
||||
+ 3、5合1首页UI优化改版
|
||||
+ 4、开放平台注册页优化升级改版
|
||||
+ 5、开放平台,订单和支付优化,缩短支付成功的轮询时间和调整支付状态提示语
|
||||
+ 6、技术文档新增:《2.5 接口商城》、《3.9 新增接口目录教程》、《4.0 第三方登录接入流程》、《5.1 开发者App客户端使用手册》、《5.2 接口大师开发者App源码说明》、《6.1 PHP接口自动化测试》
|
||||
+ 7、支持单独购买:【自动化单元测试包-PHPUnit】、【开发者App源代码-Flutter】
|
||||
|
||||
## PhalApi专业版 3.7.4(2021-07)
|
||||
+ 1、管理后台交互优化,重新打包编译
|
||||
|
||||
## PhalApi专业版 3.7.3(2021-06)
|
||||
+ 1、阿里云OSS优化,支持自定义域名,和指定目录前缀
|
||||
+ 2、一些客户反馈的问题Bugfixed
|
||||
|
||||
## PhalApi专业版 3.7.0 (2021-05)
|
||||
+ 1、Admin账号列表搜索优化
|
||||
+ 2、Admin支持模拟登录,以及用户轨迹查看
|
||||
+ 3、Admin首页添加常用的统计报表,增强运营能力
|
||||
+ 4、Admin新增应用统计页面
|
||||
+ 5、Platform开放平台调整,支持模拟登录
|
||||
|
||||

|
||||
|
||||
## PhalApi专业版 3.6.1 (2021-04)
|
||||
+ 1、修改接口文档权限显示问题
|
||||
|
||||
## PhalApi专业版 3.6.0 (2021-03)
|
||||
+ 1、一些已知bugfixed
|
||||
|
||||
## PhalApi专业版 3.5.0 (2021-02)
|
||||
+ 1、添加开放平台首页,包含数据统计及仪表盘
|
||||
+ 2、添加工单模块,方便处理开发者/客户提交的问题
|
||||
+ 3、一些Bugfixed
|
||||
|
||||
## PhalApi专业版 3.4.2(2021-01)
|
||||
+ 1、一些Bugfixed
|
||||
|
||||
## PhalApi专业版(含商城) 3.4.1(2020-12)
|
||||
+ 1、商城套餐和接口流量套餐
|
||||
+ 2、前台下单购买和在线支付
|
||||
|
||||
## PhalApi专业版 2.5.0 (2021-03)
|
||||
+ 1、一些已知bugfixed
|
||||
|
||||
## PhalApi专业版 2.4.0 (2020-09-14号)
|
||||
+ 1、增加开放接口的IP白名单限制,同时支持全局和单个应用的IP白名单配置
|
||||
+ 2、针对每日接口请求的次数限制,添加会员角色全局配置```app.project.member_level_map.{LEVEL}.app_limit```,优先级低于具体应用的配置
|
||||
+ 3、一些bugfixed
|
||||
|
||||
## PhalApi专业版 2.3.1(2020-07-15)
|
||||
+ 1、集成小白接口
|
||||
+ 2、补充redis更多原生接口
|
||||
+ 3、一些bugfixed
|
||||
+ 4、管理后台Admin全面翻译
|
||||
|
||||
## PhalApi专业版 2.3.0(2020-07-14)
|
||||
+ 1、新增微信快捷联登接口,支持微信公众号快捷登录和微信小程序快捷登录
|
||||
+ 2、修复可视化接口设计需要点击两次才能保存到PHP文件
|
||||
+ 3、文件上传支持上传到阿里云OSS对象存储
|
||||
+ 4、客户端的接口参数支持加密传输,即encrypt_data参数,以及./config/phalapi_pro_rsa.*配置文件
|
||||
+ 5、优化在线接口文档详情页加载速度,将代码高亮的js和css文件本地化
|
||||
+ 6、添加开放接口:拼音、IP地址、条形码、二维码、文件上传等常用接口
|
||||
+ 7、增加Redis服务模块接口
|
||||
+ 8、一些已知的其他bugfixed
|
||||
|
||||
## PhalApi专业版 2.2.0 (2020-06-01)
|
||||
+ 1、管理后台登录页面,添加验证码,支持开关配置
|
||||
+ 2、开放平台登录和注册页面,添加验证码,支持开关配置
|
||||
+ 3、管理后台添加运动管理后台以及开放平台的操作权限控制
|
||||
+ 4、管理后台新增权限控制
|
||||
+ 5、开放平台新增权限控制
|
||||
|
||||
## PhalApi专业版 2.1.1(2020-05-06)
|
||||
|
||||
+ 1、bugfixed:管理后台接口统计刷新后数据叠加问题
|
||||
+ 2、bugfixed:开放平台登录页标题显示undefined问题
|
||||
+ 3、bugfixed:PHP的```$isStopWhenNoApp```变量未定义
|
||||
|
||||
## PhalApi专业版 2.1(2020-05-02)
|
||||
|
||||
+ 1、添加API命名空间配置```app.project.open_api_namespaces```,支持多个开放命名空间
|
||||
+ 2、UI升级改版,包括但不限于:管理后台、开放平台、在线接口文档
|
||||
+ 3、i18n国际化翻译支持,包括但不限于:管理后台、开放平台、在线接口文档、API接口
|
||||
+ 4、修复开放平台登录页面首次无法显示注册入口的问题
|
||||
+ 5、bugfixed:上传图片路径支持端口
|
||||
+ 6、bugfixed:分配接口权限时无法选择开发者账号类型
|
||||
+ 7、bugfixed:修复接口请求响应时间为0的bug
|
||||
+ 8、提供第二套接口验签方案,更自由的方案选择和切换
|
||||
|
||||
## PhalApi专业版 2.0 全新版本(2020-04-15)
|
||||
|
||||
全新的Pro 2.0版本,搭建云平台的最佳选择。
|
||||
|
||||
+ 1、修改底层架构,向开放平台方向调整
|
||||
+ 2、增加Platform开放平台项目,为开发者提供使用的系统
|
||||
+ 3、API接口系统大调整,分为四大系列:开放接口、平台接口、后台接口、任务接口
|
||||
+ 4、Admin管理后台大升级,全面支持开放平台、开发者账号管理、应用审核、接口权限分配
|
||||
+ 5、移除开源版运营平台,专注商业平台的研发
|
||||
+ 6、重写技术文档
|
||||
+ 7、增加首页
|
||||
+ 8、增加数据库管理
|
||||
+ 9、修复1.x版本一些已知bug
|
||||
|
||||
## PhalApi专业版 1.40 (2020-04-05)
|
||||
|
||||
+ 1、同步升级开源PhalApi 2.13版本
|
||||
+ 2、可视化接口设计,支持生成数据接口API代码以及创建MySQL数据库表
|
||||
|
||||
## PhalApi专业版 1.32(2020-03-04)
|
||||
|
||||
+ 1、同步升级开源PhalApi 2.12.2
|
||||
|
||||
## PhalApi专业版 1.30(2020-03-04)
|
||||
|
||||
+ 1、添加接口可视化设计模块
|
||||
+ 2、添加接口测试模块,一体化测试体系
|
||||
+ 3、添加虎皮椒支付
|
||||
+ 4、在线接口文档的静态资源从不稳定的CDN调整为本地
|
||||
+ 5、上传目录路径支持可配置
|
||||
+ 6、添加计划任务模块
|
||||
+ 7、修复一些已知的bug
|
||||
|
||||
## PhalApi专业版 1.20(2020-01-20)
|
||||
主要更新如下:
|
||||
|
||||
+ 管理后台:添加应用管理、用户管理,配置管理,技术专区,支持分页查询和模糊搜索
|
||||
+ PhalApi专业版接口进行内部优化和升级,并在Model基类添加获取分页列表的方法getList()
|
||||
+ PhalApi Pro添加配置、日志查询等新接口
|
||||
+ 全面兼容PHP 5.3和MySQL 5.5版本
|
||||
+ 页面优化
|
||||
+ 一些已知的bug fixed及优化
|
||||
|
||||
## PhalApi专业版 1.10(2020-01-10)
|
||||
|
||||
PhalApi专业版第一个正式版本,致力通过智慧编程,让接口开发更有趣!当前专业版为4合1,拥有比开源版本更强大且实用的贴心设计和功能。
|
||||
|
||||
+ 基于PhalApi,研发并上线接口系统(分前台接口和后台接口两大系列)
|
||||
+ 基于iView-Admin,研发并上线管理后台
|
||||
+ 基于docsify和markdown,编写完整开发手册
|
||||
+ 采用MySQL数据库,设计并初始化数据库
|
||||
+ 可视化安装向导
|
||||
+ 精美在线接口文档,支持查看密码设置
|
||||
|
||||
10
public/wiki/contact.md
Normal file
@@ -0,0 +1,10 @@
|
||||
# 联系我们
|
||||
|
||||
QQ(dogstar):376741929
|
||||
邮箱:huangchanzong@yesapi.cn
|
||||
官网:http://pro.yesapi.cn/
|
||||
|
||||
欢迎扫码联系:
|
||||
|
||||

|
||||
|
||||
11
public/wiki/database_tables.md
Normal file
@@ -0,0 +1,11 @@
|
||||
# phalapi_pro数据库表结构
|
||||
|
||||
|
||||
## xxx表结构
|
||||
字段|类型|默认值|是否允许为NULL|索引|注释
|
||||
---|---|---|---|---|---
|
||||
id|int(11)||不为NULL|PRI|
|
||||
name|varchar(100)||不为NULL|UNI|名字
|
||||
add_time|datetime|CURRENT_TIMESTAMP|允许NULL||添加时间
|
||||
|
||||
> 温馨提示:为了保护您的数据库表结构设计,这里仅显示一个示例。我们已经为您生成好完整的数据库表结构设计,如若需要对外显示,可将./data/database_tables.md文件覆盖当前md文件。
|
||||
1
public/wiki/docsify.min.js
vendored
Normal file
88
public/wiki/guide.md
Normal file
@@ -0,0 +1,88 @@
|
||||
# 开发手册编写规范
|
||||
|
||||
此开发文档,目标人群是初次接触PhalApi框架的开发同学,重点在于讲解如何使用PhalApi进行快速开发。文档应该简短明了,并辅以示例。
|
||||
|
||||
## 文档编写规范
|
||||
|
||||
为了能给开发同学提供简明、清晰、实用的技术开发文档,特此约定:
|
||||
|
||||
### 1、文件名
|
||||
|
||||
文档文件名字使用英文完整单词,分割符号为中横线。**不需要**编号,且**不建议**使用中文,避免难看且漫长的URL。例如:
|
||||
```bash
|
||||
# 错误的文件名
|
||||
[1.1]-下载与安装.md
|
||||
|
||||
# 推荐的文件名
|
||||
setup.md
|
||||
```
|
||||
|
||||
### 2、文档模板格式
|
||||
|
||||
============================================
|
||||
|
||||
# 一级标题,章节标题
|
||||
## 二级标题,小节标题
|
||||
### 三级标题,各内容列表
|
||||
#### 四级标题,尽量避免使用
|
||||
|
||||
> 温馨提示:一些注意事项,技巧,参与链接。
|
||||
|
||||
对于关键字可使用**加粗方式**进行强调。
|
||||
|
||||
============================================
|
||||
|
||||
### 3、代码风格
|
||||
|
||||
对于代码片段,应注明代码对应的开发语言,以便可以进行代码高亮 。例如:
|
||||
```
|
||||
```php
|
||||
<?php
|
||||
// 以下是php代码片段……
|
||||
```
|
||||
|
||||
示例:
|
||||
```php
|
||||
<?php
|
||||
$api = new PhalApi();
|
||||
$rs = $api->response();
|
||||
$rs->output();
|
||||
```
|
||||
|
||||
如果需要说明代码文件路径,可以在首行注释说明,如:
|
||||
```php
|
||||
<?php
|
||||
// 入口文件 ./Public/index.php
|
||||
$api = new PhalApi();
|
||||
$rs = $api->response();
|
||||
$rs->output();
|
||||
```
|
||||
|
||||
### 4、图片文件
|
||||
|
||||
关于图片,请统一存放在CDN,以便随处可访问并加快浏览速度。请使用[自助图片上传到七牛CDN](http://demo.phalapi.net/qiniu_upload.html)。
|
||||
|
||||
### 5、尽量使用短句
|
||||
|
||||
错误的写法:
|
||||
```
|
||||
这是一句非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常长的句子。
|
||||
```
|
||||
|
||||
推荐的写法:
|
||||
```
|
||||
这是一句非常长的句子,因为它真的非常非常长。
|
||||
```
|
||||
|
||||
### 6、正文内容的标点符号,统一使用全角中文,非英文半角
|
||||
|
||||
错误的写法:
|
||||
```
|
||||
这里最后是一个英文半角的逗号,和一个英文半角的感叹号!
|
||||
```
|
||||
|
||||
推荐的写法:
|
||||
```
|
||||
这里最后是一个中文全角的逗号,和一个中文全角的感叹号!
|
||||
```
|
||||
|
||||
6
public/wiki/hide-2x.md
Normal file
@@ -0,0 +1,6 @@
|
||||
# 购买后可查看此内部技术文档
|
||||
|
||||
此文档属于内部文档。如果需要提前了解技术文档的部分内容,可联系我们售前咨询获取。
|
||||
|
||||
> 温馨提示:付费购买PhalApi Pro 专业版后,可在你的本地目录```./public/wiki```或安装后通过浏览器查看全部完整的技术文档。
|
||||
|
||||
24
public/wiki/how-to-wiki.md
Normal file
@@ -0,0 +1,24 @@
|
||||
# 如何编写开发手册
|
||||
|
||||
开发手册基于docsify,采用简洁的markdown格式编写。
|
||||
|
||||
其目录结构如下:
|
||||
|
||||
+ 开发手册入口文件:```./public/wiki/index.html```
|
||||
+ 封面文件:```./public/wiki/_coverpage.md```
|
||||
+ 顶部菜单:```./public/wiki/_navbar.md```
|
||||
+ 左侧菜单配置:```./public/wiki/_sidebar.md```
|
||||
+ 手册首页:```./public/wiki/README.md```
|
||||
|
||||
更多请继续阅读下一节:[文档编写规范](/guide.md)。
|
||||
|
||||
|
||||
如果不希望外网可以访问此开发手册,可以在正式环境禁止访问wiki目录,参考Nginx配置:
|
||||
```
|
||||
# 禁止访问开发手册
|
||||
location ^~ /wiki/ {
|
||||
deny all;
|
||||
}
|
||||
```
|
||||
|
||||
然后改为访问内网测试环境。
|
||||
BIN
public/wiki/img1.png
Normal file
|
After Width: | Height: | Size: 344 KiB |
BIN
public/wiki/img2.png
Normal file
|
After Width: | Height: | Size: 104 KiB |
BIN
public/wiki/img3.png
Normal file
|
After Width: | Height: | Size: 197 KiB |
BIN
public/wiki/img4.png
Normal file
|
After Width: | Height: | Size: 266 KiB |
BIN
public/wiki/img5.png
Normal file
|
After Width: | Height: | Size: 226 KiB |
BIN
public/wiki/img6.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
67
public/wiki/index.html
Normal file
@@ -0,0 +1,67 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>PhalApi Pro 专业版技术文档</title>
|
||||
<meta name="Author" content="PhalApi,ecitlm,dogstar">
|
||||
<meta name="renderer" content="webkit" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
|
||||
<meta name="description" content="PhalApi Pro 专业版技术文档">
|
||||
<meta name="keywords" content="PhalApi Pro 专业版技术文档">
|
||||
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
|
||||
<link rel="icon" href="/favicon.ico" type="image/x-icon" />
|
||||
<link rel="stylesheet" href="/static/vue.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="app">文档正在拼命加载中...</div>
|
||||
</body>
|
||||
<script>
|
||||
window.$docsify = {
|
||||
themeColor: '#FBAB1B',
|
||||
name: 'PhalApi Pro 2.0 技术文档',
|
||||
repo: '',
|
||||
auto2top: true,
|
||||
coverpage: true,
|
||||
executeScript: true,
|
||||
loadSidebar: true,
|
||||
loadNavbar: true,
|
||||
mergeNavbar: true,
|
||||
maxLevel: 4,
|
||||
subMaxLevel: 2,
|
||||
|
||||
formatUpdated: '{MM}/{DD} {HH}:{mm}',
|
||||
plugins: [
|
||||
function (hook, vm) {
|
||||
hook.beforeEach(function (html) {
|
||||
return "\n" + "\n\n" + html
|
||||
+ '\n----\n'
|
||||
+ ' © 2020 - 2021 <a href="http://pro.yesapi.cn/" target="_blank">PhalApi Pro</a> All Rights Reserved. 未经授权,禁止传播、禁用用于商业用途。'
|
||||
})
|
||||
}
|
||||
],
|
||||
|
||||
search: {
|
||||
maxAge: 86400000, // 过期时间,单位毫秒,默认一天
|
||||
paths: 'auto',
|
||||
placeholder: '搜索',
|
||||
noData: '没有记录!'
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- <script src="https://cdn.bootcss.com/docsify/4.6.10/docsify.min.js"></script> -->
|
||||
<!-- <script src="//unpkg.com/docsify@4.6.10/lib/docsify.min.js"></script> -->
|
||||
<script src="./docsify.min.js"></script>
|
||||
<script src="/static/prism-bash.min.js"></script>
|
||||
<script src="/static/prism-php.min.js"></script>
|
||||
<script src="/static/prism-markdown.min.js"></script>
|
||||
<script src="/static/prism-nginx.min.js"></script>
|
||||
<!-- <script src="//unpkg.com/docsify/lib/plugins/search.min.js"></script> -->
|
||||
<script src="./search.min.js"></script>
|
||||
|
||||
|
||||
</html>
|
||||
322
public/wiki/install.md
Normal file
@@ -0,0 +1,322 @@
|
||||
# PhalApi专业版安装教程
|
||||
|
||||
## 运行环境
|
||||
PhalApi专业版的运行环境要求如下:
|
||||
|
||||
+ 操作系统:Windows/Linux/Mac/Ubuntu/CentOS等
|
||||
+ 开发语言:PHP 5.3.3 及以上版本,推荐使用PHP 7
|
||||
+ 数据库:MySQL 5.5 及以上版本
|
||||
+ Web服务器:Nginx/Apache
|
||||
+ 正式服务器配置最低配置:CPU 1核 / 内存 2G / 硬盘空间40G / 带宽1M
|
||||
|
||||
> 官方推荐使用:CentOS 7 + PHP 7 + MySQL 5.6 + Nginx
|
||||
|
||||
## 安装视频
|
||||
|
||||
[点击查看安装视频(mp4格式)](http://cdn7.phalapi.net/phalapi-pro-install.mp4)
|
||||
|
||||
如果浏览器无法播放,请换一个浏览器,或下载mp4到本地播放。或参考以下安装说明。
|
||||
|
||||
安装步骤如下。
|
||||
|
||||
## 第1步、上传并解压
|
||||
|
||||
第1步、[购买授权](http://pro.yesapi.cn/index.php?r=site%2Forder)并获取源项目源代码后,将项目源代码包上传到服务器,并进行解压。假设解压目录为:/www/phalapi-pro。
|
||||
|
||||
### 专业版源代码目录
|
||||
以专业版2.0为例,源代码压缩包解压后有:
|
||||

|
||||
|
||||
其中,管理后台的源代码,基于vue,前后端分离。
|
||||

|
||||
|
||||
另外,开放平台的源代码,也是基于vue,前后端分离。
|
||||

|
||||
|
||||
> 温馨提示:标准版不含pro_admin和pro_platform前端源代码,旗舰版提供全部无加密源代码。
|
||||
|
||||
## 第2步、配置Nginx/Apache/xampp/宝塔
|
||||
|
||||
第2步、进行Web服务器的配置。
|
||||
|
||||
### Nginx配置
|
||||
如果使用的是Nginx,参考以下Nginx配置,配置好重启Nginx。
|
||||
```
|
||||
server
|
||||
{
|
||||
listen 80;
|
||||
server_name open.phalapi.net;
|
||||
|
||||
index index.html index.php;
|
||||
root /www/phalapi-pro/public;
|
||||
|
||||
location ~ .*\.(php|php5)?$
|
||||
{
|
||||
# fastcgi_pass 127.0.0.1:9000;
|
||||
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
|
||||
fastcgi_index index.php;
|
||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||
include fastcgi_params;
|
||||
}
|
||||
|
||||
|
||||
# 管理后台
|
||||
if (!-e $request_filename) {
|
||||
rewrite ^/admin/(.*) /admin/index.html;
|
||||
}
|
||||
# 开放平台
|
||||
if (!-e $request_filename) {
|
||||
rewrite ^/platform/(.*) /platform/index.html;
|
||||
}
|
||||
# 静态资源缓存
|
||||
location ~.*\.(js|css|html|png|jpg)$
|
||||
{
|
||||
expires 3d;
|
||||
}
|
||||
# 限制上传的PHP文件,都只能是下载,而非执行
|
||||
location ~* /uploads/.*\.(php|php5)?$
|
||||
{
|
||||
}
|
||||
|
||||
access_log /var/log/nginx/open.phalapi.net.access.log;
|
||||
error_log /var/log/nginx/open.phalapi.net.error.log;
|
||||
}
|
||||
```
|
||||
|
||||
> 温馨提示:请把open.phalapi.net换成你自己的域名。
|
||||
|
||||
### Apache配置
|
||||
如果使用的是Apache,参考以下配置。目录结构:
|
||||
|
||||
```
|
||||
htdocs
|
||||
├── phalapi
|
||||
└── .htaccess
|
||||
```
|
||||
|
||||
.htaccess内容:
|
||||
```
|
||||
<IfModule mod_rewrite.c>
|
||||
RewriteEngine on
|
||||
RewriteBase /
|
||||
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
|
||||
RewriteCond %{REQUEST_URI} !^/phalapi-pro/public/
|
||||
RewriteCond ^/admin/(.*) /phalapi-pro/public/admin/index.html;
|
||||
RewriteCond ^/platform/(.*) /phalapi-pro/public/platform/index.html;
|
||||
RewriteRule ^(.*)$ /phalapi-pro/public/$1
|
||||
RewriteRule ^(/)?$ index.php [L]
|
||||
</IfModule>
|
||||
```
|
||||
配置好后重启Apache。
|
||||
|
||||
### xampp配置
|
||||
如果本地使用的是xampp集成环境,可参考以下安装教程。
|
||||
> 假设xampp安装的目录是:D:\xampp。
|
||||
|
||||
首先,把项目压缩包复制到D:\xampp\htdocs,然后解压并把目录名称改为:phalapi-pro(目录名称可自行修改)。
|
||||

|
||||
|
||||
配置域名,打开D:\xampp\apache\conf\extra\httpd-vhosts.conf配置文件,在最后添加:
|
||||
```
|
||||
<VirtualHost *:80>
|
||||
DocumentRoot "D:\xampp\htdocs\phalapi-pro\public"
|
||||
ServerName open.phalapi.net
|
||||
ErrorLog "logs/open.phalapi.net-error.log"
|
||||
CustomLog "logs/open.phalapi.net-access.log" common
|
||||
</VirtualHost>
|
||||
```
|
||||
|
||||
> 域名open.phalapi.net,可自行修改。
|
||||
|
||||
为Admin管理后台配置Rewrite规则,
|
||||
修改..\xampp\apache\conf\httpd.conf ,在Apahce的配置文件httpd.conf中把
|
||||
```
|
||||
#LoadModule rewrite_module modules/mod_rewrite.so
|
||||
```
|
||||
前的#去掉,修改为
|
||||
```
|
||||
LoadModule rewrite_module modules/mod_rewrite.so
|
||||
|
||||
<Directory />
|
||||
Options Indexes FollowSymLinks MultiViews
|
||||
AllowOverride All
|
||||
Order allow,deny
|
||||
allow from all
|
||||
</Directory>
|
||||
|
||||
DocumentRoot "D:\xampp\htdocs\phalapi-pro\public"
|
||||
<Directory "D:\xampp\htdocs\phalapi-pro\public">
|
||||
Options Indexes FollowSymLinks MultiViews
|
||||
AllowOverride All
|
||||
Order allow,deny
|
||||
allow from all
|
||||
|
||||
RewriteEngine on
|
||||
RewriteBase /
|
||||
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
|
||||
RewriteCond %{REQUEST_URI} !^/phalapi-pro/public/
|
||||
RewriteCond ^/admin/(.*) /phalapi-pro/public/admin/index.html;
|
||||
RewriteCond ^/platform/(.*) /phalapi-pro/public/platform/index.html;
|
||||
RewriteRule ^(.*)$ /phalapi-pro/public/$1
|
||||
RewriteRule ^(/)?$ index.php [L]
|
||||
</Directory>
|
||||
```
|
||||
|
||||
|
||||
然后,配置本地host,打开C:\Windows\System32\drivers\etc\hosts文件,在最后添加:
|
||||
```
|
||||
127.0.0.1 open.phalapi.net
|
||||
```
|
||||
|
||||
> 如果提示hosts文件权限不足,可以使用Switch Hosts软件进行修改,或者参考[本地XAMPP虚拟域名配置(配合路由)](https://blog.csdn.net/qq_36652619/article/details/80295226)添加写入权限。
|
||||
|
||||
最后,启动xampp里面的pache和MySQL,在浏览器访问安装向导:
|
||||
http://open.phalapi.net/install/
|
||||
|
||||
|
||||
> xampp默认数据库账号是root,密码为空。
|
||||
|
||||
### 宝塔配置
|
||||
|
||||
进入宝塔后,点击:【网站】-【添加站点】:
|
||||

|
||||
|
||||
在域名中输入自己的域名,例如:open.phalapi.net,然后点【提交】。
|
||||

|
||||
|
||||
然后将项目压缩包(如phalapi-pro-1.0.zip)上传并解压到刚创建站点的根目录,例如:/www/wwwroot/open.phalapi.net。
|
||||
```
|
||||
# cd /www/wwwroot/open.phalapi.net # 进入网站根目录
|
||||
# unzip ./phalapi-pro-1.0.zip # 上传后解压
|
||||
# mv ./phalapi-pro-1.0/* ./ # 把解压后的全部文件移到根目录
|
||||
```
|
||||
这时根目录的文件如下:
|
||||

|
||||
|
||||
回到宝塔,修改open.phalapi.net站点的配置,在【网站目录】-【运行目录】下拉选择public目录,点击保存。
|
||||

|
||||
|
||||
接着,在伪静态中,添加并保存:
|
||||
```
|
||||
# 管理后台
|
||||
if (!-e $request_filename) {
|
||||
rewrite ^/admin/(.*) /admin/index.html;
|
||||
}
|
||||
# 开放平台
|
||||
if (!-e $request_filename) {
|
||||
rewrite ^/platform/(.*) /platform/index.html;
|
||||
}
|
||||
```
|
||||
如图:
|
||||

|
||||
|
||||
绑定域名后,即可访问,进入安装向导。
|
||||
|
||||
补充,如果宝塔使用的是Apache,可参考以下配置:
|
||||
```
|
||||
<IfModule mod_rewrite.c>
|
||||
RewriteEngine on
|
||||
RewriteBase /
|
||||
|
||||
Rewritecond %{REQUEST_FILENAME} !-f
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
|
||||
RewriteCond %{REQUEST_URI} ! ^/ phalapi-pro/ public/
|
||||
Rewritecond ^ / admin/ ( .*) / phalapi-pro/public/admin/index.html;
|
||||
Rewritecond ^/platform/ ( .*) /phalapi-pro/public/platform/index.html;
|
||||
RewriteRule ^( .*)$ / phalapi-pro/public/$1
|
||||
RewriteRule ^( / )?$ index.php[L]
|
||||
</工fModule>
|
||||
|
||||
```
|
||||
|
||||
### IIS参考配置
|
||||
|
||||
为管理后台添加Rewirte规则,以便管理后台能正常访问。
|
||||
```
|
||||
<rewrite>
|
||||
<rules>
|
||||
<rule name="Imported Rule phalapi-pro-admin" stopProcessing="true">
|
||||
<match url="^/admin/(.*)" />
|
||||
<conditions>
|
||||
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
|
||||
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
|
||||
</conditions>
|
||||
<action type="Rewrite" url="/admin/index.html" appendQueryString="true" />
|
||||
</rule>
|
||||
</rules>
|
||||
</rewrite>
|
||||
```
|
||||
|
||||
## 第3步、安装向导
|
||||
|
||||
> 安装地址:http://你的域名/install
|
||||
|
||||
或者打开首页:```http://你的域名/```,点击进入安装向导。
|
||||

|
||||
|
||||
第3步、在安装之前,先手动执行以下脚本添加必要的文件和目录权限。
|
||||
```
|
||||
$ ./bin/install_check.sh
|
||||
start to check ...
|
||||
check ok!
|
||||
```
|
||||
如果无法在Windows环境上执行此脚本,影响不大,可以在安装向导的引导下手动添加目录权限。
|
||||
|
||||
在浏览器访问(注意,域名需要更换成自己的域名或IP地址):
|
||||
[http://open.phalapi.net/install/](http://open.phalapi.net/install/)
|
||||
|
||||
进入安装向导后,同意安装。
|
||||

|
||||
|
||||
检测通过后,下一步。
|
||||

|
||||
|
||||
根据表单,填写数据库的相关配置,以及管理员的账号和密码。下一步。
|
||||
|
||||
> 温馨提示:重点修改你的项目名称、你的数据库连接、管理员登录密码。
|
||||
|
||||

|
||||

|
||||
|
||||
安装成功。
|
||||

|
||||
|
||||
如果安装失败,请留意错误提示信息。通常是数据库账号密码错误,或者缺少目录写入权限,此时可尝试重新安装。如果问题尚未解决,可联系我们。
|
||||
|
||||
如果重复安装,会看到以下提示:
|
||||

|
||||
|
||||
若需要重新安装,请手动删除./runtime/_install.lock文件。
|
||||
|
||||
## 第4步、计划任务配置
|
||||
通过```crontab -e```,添加以下计划任务:
|
||||
|
||||
```
|
||||
# PhalApi Pro 接口测试
|
||||
*/1 * * * * php /path/to/phalapi-pro/bin/test/run_test_sample.php > /dev/null
|
||||
|
||||
# PhalApi Pro 计划任务
|
||||
*/1 * * * * php /path/to/phalapi-pro/bin/run_task.php > /dev/null
|
||||
|
||||
# PhalApi Pro 应用统计
|
||||
10 0 * * * php /path/to/phalapi-pro/bin/admin/run_app_daily_stat.php >> /dev/null
|
||||
```
|
||||
|
||||
其中,需要把```/path/to/phalapi-pro```换成你当前的服务器路径。
|
||||
|
||||
## 第5步、安装后请记得
|
||||
|
||||
安装后,请记得把install安装程序删除,避免被重复或恶意重装。
|
||||
安装后,请确保./runtime目录有写入权限,以便可以纪录和查看文件日志。
|
||||
|
||||
|
||||
## 第6步、开始使用
|
||||
|
||||
成功安装后,便可开始使用和进行项目开发。
|
||||
BIN
public/wiki/logo_pro.png
Normal file
|
After Width: | Height: | Size: 9.7 KiB |
22
public/wiki/member-vs-user.md
Normal file
@@ -0,0 +1,22 @@
|
||||
# 会员和用户的区别
|
||||
|
||||
## 会员
|
||||
|
||||
会员是PhalApi专业版提供的,只有管理员级别或者超级管理员级别的会员才能登录管理后台。
|
||||
|
||||
会员的统计,在管理后台可以看到;在运营平台看不到。
|
||||
|
||||
## 用户
|
||||
用户是PhalApi开源版提供的,有可能后续会被第三方应用使用。任何用户都不能登录管理后台,也不能登录运营平台。
|
||||
|
||||
用户的统计,在运营平台可以看到;在管理后台看不到。
|
||||
|
||||
## 对比
|
||||
|
||||
|等级|管理后台|运营平台|前台接口|使用对象
|
||||
---|---|---|---|---|---
|
||||
会员|分普通会员、管理员和超级管理员|管理员和超级管理员,方可登录|不能登录|```App.User.*```|技术人员、研发团队、或外部合作的开发者
|
||||
用户|无|不能登录|不能登录|```App.User_User.*```|最终顾客,外部用户
|
||||
|
||||
你可以根据自己的情况,决定使用哪套。
|
||||
|
||||
112
public/wiki/platform.md
Normal file
@@ -0,0 +1,112 @@
|
||||
# Platform开放平台使用手册
|
||||
|
||||
开放平台是提供给开发者使用的平台。
|
||||
|
||||
新手开发者的主要使用流程是:
|
||||

|
||||
|
||||
## 访问开放平台
|
||||
|
||||
假设配置的域名是http://open.phalapi.net,那么管理后台的地址是:
|
||||
```
|
||||
http://open.phalapi.net/platform/
|
||||
```
|
||||
|
||||
或者通过在线接口文档页面,点击【开放平台】直接进入,例如:
|
||||

|
||||
|
||||
## 注册开发者账号
|
||||
|
||||
进入开发者注册页面,按提示填写注册信息,然后提交。
|
||||
|
||||

|
||||
|
||||
|
||||
## 登录开放平台
|
||||
|
||||
注册成功后,进入开放平台登录页面,输入登录账号和密码,然后登录。
|
||||
|
||||

|
||||
|
||||
## 创建应用
|
||||
|
||||
进入【应用管理】-【我的应用】-【创建新应用】,按要求填写相关信息,确认提交,然后等待管理员审核。
|
||||
|
||||

|
||||
|
||||
填写应用信息:
|
||||

|
||||
|
||||
创建新应用后等待管理员审核。
|
||||

|
||||
|
||||
查看应用密钥:
|
||||

|
||||
|
||||
应用审核通过后,可查看应用的接口权限。
|
||||
|
||||
## 查看接口权限
|
||||
|
||||
在管理员分配接口权限后,就可以调用需要的开放接口API。
|
||||

|
||||
|
||||
## 调用开放接口
|
||||
|
||||
开发者在调用开放接口前,需要先注册开发者账号,创建新的应用并等待管理员审核通过,并且只能调用已分配权限的接口。
|
||||
|
||||
## 获取接口访问令牌
|
||||
|
||||
首先,开发者需要根据已申请的app_key和app_secret创建新的访问令牌。可以使用接口**App.Auth.ApplyToken** 申请访问令牌接口。
|
||||
|
||||
界面化操作指引如下,进入在线接口文档,选择【App.Auth.ApplyToken】。
|
||||

|
||||
|
||||
输入应用的app_key和密钥,获取令牌:
|
||||

|
||||
|
||||
申请成功后,接口会返回access_token访问令牌,以及expire_at有效时间。
|
||||
```
|
||||
{
|
||||
"ret": 200,
|
||||
"data": {
|
||||
"access_token": "访问令牌",
|
||||
"expire_at": 1580442248
|
||||
},
|
||||
"msg": ""
|
||||
}
|
||||
```
|
||||
|
||||
对比三种获取令牌的方式:
|
||||
|
||||
接口|应用app_key|应用密钥|会员登录账号|会员登录密码|备注
|
||||
---|---|---|---|---|---
|
||||
App.Auth.ApplyToken|需要|需要|不需要|不需要|可指定uid
|
||||
App.Auth.UserLogin|不需要|不需要|需要|需要|可指定app_key
|
||||
App.Auth.AppUserLogin|需要|需要|需要|需要|自动绑定uid和app_key
|
||||
|
||||
|
||||
### 调用开放接口
|
||||
|
||||
接下来,就可以根据access_token访问令牌,访问其他的开放接口。
|
||||
|
||||
需要注意的是,如果部分开放接口需要会员登录,此时开发者应使用**App.User.UserLogin**会员登录接口,根据会员登录账号、密码和app_key,生成一个带有会员登录态的访问令牌。
|
||||
|
||||
> 温馨提示:如果开放接口需要检测会员登录态,开发者应用需要调用**App.User.UserLogin**会员登录接口,生成访问令牌。
|
||||
|
||||
## 使用开放平台
|
||||
|
||||
根据平台界面菜单和提示,使用开放平台的其他功能模块。
|
||||
|
||||
### 开发者资料
|
||||
查看和修改开发者资料。
|
||||

|
||||
|
||||

|
||||
|
||||
### 修改密码
|
||||

|
||||
|
||||
## 英文版
|
||||
你可以切换语言到英文版,也可以添加其他翻译语言。
|
||||

|
||||
|
||||
63
public/wiki/product.md
Normal file
@@ -0,0 +1,63 @@
|
||||
# 整体架构及业务流程
|
||||
|
||||
PhalApi Pro,是一款开发和管理接口的超级框架软件产品,企业可以基于PhalApi Pro快速搭建BaaS项目、PaaS项目和SaaS项目,也可以使用PhalApi Pro开发接口给内部产品或外部客户调用。
|
||||
|
||||
云平台的整体架构及业务流程如下:
|
||||

|
||||
|
||||
## 整体架构
|
||||
|
||||
开放平台,主要由三个子系统构成,分别是:
|
||||
- Platform开放平台
|
||||
- API开放接口
|
||||
- Admin管理后台
|
||||
|
||||
这三部分由PhalApi Pro提供,可进行二次开发。
|
||||
|
||||
开发者在接入开放平台后,根据自己的需要,开发自己的客户端应用。
|
||||
此外,开放平台可以接入或需要依赖于企业已有的系统,包括但不限于企业已有的业务系统、数据库、信息库,此部分不属于PhalApi Pro提供。
|
||||
|
||||
### Platform开放平台
|
||||
Platform开放平台,是提供给开发者使用的平台,开发者可以是内部或外部开发者、合作伙伴、供应商、分销销等。可以进行开发者注册、创建应用、查看接口权限等操作。
|
||||
|
||||
> Platform开放平台地址:http://你的域名/platform/
|
||||
|
||||
### API开放接口
|
||||
API开放接口,是提供给应用/客户端使用的接口服务,应用可以是自主研发的产品、项目、客户端、第三方应用或第三方系统。归根到底,API的使用对象是由开发者研发和维护的应用、程序或系统。
|
||||
|
||||
> API开放接口在线文档地址:http://你的域名/docs.php
|
||||
|
||||
### Admin管理后台
|
||||
|
||||
综上所述,Platform开放平台是提供给开发者使用的,API开放接口是提供给程序使用的。这两个子系统都是对外的,而Admin管理后台与此不同,Admin管理后台是对内的,是提供给内部管理员使用的,可以对开发者和API接口进行管理,以及其他管理操作,例如应用审核、权限分配等。
|
||||
|
||||
> Admin管理后台地址:http://你的域名/admin/
|
||||
|
||||
|
||||
## 业务流程
|
||||
|
||||
业务流程,可以分别从外部开发者和内部管理员两个维度进行划分。
|
||||
|
||||
### 对外的主要业务流程
|
||||
对于外部而言,即对于开发者而言,其主要业务流程是:
|
||||
|
||||
+ **第1步、注册开放平台**
|
||||
+ **第2步、创建应用并等待平台审核**
|
||||
+ **第3步、调用已经分配权限的开放接口API**
|
||||
+ **第4步、开发应用**
|
||||
|
||||
> 默认情况下,每个开发者最多可创建的应用数量为10个,可修改配置。
|
||||
|
||||
### 对内的主要业务流程
|
||||
对于内部而言,即对于平台而言,其主要业务流程是:
|
||||
|
||||
+ **第1步、审核开发者应用**
|
||||
+ **第2步、提供新的开放API接口**
|
||||
+ **第3步、分配接口权限**
|
||||
+ **第4步、进行日常管理和维护**
|
||||
|
||||
> 默认情况下,未分配权限的接口,开发者无权限调用。
|
||||
|
||||
## 技术架构
|
||||
|
||||

|
||||
1
public/wiki/search.min.js
vendored
Normal file
91
public/wiki/testcase.md
Normal file
@@ -0,0 +1,91 @@
|
||||
# PHP接口自动化测试(单独购买)
|
||||
|
||||
通过白盒测试,可以对PHP编写的API接口进行自动化测试。这部分需要单独购买。
|
||||
|
||||
目前,配套接口大师的单元测试,共有148个测试用例, 347个断言,总执行时间约3秒,100%测试通过率。
|
||||
|
||||
## 自动化测试的好处
|
||||
学会和使用自动化测试有非常明显的好处,例如:
|
||||
|
||||
+ 1、节省测试成本,基本可以不需要人工进行接口测试,做到自动化测试和验证
|
||||
+ 2、提高API接口质量,通过360度全方位的测试和断言,时刻测试,让代码调试更简单,让Bug重现更轻松
|
||||
+ 3、加强发布质量,每次发布前,执行一次单元测试,做最后一公里全面的接口回归测试
|
||||
+ 4、改善代码规范,容易测试的代码更优雅、更灵活、更有活力
|
||||
+ 5、可以和CICD进行集成,构建持续交付的工作流
|
||||
|
||||
## 安装PHPUnit
|
||||
|
||||
PHP单元测试,使用的是主流的PHPUnit单元测试,使用前,请先安装PHPUnit。
|
||||
> 安装PHPUNit: http://phpunit.cn/manual/5.7/zh_cn/installation.html
|
||||
|
||||
## 配置单元测试数据库
|
||||
复制./tests/config/dbs.php.sample一份到./tests/config/dbs.php,并修改。为单元测试单独创建一个专业的数据库,并调整里的数据库对应的配置。
|
||||
|
||||
```php
|
||||
'servers' => array(
|
||||
'db_master' => array( //服务器标记
|
||||
'host' => '127.0.0.1', //数据库域名
|
||||
'name' => 'phalapi_pro_test', //数据库名字
|
||||
'user' => 'root', //数据库用户名
|
||||
'password' => '123456', //数据库密码
|
||||
'port' => '3306', //数据库端口
|
||||
'charset' => 'utf8mb4', //数据库字符集
|
||||
'pdo_attr_string' => false, // 数据库查询结果统一使用字符串,true是,false否
|
||||
'driver_options' => array( // PDO初始化时的连接选项配置
|
||||
// 若需要更多配置,请参考官方文档:https://www.php.net/manual/zh/pdo.constants.php
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
```
|
||||
|
||||
## 一键执行单元测试
|
||||
进入到tests目录,执行命令:
|
||||
```
|
||||
$ phpunit
|
||||
```
|
||||
就可以进行一键测试,执行全部的单元测试用例,并且重建数据库。
|
||||
|
||||
单元测试的运行结果:
|
||||

|
||||
|
||||
### 发布时的单元测试
|
||||
如果需要和发布系统集成,或者在测试时不需要查看输入SQL语句、不需要打印日志,可以执行命令:
|
||||
```
|
||||
$ cd tests
|
||||
$ phpunit -c ./phpunit_release.xml
|
||||
```
|
||||
|
||||
执行结果类似:
|
||||
```
|
||||
$ phpunit -c ./phpunit_release.xml
|
||||
正在重建数据库……
|
||||
PHPUnit 5.7.25 by Sebastian Bergmann and contributors.
|
||||
|
||||
............................................................... 63 / 148 ( 42%)
|
||||
............................................................... 126 / 148 ( 85%)
|
||||
...................... 148 / 148 (100%)
|
||||
|
||||
Time: 12.56 seconds, Memory: 18.00MB
|
||||
|
||||
OK (148 tests, 347 assertions)
|
||||
```
|
||||
|
||||
结果截图:
|
||||

|
||||
|
||||
### 测试时不重建数据库
|
||||
|
||||
如果不需要每次测试都重新创建数据库,可以执行命令:
|
||||
```
|
||||
$ cd tests
|
||||
$ phpunit -c ./phpunit_not_sql.xml
|
||||
```
|
||||
此时,不会删除原来的测试数据库表和数据,但要注意测试用例是否可以重复执行。对于查询类的测试是适用的。
|
||||
|
||||
|
||||
## 自动生成测试用例
|
||||
|
||||
参考PhalApi开源框架官方文档,[phalapi-buildtest命令](http://docs.phalapi.net/#/v2.0/shell?id=phalapi-buildtest%e5%91%bd%e4%bb%a4),可以使用脚本自动给API接口和PHP类生成对应的单元测试骨架代码,减少人工重复编写代码的时间和成本。
|
||||
|
||||
|
||||