This commit is contained in:
2022-03-21 11:16:38 +08:00
commit e89e807c64
1040 changed files with 284164 additions and 0 deletions

101
public/wiki/2x-account.md Normal file
View File

@@ -0,0 +1,101 @@
# 账号体系
PhalApi Pro 提供了全面的账号体系,以满足企业、开发者和最终顾客不同层级的账号需求。
## 账号层级
账号层级,主要分为三大类,权限从高到低,分别是:
+ **管理员**:内部管理员,默认分为普通管理员、超级管理员(最高权限),可以扩展更多管理员等级。
+ **开发者**:内部或外部开发者,例如个人开发者、企业开发者、合作伙伴、供应商、分销等,可以扩展更多开发者等级。
+ **顾客**最终的顾客例如普通会员、高级会员、VIP会员、终身会员等。
![](http://cdn7.okayapi.com/yesyesapi_20200415100309_798bbd4c25f14381d4563c38ba3a6874.png)
## 账号体系汇总
下面表格,系统罗列了不同账号的区别、权限以及使用的产品。
账号分类|账号等级(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权限越高等级越大不可重复。
## 管理员
管理员,是企业内部的管理员,是开放平台管理员,默认分为普通管理员、超级管理员(最高权限),可以扩展更多管理员等级。
可以为内部的技术研发团队、信息部或职能部门创建管理员账号。
### 如何创建超级管理员账号?
在首次安装时会创建超级管理员账号。
![](http://cdn7.okayapi.com/yesyesapi_20200409150840_0b03a966ac75467e7cd7726cfde0bc16.png)
安装并登录管理后台,只有超级管理员账号才可以创建超级管理员账号,超级管理员拥有最高的操作权限。
### 如何创建普通管理员账号?
普通管理员权限比超级管理员低只有管理员的账号才能登录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接口进行注册。
### 如何添加会员账号?
也可以通过管理后台,在后台添加会员账号。

View 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方法
![](http://cd7.okayapi.com/E13E3E82379A58F69373E47373CFEE16_20210708115518_f0b9d534160583f35a474b6119dcb5fc.png)
### 2、根据配置编写用于个人中心进行绑定所生成的url的类和方法
如:配置编写了
```php
'weChat'=>[
'can_bing'=>1, //可以在个人中心进行绑定
'can_bing_url_class'=>'\Base\Domain\Authorization',//自己编写获取第三方登录绑定链接的类--包含命名空间
'can_bing_url_fun'=>'weChat', //自己编写获取第三方登录绑定链接的类对应的方法
),
```
那么需要在路径Base/Domain/下新建Authorization.php文件及编写weChat方法
![](http://cd7.okayapi.com/E13E3E82379A58F69373E47373CFEE16_20210708115518_f0b9d534160583f35a474b6119dcb5fc.png)
### 3、根据配置编写用于回调地址及业务逻辑
如:配置编写了
```php
//key是自己编写用于获取第三方登录链接对应的方法
'weChat'=>[
'login_redirect_uri'=>'http://www.xxx.cn/server_callback/wechat_login.php', //登录回调地址配置
),
```
那么需新建/public/server_callback/wechat_login.php 进行回调业务逻辑编写
![](http://cd7.okayapi.com/E13E3E82379A58F69373E47373CFEE16_20210708121011_7f826d6ad2ca7a35b9c8f47d7bac4143.png)
### 第四步,编写具体业务逻辑前,先进行第三方登录数据库分析
以下是涉及第三方登录的三张表数据结构:
```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目录
![](http://cd7.okayapi.com/E13E3E82379A58F69373E47373CFEE16_20210708141621_ea5bad045e64b8564a0c7f2d3ccd95b7.png)
### 2、WeChat.php 代码分析
![](http://cd7.okayapi.com/E13E3E82379A58F69373E47373CFEE16_20210708144158_ba6abf80fa59805df3e622eab7bc0e59.png)
### 3、WeChatBusiness.php 代码分析
![](http://cd7.okayapi.com/E13E3E82379A58F69373E47373CFEE16_20210708150538_c9264823d39f247eec4050195932212c.png)
### 4、WeChatBusiness.php 代码分析
主要是准备数据,如何首次登录写入
![](http://cd7.okayapi.com/E13E3E82379A58F69373E47373CFEE16_20210708150538_c9264823d39f247eec4050195932212c.png)
### 4、AuthorizationLogin.php 代码分析
主要是进行成员注册或绑定登逻辑
![](http://cd7.okayapi.com/E13E3E82379A58F69373E47373CFEE16_20210708151143_59d74133625615d5d25fde3ec8ca61a5.png)
### 5、借鉴并进行开发
到这里就可以借鉴想应的写法进行开发了

View File

@@ -0,0 +1,65 @@
# 在线接口文档
## 访问接口文档
部署和安装好PhalApi专业版后便可以通过浏览器访问```http://你的域名/docs.php```,查看在线接口文档。
例如http://open.phalapi.net/docs.php
看到的在线接口文档效果类似如下:
![](http://cdn7.okayapi.com/yesyesapi_20200426190127_5a25644de57a63d92b50331089da6722.png)
## 如何编写接口文档
请参考[接口文档 - PhalApi 2.x 开发文档](http://docs.phalapi.net/#/v2.0/api-docs)。
## 如何查看全部接口
默认情况下隐藏了内部接口Platform开放平台接口、Admin管理后台接口和Task计划任务接口登录管理后台后方可查看全部接口。避免被外部开发者看到敏感的接口。
非管理员只能看到App开放接口。
![](http://cdn7.okayapi.com/yesyesapi_20200411143428_809d61dc45e5e88bcca77217566bf30b.png)
管理员登录后可查看全部接口。
![](http://cdn7.okayapi.com/yesyesapi_20200411143540_e6d1c86d07b08d98ae401a9f10253e61.png)
但无论是否为管理员登录,都可以通过完整的在线接口文档详情页链接直接访问相应的接口文档。
## 如何设置文档查看密码
默认情况下,查看在线接口文档不需要输入密码。若为了保护接口文档不被外界访问,可以设置文档查看密码。
打开```./config/app.php```配置文件,找到```doc_view_code```然后把此配置修改为所需要的查看密码例如123456。
```php
// 查看文档的密码,为空时不需要密码
'doc_view_code' => '123456',
```
重新打开接口文档,会提示输入查看密码。
例如:
![](http://cdn7.okayapi.com/yesyesapi_20200107145027_4473f70ad6e3c65f5e476aa1344c9d46.png)
如果输入的密码错误,将会提示相应的错误。
![](http://cdn7.okayapi.com/yesyesapi_20200107145059_3f68c5fe71c9e2449f5aed8dd0f367f4.png)
如果查看密码正确,将直接进入相应的接口文档页面。
## 如何生成离线接口文档
在根目录,执行以下脚本命令,可生成离线接口文档。
```
$ php ./public/docs.php
脚本执行完毕!离线文档保存路径为:
/path/to/phalapi-pro/public/docs
```
生成离线文档后可以在目录里看到类似以下的HTML文档
![](http://cdn7.okayapi.com/yesyesapi_20200411143929_fd8a638e95edb521f78e6eb17603c847.png)
用浏览器打开public/docs/index.html首页便可查看离线版的接口文档。

View 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```。
![](http://cd8.okayapi.com/yesyesapi_20210624112006_a36e48f043f5ed3e0c3091f086375334.png)
随后,可以继续添加 ```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',
);
```
就可以解决访问路径不对的问题,例如:
![](http://cd8.okayapi.com/yesyesapi_20210624113257_7cb5e4e7d970318c077fcefe8479121d.png)
此外,还可以修改 ./language/zh_cn/common.php 翻译文件,最后添加一行(注意双斜杠):
```php
'Teacher\\' => '教师平台',
```
解决接口列表页的名称显示问题。例如:
![](http://cd8.okayapi.com/yesyesapi_20210624113515_ddb5e5d828c381a136abf1c51a355f9a.png)
## 第6步接口列表文档的显示控制
例如,有些新加的接口目录,只是内部使用的,那么可以隐藏接口列表的入口。
如果想控制新接口目录在接口列表的显示,可以修改 ```./public/docs.php ```文件,找到以下代码,并在最后添加自己的接口命名空间,就可以隐藏。
```
// 对外排除的命名空间,如果需要增加项目,需要在此追加
$globalExcludeNamespaces = array('Task', 'Platform', 'Admin', 'Teacher'); // 在最后追加
```
## 第7步开始使用新目录
到这里,就可以在新目录添加和开发自己的接口。
剩下的事情,接口大师会自动帮你完成,包括接口的权限以及分配等。

View File

@@ -0,0 +1,57 @@
# 开放接口权限
针对提供给开发者的开放接口APIPhalApi Pro设计了一套完善的权限控制体系可在不同维度进行灵活的权限控制。
## 接口权限规则
从开发者账号类型为起点开发者账号类型分为个人开发者、企业开发者等多种开发者类型每种开发者账号类型下可注册多个开发者而每个开发者可以创建多个应用每个应用可以调用多个开放接口API。因此整体的结构如下
![](http://cdn7.okayapi.com/yesyesapi_20200409154500_0442e1dde533dc2868ba4d2aec6e1bea.png)
## 授权项目
授权项目,主要是针对开放接口,对应```App.*.*```系列接口,如果需要管理其他系列的接口,可以手动添加。
![](http://cdn7.okayapi.com/yesyesapi_20200409154617_68d427a3daafcefd812c5a35eda9f7e9.png)
位于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
View 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个新增加的公共接口参数。
![](http://cdn7.okayapi.com/yesyesapi_20200429235914_ebeca5a4bc364381e94c0c28386c0442.png)
> 温馨提示:熟悉后,你可根据项目的需要调整公共参数的规则,例如是否必须。
## 第3步测试调用接口
完成上面两步,就可以实现第二套接口验签方案的开启了。
接下来,你可以进行接口的测试,验证新的加密方案是否已生效。
例如故意填写错误的签名sign参数。
![](http://cdn7.okayapi.com/yesyesapi_20200429234458_4043caf12098932748e5f278d5f8ec8f.png)
会如期得到“签名错误”的返回结果。
```
{
"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
View 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
View 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菜单进入属性界面
![安装flutter插件](./img2.png)
选择【Plugins】选项搜索Flutter安装Flutter插件和国际化插件
![安装flutter插件](./img1.png)
安装完成后需要重启Android Studio才能启用插件。
#### 3.加载工程
1. 用Android Studio选择工程根目录打开。打开工程根目录下的 pubspec.yaml 文件
2. 点击【Pub get】下载项目相关的依赖库。
![安装flutter插件](./img3.png)
3. 安装完毕即可以连接真机或者模拟器运行了。
## 修改应用信息
### Android端修改方法
1. 修改应用名直接AndroidManifest.xml文件下修改
![安装flutter插件](./img4.png)
2. 修改包名打开android/app/build.gradle 文件找到applicationId设置相应的包名。
![安装flutter插件](./img6.png)
3. Android App图标存放位置
`.../android/app/src/main/res/`
### IOS端修改方法
1. 修改包名、应用名:
IOS端需要在Mac系统下使用xcode打开`/ios/Runner.xcworkspace`工程文件,打开以下选项中进行修改:
![安装flutter插件](./img5.png)
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
View 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白名单。

View 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
View File

@@ -0,0 +1 @@
demo

View 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
```

View 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
```
然后,浏览器会自动打开管理后台,例如:
![](http://cdn7.okayapi.com/yesyesapi_20200426164442_898e22552eb1fbbbb82cf118b20eac3e.png)
## 需要使用的接口
管理后台需要用到的接口建议统一放置在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')
}
}
}
// 绑定完成。
```

View 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代码层次结构如下
![](http://cdn7.okayapi.com/yesyesapi_20200416113656_6c74c2813bed5ce7f552c5ed2a1007cc.png)
## 编写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!');
}
}
```
保存后,访问接口文档列表,可以看到以下新接口:
![](http://cdn7.okayapi.com/yesyesapi_20191231095424_6cdab6e1dbac43fd95726fa2033412e0.png)
同时在接口详情文档可以查看到相应的详细接口文档:
![](http://cdn7.okayapi.com/yesyesapi_20191231100511_05d90cae0288de0649d1476772142a15.png)
如果需要编写后台接口,则需要放置在./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'),
```
在管理后台可以自动管理该命名空间下的接口权限。
接口权限分配:
![](http://cdn7.okayapi.com/yesyesapi_20200416114254_3c9a241aa03b33b0b66911583c8bd568.jpg)
接口服务列表:
![](http://cdn7.okayapi.com/yesyesapi_20200416114450_1d98c314d1c0eef0f34aad607a4ce076.jpg)
在开放平台,开发者也可自动看到新增命名空间下的接口。
![](http://cdn7.okayapi.com/yesyesapi_20200416114634_7ac7f4d70c1c4e138eac7206c2134e46.png)
## 如何隐藏接口?
和开源版一样,在接口类或方法中添加```@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/#/)。

View 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
```
成功安装后可以看到:
![](http://cdn7.okayapi.com/yesyesapi_20200410115705_6af0ac3164a6d293aa74490300a55e60.png)
> 推荐使用:[NPM镜像-NPM下载地址-NPM安装教程-阿里巴巴开源镜像站](http://npm.taobao.org/)。
> 使用说明,你可以使用我们定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm:
> ```$ npm install -g cnpm --registry=https://registry.npm.taobao.org```
安装完毕后,再运行命令:
```
$ npm run dev
```
然后,浏览器会自动打开管理后台,例如:
![](http://cdn7.okayapi.com/yesyesapi_20200426161752_4039d1c4fedce6bc6e60a47b36178730.jpg)
## 需要使用的接口
开放平台需要用到的接口建议统一放置在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')
}
}
}
// 绑定完成。
```

View 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_tokentoken令牌用于接口验证后面会继续讲解。
每个接口的参数,可以通过接口文档查看,例如:
![](http://cdn7.okayapi.com/yesyesapi_20191230174817_d87cba5494b0d5c6902ee328bcb660bd.png)
如无特殊说明接口参数均可使用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失败时的错误提示信息字符类型
具体每个接口返回的结果,可以访问接口文档,查看指定接口服务文档的**返回结果**说明。例如:
![](http://cdn7.okayapi.com/yesyesapi_20200107145823_36980567e0ed1b9f416676abe3575b5c.png)
也可以查看接口返回示例:
![](http://cdn7.okayapi.com/yesyesapi_20191230174538_fb50beb5aefb933567ff7654635d967f.png)
## 验证方式
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
View File

@@ -0,0 +1,129 @@
# 接口商城
为满足企业实现对API接口收费的需求接口大师提供了接口商城在管理后台配置好接口流量套餐后开发者用户则可以通过开放平台或前台进行查看和购买购买接口套餐后再调用接口就会进行流量计费。
## 接口流量套餐配置
使用管理员账号登录Admin管理后台进入【服务大厅】-【接口流量套餐】,查看当前的流量套餐。
![](http://cd8.okayapi.com/yesyesapi_20210713223521_08efc73a227596faa7e9fdbd93cf73e6.png)
可以点击【添加套餐】,添加:付费购买/免费试用/组合套餐。
![](http://cd8.okayapi.com/yesyesapi_20210713223640_cca6a8bae9bc9c9c12b48752a28a1158.png)
+ **付费购买**套餐是指单个API接口调用多少次需要多少钱多久时间内有效。
+ **免费试用**套餐是指单个API接口同一个应用可以免费调用多少次多久时间内有效。
+ **组合套餐**:可以把多个不重复的付费购买套餐组合起来,进行优惠定价,吸引客户购买。
套餐保存后,仍然可以修改,但过去已经下单的套餐不影响。
## 支付方式
默认提供了现金支付、支付宝和Paypal三种支付方式可以通过【服务大厅】-【支付配置】进行不同支付方式的修改和开关。
![](http://cd8.okayapi.com/yesyesapi_20210713224250_c3ea3addbf550d5810889221b38ef8e3.png)
价格支持两位小数点,即人民币单位到:分。
## 前台套餐展示、下单和购买
### 游客如何查看接口流量套餐?
未登录开放平台的游客,可以通过在线接口文档查看需要付费的接口流量套餐。
例如,在接口文档列表页,可以看到哪些接口需要付费才能使用。
![](http://cd8.okayapi.com/yesyesapi_20210713224616_573fd6a1ec75901bdc4a7c09113dab9c.png)
又如,在接口文档详情页,可以看到免费试用套餐和付费套餐。
![](http://cd8.okayapi.com/yesyesapi_20210713224448_4826dfecd1eac695eac458b3b11945ed.png)
点击即可登录后进行下单。
### 开发者如何购买接口流量套餐?
已经登录的开发者,除了可以在在线接口文档和游客一样查看接口流量套餐外,还可以在开放平台的【接口权限】查看需要传费才能使用的接口购买入口。
![](http://cd8.okayapi.com/yesyesapi_20210713224830_68a1abbec109b138c7ab7063f77f15a3.png)
### 如何查看组合套餐?
因为组合套餐是组合了不定个接口流量套餐,并且价格上会比单个接口流量套餐购买的更优惠和更划算。
当在管理后台,添加和设置了组合套餐后,例如:
![](http://cd8.okayapi.com/yesyesapi_20210713225148_1e8284d9bd36c44c593f93fa3c7309c1.png)
在开放平台的-【接口权限】页面下方,就可以看到:
![](http://cd8.okayapi.com/yesyesapi_20210714233426_3d3338ff0bf404c38bb9682f4db2ffe7.png)
### 下单
点击购买入口,就可以进入下单页面。
用户可以选择类似的套餐,以及选择需要购买的数量,还可以查看有效时间和套餐说明、套餐价值、付费服务协议。
![](http://cd8.okayapi.com/yesyesapi_20210713225353_9e3b1a3ce5c9a0cd466d76c55eb69ad0.png)
还可以填写备注和留言,确定后创建订单。
![](http://cd8.okayapi.com/yesyesapi_20210713225525_2d1865e70fadad4a03f2022fb76c13de.jpg)
下单后,会进入到支付环节,用户可以选择自己喜欢的支付方式。
![](http://cd8.okayapi.com/yesyesapi_20210713225620_f34297a34aceac64440f8e172531ad82.png)
例如,支付宝支付方式:
![](http://cd8.okayapi.com/yesyesapi_20210713225758_a47a482d81dc73e9f5f642e5e36a9886.png)
支付成功后会返回到支付成功页。
## 我的订单和我的套餐
开发者在开放平台的【服务大厅】-【我的订单】,可以查看到我的订单,未支付的订单可以继续进行支付。
![](http://cd8.okayapi.com/yesyesapi_20210713230114_d8008284212623bee132741709aeeb50.png)
开发者在开放平台的的【服务大厅】-【我的套餐】,可以查看到我有哪些接口流量套餐,以及使用情况,或过期情况。
![](http://cd8.okayapi.com/yesyesapi_20210713230246_703aee11b39791d9f482c117634fb299.png)
## 接口流量计费
当配置好接口流量套餐开发者也购买流量套餐后就可以正常调用和请求接口此时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);
}
}
```
> 温馨提示:仅当接口通过签名验证后,才进行流量计费,
## 管理后台的订单处理和管理
在管理后台,除了可以设置接口流量套餐,还可以对开发者用户的订单和流量套餐进行管理和处理。
例如,在管理后台-【服务大厅】-【订单管理】,可以查看和修改订单的状态、对套餐进行调整。可以发放流量套餐和回收流量套餐。每个订单,最多只能发放一次流量(即只能最多发一次货,不能重复发货)。
![](http://cd8.okayapi.com/yesyesapi_20210713230824_abcd73fd6ddad68b64f6a17aa8a188bb.jpg)
也可以在管理后台的【服务大厅】-【套餐管理】,对订单的套餐进行管理,也可以不需要订单直接给开发者发放接口流量套餐,例如内部测试或者内部使用时。
![](http://cd8.okayapi.com/yesyesapi_20210713231015_0df90fad0ce052a78992615e69da2e79.png)
## 一些注意事项
+ 1、付费的接口需要先进行接口权限的设置
+ 2、当接口有任意套餐时不管试用或付费都需要购买或拥有该接口的流量套餐后才可调用
+ 3、调试模式下不会进行接口流量的拦截和判断

77
public/wiki/2x-task.md Normal file
View 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
View 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接口给开发者、客户端使用。
全部接口,可通过在线接口文档浏览。管理员登录后可查看全部内部接口。
![](http://cdn7.okayapi.com/yesyesapi_20200426160110_5748eedc3dd5bce1e67c9dc93689cd59.png)
### 2、Platform开放平台
提供给平台的开发者使用可进行应用管理、查看接口权限等操作。基于iView Admin开发采用前后端分离技术方案。
![](http://cdn7.okayapi.com/yesyesapi_20200426160422_9e48a27b0b1fc4532f33cbd622717ec0.jpg)
### 3、Admin管理后台
提供给管理员使用可进行全面的日常管理。基于iView Admin开发采用前后端分离技术方案。
![](http://cdn7.okayapi.com/yesyesapi_20200426160914_11a4e23beebd4dc45da75d222397421b.png)
## 阅读对象
本技术文档主要面向PhalApi Pro的使用者提供了关于技术开发、产品使用、业务介绍等内容阅读对象包括但不限于后端开发人员、前端开发人员、测试人员、产品人员和运营人员。

10
public/wiki/_coverpage.md Normal file
View File

@@ -0,0 +1,10 @@
![logo](/logo_pro.png)
# 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
View File

@@ -0,0 +1,4 @@
- [官网](http://pro.yesapi.cn/)
- [PhalApi开源文档](http://docs.phalapi.net/#/)

47
public/wiki/_sidebar.md Normal file
View 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)
- [ ]()

View File

@@ -0,0 +1,16 @@
# 管理后台与运营平台的区别
## 管理后台
管理后台是PhalApi专业版针对技术人员专门提供的可用于进行接口管理、数据库管理、开发、测试、接口流量统计等。
主要面向的人群是技术人员,以及是对内的。
登录管理后台只能是管理员或者超级管理员账号。
访问入口是:你的域名 + /admin
## 运营平台
运营平台是PhalApi开源版提供的针对非技术人员可用于日常业务的管理例如图片管理系统、ERP系统、HR系统等使用人群主要是店长、管理者等非技术人员即职能部门或者外部人员。
登录运营平台是单独的管理员账号。
访问入口是:你的域名 + /portal

143
public/wiki/admin.md Normal file
View File

@@ -0,0 +1,143 @@
# Admin管理后台使用手册
使用管理后台之前请先配置并安装好PhalApi专业版并创建超级管理员账号。
## 访问管理后台
假设配置的域名是http://open.phalapi.net那么管理后台的地址是
```
http://open.phalapi.net/admin/
```
或者通过在线接口文档页面,点击【管理后台】直接进入,例如:
![](http://cdn7.okayapi.com/yesyesapi_20200409173038_1569e34ea4e76ada4111651057408e73.png)
## 登录管理后台
打开管理后台,首先需要进行管理员登录,登录界面如下:
![](http://cdn7.okayapi.com/yesyesapi_20200426164442_898e22552eb1fbbbb82cf118b20eac3e.png)
管理员账号密码在安装向导时由用户自行设定。如果忘记管理员账号可查看member数据库表如果忘记密码需要重新安装。
## 使用管理后台
进入管理后台后,可以看到类似以下的后台首页:
![](http://cdn7.okayapi.com/yesyesapi_20200426164524_9b51e1aff2b1241d2b41e65b5e2a6de6.png)
其他功能模块,按界面指引操作即可。
下面简单介绍管理后台的功能,最新的界面以最新版的为准。
## 账号管理
管理和查看全部账号,包括管理员、开发者和会员的账号,进行账号的管理,例如修改密码、修改资料、创建账号。
![](http://cdn7.okayapi.com/yesyesapi_20200426164615_f93d6c810940a3e60df03b12d74ee4e0.png)
创建账号:
![](http://cdn7.okayapi.com/yesyesapi_20200426164647_672991e14bdc01e591512fc1ef72abd4.png)
## 应用管理
可以对客户端应用进行管理,如审核开发者应用、查看应用信息、限制应用接口调用次数、禁用或恢复等。
![](http://cdn7.okayapi.com/yesyesapi_20200426164714_2b4626053f8ed71aa68d4d828c2b9bb0.png)
## 接口管理(权限、设计、测试)
可以进行接口权限分配和管理(权限分配)、进行可视化接口设计(接口开发)、接口自动化黑盒测试(接口测试)。
接口权限:
为开发者角色分配接口权限:
![](http://cdn7.okayapi.com/yesyesapi_20200426164750_a123d74084dc6c810563ece8b6a30e72.png)
创建接口授权规则:
![](http://cdn7.okayapi.com/yesyesapi_20200426165102_8bbb08581a99257c512b3714bf6742a7.png)
接口设计:
可以在线生成接口代码、保存接口代码还可以创建数据库表生成对应的CURD通用数据接口。
![](http://cdn7.okayapi.com/yesyesapi_20200426165142_fdd1fa2c83b6b6892689f5a816e4fa61.png)
接口测试:
![](http://cdn7.okayapi.com/yesyesapi_20200426165208_30c0c6fd9dbdd1fa1780d8d885370f15.png)
## 素材库
对上传的图片、文档进行管理:
![](http://cdn7.okayapi.com/yesyesapi_20200426165241_0d304df4122a809e0edf22cf147a9dff.png)
## 配置管理
动态配置:
![](http://cdn7.okayapi.com/yesyesapi_20200426165308_ef5677a03b6716d714ab731e02b5a336.png)
## 计划任务
定时计划任务需要添加crontab配置启动后台任务。
![](http://cdn7.okayapi.com/yesyesapi_20200426165334_be320230769cdb3a340b9e7171f7397f.png)
通过crontab -e添加以下计划任务
```
# PhalApi Pro 计划任务
*/1 * * * * php /path/to/phalapi-pro/bin/run_task.php > /dev/null
```
## 数据库管理
可以统计数据库容量,可视化直观的统计。
![](http://cdn7.okayapi.com/yesyesapi_20200426165412_56d7ef46e2ce2d2143dd6a438a5b2676.png)
还可以查看实时数据库进程,方便知道当前有哪些查询和操作。
![](http://cdn7.okayapi.com/yesyesapi_20200426165607_93d9ce1139a6dd4a5c541c41dcf7ea34.png)
## 统计
接口统计:
![](http://cdn7.okayapi.com/yesyesapi_20200426165446_25b686cfa9171853924d0699e7437798.png)
注册统计和登录统计:
![](http://cdn7.okayapi.com/yesyesapi_20200426165539_2d7b75b532ce192ccf6d066a1370d658.png)
## 管理后台权限分配
点击【权限】-【管理后台权限分配】,可针对管理后台的功能操作,向管理员进行权限分配。
![](http://cdn7.okayapi.com/yesyesapi_20200514214829_fad6a5343e6e4346280d29d59a84a01a.png)
> 温馨提示:只有超级管理员,才有权限进行权限分配。
添加新操作,如果有新增的菜单,可添加新操作,然后再进行权限分配。
![](http://cdn7.okayapi.com/yesyesapi_20200514215130_bbbdcf4e1fca494cba0adf990a93fd6c.png)
其中URI链接为管理后台的页面路径不需要域名不需要```/admin/```,对应页面后面的路径。
针对管理员角色分配管理后台菜单操作权限:
![](http://cdn7.okayapi.com/yesyesapi_20200514215601_0e4e053666c1882e6a2e9fd60102cb38.png)
> 温馨提示:超级管理员拥有全部管理后台的权限,无须分配。
也可以针对个别的账号ID分配管理后台菜单权限
![](http://cdn7.okayapi.com/yesyesapi_20200514215725_d4c7e58d053971f2ab20129e2c2b7a62.png)
## 开放平台权限分配
可以针对开放平台操作,向开发者进行权限分配。
> 温馨提示:只有超级管理员,才有权限进行权限分配。
添加新操作,如果有新增的菜单,可添加新操作,然后再进行权限分配。
![](http://cdn7.okayapi.com/yesyesapi_20200514215841_5312823302e6859faf0987e88d0010dc.png)
针对开发者角色分配开放平台的菜单操作权限:
![](http://cdn7.okayapi.com/yesyesapi_20200514215925_55367f531ab8ac049bfa26e0b6a5da37.png)
> 温馨提示:管理员(包括普通管理员和超级管理员,以及新增的自定义管理员)拥有全部开放平台的权限,无须分配。
也可以针对个别开发者账号ID单独分配开放平台的操作权限。
![](http://cdn7.okayapi.com/yesyesapi_20200514220110_4ae7639209808a2815f4054e18610563.png)
## 英文版
你可以切换语言到英文版,也可以添加其他翻译语言。
![](http://cdn7.okayapi.com/yesyesapi_20200426165703_7a132b3d1db97c6a84161b1b056274e3.png)

74
public/wiki/aliyun.md Normal file
View 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": ""
}
```
![](http://cd7.yesapi.net/89E670FD80BA98E7F7D7E81688123F32_20200224221308_036fb728567de98f8da9eaee2567c304.jpeg)
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
View File

@@ -0,0 +1,47 @@
# API接口系统使用手册
API接口是最为重要的服务是可以提供给客户端应用、第三方系统以及内部项目使用的接口。
这里简单介绍下如何查看和使用在线接口文档。
## 访问在线接口文档
安装好后,进入首页,通过点击顶部的【开放接口】,可以访问接口文档。
![](http://cdn7.okayapi.com/yesyesapi_20200427160815_c85671982f124e2f1f3d0121c5814c2a.png)
如果管理员有设置密码,则需要输入文档查看密码方能查看接口。
![](http://cdn7.okayapi.com/yesyesapi_20200427160924_fa59bde39f981865be131f9afebbce66.png)
## 在线接口文档列表
在线接口文档列表会根据PHP接口代码自动生成无须人工编辑和维护。
为了避免内部接口暴露游客只能看到开放部分的API接口。如下
![](http://cdn7.okayapi.com/yesyesapi_20200427161122_0b28479cac22774f0c76b66aae78a172.png)
管理员登录管理后台后可以查看全部的API接口包括内部接口。如下
![](http://cdn7.okayapi.com/yesyesapi_20200427161233_f782160101163ad104d552f36334c0b4.png)
## 接口文档详情页
点击进入,可查看接口文档详情页。如下:
![](http://cdn7.okayapi.com/yesyesapi_20200427161343_f060c62e7ee38b94a79589c86b67a8eb.png)
填写接口参数后,可以进行在线接口测试:
![](http://cdn7.okayapi.com/yesyesapi_20200427161449_bec5ade952c33b600a13fdc030754305.png)
## 展开查看全部接口
点击【切换到展开版】,可以查看全部的接口。
![](http://cdn7.okayapi.com/yesyesapi_20200427161603_a441f5e56bc7656e67e5da32c6b632b6.png)
## 搜索接口
可以进行接口的搜索,模糊匹配接口名称和接口描述,以及接口英文名称。
![](http://cdn7.okayapi.com/yesyesapi_20200427161701_2e4a5c4e0813ab3fada6c617915d9838.png)
## 英文版
你可以切换语言到英文版,也可以添加其他翻译语言。
![](http://cdn7.okayapi.com/yesyesapi_20200427161802_b1d1d306ecfedb7cfba73c3fc01f663c.png)

View File

@@ -0,0 +1,10 @@
# 前台接口、运营平台接口和后台接口
## App前台接口
App前台接口是提供给外部的客户端使用的例如小程序、App、H5等客户端。
## Portal运营平台接口
Portal运营平台接口是提供给运营平台使用的接口。
## Admin后台接口
Admin后台接口是提供给管理后台使用的接口。

85
public/wiki/app-usage.md Normal file
View 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)
> 演示账号和密码,请联系我们获取。
下面是安卓版的安装效果:
![](http://cd8.okayapi.com/yesyesapi_20210626162220_ead6e176e142bdd3cfd242b2ca1f6266.png)
## 登录和注册
登录界面,登录账号和密码,请使用开发者的账号和密码。
![](http://cd8.okayapi.com/yesyesapi_20210626161942_38b28a24f227cd563c4c31bd0d808799.png)
## 首页
首页可以展示接口流量统计,以及工单、我的应用、我的订单、我的套餐、接口总数等统计数据,以及访问入口。
![](http://cd8.okayapi.com/yesyesapi_20210626162037_6f121aea446092843a70518249605580.png)
## 商城
可以查看我的应用app_key 和 应用密钥,以及切换查看每个应用的接口列表和接口权限。
![](http://cd8.okayapi.com/yesyesapi_20210626162422_eff19d6a5a09df4905579e7ff0622277.png)
## 应用
开发者可以创建申请自己的新应用,可以查看已经申请或申请通过的应用,对未通过的应用进行修改重新申请。
![](http://cd8.okayapi.com/yesyesapi_20210626162559_877dc4e912122eeb2ebc3e6139e04e17.png)
## 我的
可以查看我的订单、我的套餐、修改个人资料、退出登录等。
![](http://cd8.okayapi.com/yesyesapi_20210626162706_1a39aa8d3d380b0da68a31818da300fa.png)
## 国际化翻译
开发者App客户端也同样支持国际化翻译可以进行中、英语言切换。
![](http://cd8.okayapi.com/yesyesapi_20210626162803_5ddc9115bac11d9c4b237ca0c30fef9f.png)

147
public/wiki/changelog.md Normal file
View File

@@ -0,0 +1,147 @@
# 版本更新日记
## PhalApi专业版 3.8.02021-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.42021-07
+ 1、管理后台交互优化重新打包编译
## PhalApi专业版 3.7.32021-06
+ 1、阿里云OSS优化支持自定义域名和指定目录前缀
+ 2、一些客户反馈的问题Bugfixed
## PhalApi专业版 3.7.0 (2021-05)
+ 1、Admin账号列表搜索优化
+ 2、Admin支持模拟登录以及用户轨迹查看
+ 3、Admin首页添加常用的统计报表增强运营能力
+ 4、Admin新增应用统计页面
+ 5、Platform开放平台调整支持模拟登录
![](http://cd8.okayapi.com/yesyesapi_20210429175159_2c1d04564c5d025971ebd931d3fe8686.png)
## 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.22021-01
+ 1、一些Bugfixed
## PhalApi专业版含商城 3.4.12020-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.12020-07-15
+ 1、集成小白接口
+ 2、补充redis更多原生接口
+ 3、一些bugfixed
+ 4、管理后台Admin全面翻译
## PhalApi专业版 2.3.02020-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.12020-05-06
+ 1、bugfixed管理后台接口统计刷新后数据叠加问题
+ 2、bugfixed开放平台登录页标题显示undefined问题
+ 3、bugfixedPHP的```$isStopWhenNoApp```变量未定义
## PhalApi专业版 2.12020-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.322020-03-04
+ 1、同步升级开源PhalApi 2.12.2
## PhalApi专业版 1.302020-03-04
+ 1、添加接口可视化设计模块
+ 2、添加接口测试模块一体化测试体系
+ 3、添加虎皮椒支付
+ 4、在线接口文档的静态资源从不稳定的CDN调整为本地
+ 5、上传目录路径支持可配置
+ 6、添加计划任务模块
+ 7、修复一些已知的bug
## PhalApi专业版 1.202020-01-20
主要更新如下:
+ 管理后台:添加应用管理、用户管理,配置管理,技术专区,支持分页查询和模糊搜索
+ PhalApi专业版接口进行内部优化和升级并在Model基类添加获取分页列表的方法getList()
+ PhalApi Pro添加配置、日志查询等新接口
+ 全面兼容PHP 5.3和MySQL 5.5版本
+ 页面优化
+ 一些已知的bug fixed及优化
## PhalApi专业版 1.102020-01-10
PhalApi专业版第一个正式版本致力通过智慧编程让接口开发更有趣当前专业版为4合1拥有比开源版本更强大且实用的贴心设计和功能。
+ 基于PhalApi研发并上线接口系统分前台接口和后台接口两大系列
+ 基于iView-Admin研发并上线管理后台
+ 基于docsify和markdown编写完整开发手册
+ 采用MySQL数据库设计并初始化数据库
+ 可视化安装向导
+ 精美在线接口文档,支持查看密码设置

10
public/wiki/contact.md Normal file
View File

@@ -0,0 +1,10 @@
# 联系我们
QQ(dogstar)376741929
邮箱huangchanzong@yesapi.cn
官网http://pro.yesapi.cn/
欢迎扫码联系:
![](http://cdn7.okayapi.com/yesyesapi_20191231165055_0fc922e996e46664a6efb8510a2fa9de.png)

View 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

File diff suppressed because one or more lines are too long

88
public/wiki/guide.md Normal file
View 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
View File

@@ -0,0 +1,6 @@
# 购买后可查看此内部技术文档
此文档属于内部文档。如果需要提前了解技术文档的部分内容,可联系我们售前咨询获取。
> 温馨提示付费购买PhalApi Pro 专业版后,可在你的本地目录```./public/wiki```或安装后通过浏览器查看全部完整的技术文档。

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 344 KiB

BIN
public/wiki/img2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

BIN
public/wiki/img3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

BIN
public/wiki/img4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 KiB

BIN
public/wiki/img5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 KiB

BIN
public/wiki/img6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

67
public/wiki/index.html Normal file
View 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
View 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为例,源代码压缩包解压后有:
![](http://cdn7.okayapi.com/yesyesapi_20200423142955_613c0a94d15f3e9563a5f36a9ac7340e.png)
其中管理后台的源代码基于vue前后端分离。
![](http://cdn7.okayapi.com/yesyesapi_20200423162005_e8ea2b9396d43812cb87e2ddfa3bfc8d.png)
另外开放平台的源代码也是基于vue前后端分离。
![](http://cdn7.okayapi.com/yesyesapi_20200423162146_e1a10663bb21fc594fd42b8dcdd92102.png)
> 温馨提示标准版不含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目录名称可自行修改
![](http://cdn7.okayapi.com/yesyesapi_20200106230914_e40118c26d07177639605aaa3e749c0e.jpeg)
配置域名打开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密码为空。
### 宝塔配置
进入宝塔后,点击:【网站】-【添加站点】:
![](http://cdn7.okayapi.com/yesyesapi_20200107095815_54dee47428d6ef26a05a9e41c5219675.png)
在域名中输入自己的域名例如open.phalapi.net然后点【提交】。
![](http://cdn7.okayapi.com/yesyesapi_20200107095952_c499df0075efcdc8f78a66c8fa41a7f3.png)
然后将项目压缩包如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/* ./ # 把解压后的全部文件移到根目录
```
这时根目录的文件如下:
![](http://cdn7.okayapi.com/yesyesapi_20200107100741_ddf33861499bbdb371b4b4b9ce13c0f7.png)
回到宝塔修改open.phalapi.net站点的配置在【网站目录】-【运行目录】下拉选择public目录点击保存。
![](http://cdn7.okayapi.com/yesyesapi_20200107100835_27068884faef16133aa47f7841b987be.png)
接着,在伪静态中,添加并保存:
```
# 管理后台
if (!-e $request_filename) {
rewrite ^/admin/(.*) /admin/index.html;
}
# 开放平台
if (!-e $request_filename) {
rewrite ^/platform/(.*) /platform/index.html;
}
```
如图:
![](http://cdn7.okayapi.com/yesyesapi_20200107101045_00fa96881d8490b5819c808f109cf0c9.png)
绑定域名后,即可访问,进入安装向导。
补充如果宝塔使用的是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://你的域名/```,点击进入安装向导。
![](http://cdn7.okayapi.com/yesyesapi_20200415153334_bcf4c69dbcbf52edb06e3cbd5a51cb04.png)
第3步、在安装之前先手动执行以下脚本添加必要的文件和目录权限。
```
$ ./bin/install_check.sh
start to check ...
check ok!
```
如果无法在Windows环境上执行此脚本影响不大可以在安装向导的引导下手动添加目录权限。
在浏览器访问注意域名需要更换成自己的域名或IP地址
[http://open.phalapi.net/install/](http://open.phalapi.net/install/)
进入安装向导后,同意安装。
![](http://cdn7.okayapi.com/yesyesapi_20200409175509_96fe3d7d3a94f02b2fb0ea34077d28df.png)
检测通过后,下一步。
![](http://cdn7.okayapi.com/yesyesapi_20200409175552_f15526b437d45c63fdd1d63a3230bd57.png)
根据表单,填写数据库的相关配置,以及管理员的账号和密码。下一步。
> 温馨提示:重点修改你的项目名称、你的数据库连接、管理员登录密码。
![](http://cdn7.okayapi.com/yesyesapi_20200409175642_d6b96a542f4322a8b79561bb02fa1805.png)
![](http://cdn7.okayapi.com/yesyesapi_20200409175723_c29fa278eb6cbfed4f80704088d589fe.png)
安装成功。
![](http://cdn7.okayapi.com/yesyesapi_20200409175852_fb9844c0abafa636178ed8c03c7d45b8.png)
如果安装失败,请留意错误提示信息。通常是数据库账号密码错误,或者缺少目录写入权限,此时可尝试重新安装。如果问题尚未解决,可联系我们。
如果重复安装,会看到以下提示:
![](http://cdn7.okayapi.com/yesyesapi_20191230161056_44dbc4e38b9d19f87b6afc8554238c37.png)
若需要重新安装,请手动删除./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

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

View File

@@ -0,0 +1,22 @@
# 会员和用户的区别
## 会员
会员是PhalApi专业版提供的只有管理员级别或者超级管理员级别的会员才能登录管理后台。
会员的统计,在管理后台可以看到;在运营平台看不到。
## 用户
用户是PhalApi开源版提供的有可能后续会被第三方应用使用。任何用户都不能登录管理后台也不能登录运营平台。
用户的统计,在运营平台可以看到;在管理后台看不到。
## 对比
|等级|管理后台|运营平台|前台接口|使用对象
---|---|---|---|---|---
会员|分普通会员、管理员和超级管理员|管理员和超级管理员,方可登录|不能登录|```App.User.*```|技术人员、研发团队、或外部合作的开发者
用户|无|不能登录|不能登录|```App.User_User.*```|最终顾客,外部用户
你可以根据自己的情况,决定使用哪套。

112
public/wiki/platform.md Normal file
View File

@@ -0,0 +1,112 @@
# Platform开放平台使用手册
开放平台是提供给开发者使用的平台。
新手开发者的主要使用流程是:
![](http://cdn7.okayapi.com/yesyesapi_20200411123116_53fe0dfe07c90ac558a17e504abef8ed.png)
## 访问开放平台
假设配置的域名是http://open.phalapi.net那么管理后台的地址是
```
http://open.phalapi.net/platform/
```
或者通过在线接口文档页面,点击【开放平台】直接进入,例如:
![](http://cdn7.okayapi.com/yesyesapi_20200409173653_65a7dd71ba162003647b95ecd13b0231.png)
## 注册开发者账号
进入开发者注册页面,按提示填写注册信息,然后提交。
![](http://cdn7.okayapi.com/yesyesapi_20200413122310_bde655db95443a799fa78f623a25e141.png)
## 登录开放平台
注册成功后,进入开放平台登录页面,输入登录账号和密码,然后登录。
![](http://cdn7.okayapi.com/yesyesapi_20200426161752_4039d1c4fedce6bc6e60a47b36178730.jpg)
## 创建应用
进入【应用管理】-【我的应用】-【创建新应用】,按要求填写相关信息,确认提交,然后等待管理员审核。
![](http://cdn7.okayapi.com/yesyesapi_20200426163424_37de2dc9739f8326c5fe9c3a8736c9ab.png)
填写应用信息:
![](http://cdn7.okayapi.com/yesyesapi_20200426163554_05291a7ed07388b769d9ca0683591ee6.png)
创建新应用后等待管理员审核。
![](http://cdn7.okayapi.com/yesyesapi_20200426163633_7826f5e704b696488a48a5ad143f8a60.png)
查看应用密钥:
![](http://cdn7.okayapi.com/yesyesapi_20200426163706_7d1b1143519b17df92ea981fea873248.png)
应用审核通过后,可查看应用的接口权限。
## 查看接口权限
在管理员分配接口权限后就可以调用需要的开放接口API。
![](http://cdn7.okayapi.com/yesyesapi_20200426163845_57a2563bf6eed3481ab95cf021dc328c.png)
## 调用开放接口
开发者在调用开放接口前,需要先注册开发者账号,创建新的应用并等待管理员审核通过,并且只能调用已分配权限的接口。
## 获取接口访问令牌
首先开发者需要根据已申请的app_key和app_secret创建新的访问令牌。可以使用接口**App.Auth.ApplyToken** 申请访问令牌接口。
界面化操作指引如下进入在线接口文档选择【App.Auth.ApplyToken】。
![](http://cdn7.okayapi.com/yesyesapi_20200413123154_cfac048c85259a010bd5a69cca7eab5d.png)
输入应用的app_key和密钥获取令牌
![](http://cdn7.okayapi.com/yesyesapi_20200413123334_6f24af3d061f7ee072c92b66230c76cc.png)
申请成功后接口会返回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**会员登录接口,生成访问令牌。
## 使用开放平台
根据平台界面菜单和提示,使用开放平台的其他功能模块。
### 开发者资料
查看和修改开发者资料。
![](http://cdn7.okayapi.com/yesyesapi_20200426164000_a25922bda2fb74ac2669fe3c2da3fa74.png)
![](http://cdn7.okayapi.com/yesyesapi_20200426164102_cf6d5f77ebdc900989265102d40a68f2.png)
### 修改密码
![](http://cdn7.okayapi.com/yesyesapi_20200426164139_66f617cb6909ba0722393ac53f9016e3.png)
## 英文版
你可以切换语言到英文版,也可以添加其他翻译语言。
![](http://cdn7.okayapi.com/yesyesapi_20200426165811_1a3b5b93c6389a68727ff88af9dcedc1.png)

63
public/wiki/product.md Normal file
View File

@@ -0,0 +1,63 @@
# 整体架构及业务流程
PhalApi Pro是一款开发和管理接口的超级框架软件产品企业可以基于PhalApi Pro快速搭建BaaS项目、PaaS项目和SaaS项目也可以使用PhalApi Pro开发接口给内部产品或外部客户调用。
云平台的整体架构及业务流程如下:
![](http://cdn7.okayapi.com/yesyesapi_20200415102825_0528e280e8a5e26641ed41ad569a2099.png)
## 整体架构
开放平台,主要由三个子系统构成,分别是:
- 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步、进行日常管理和维护**
> 默认情况下,未分配权限的接口,开发者无权限调用。
## 技术架构
![](http://cdn7.okayapi.com/yesyesapi_20200414112347_3ea28c8662dd5c7cad988bcf3f5b5e12.png)

1
public/wiki/search.min.js vendored Normal file

File diff suppressed because one or more lines are too long

91
public/wiki/testcase.md Normal file
View 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
```
就可以进行一键测试,执行全部的单元测试用例,并且重建数据库。
单元测试的运行结果:
![](http://cd8.okayapi.com/yesyesapi_20210714102936_6b343c2d27bdc626b595dea5abee8114.png)
### 发布时的单元测试
如果需要和发布系统集成或者在测试时不需要查看输入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)
```
结果截图:
![](http://cd8.okayapi.com/yesyesapi_20210714103147_06282df6205425d313d15261bb8b681d.png)
### 测试时不重建数据库
如果不需要每次测试都重新创建数据库,可以执行命令:
```
$ 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类生成对应的单元测试骨架代码减少人工重复编写代码的时间和成本。