# 基本概念
## <span id="des1">基本概念</span>
### 服务商
WPS开放平台面向开发者定义两种类型的服务商,分别为:企业服务商和平台服务商
#### 企业服务商
在金山文档上开通了企业账户,并且以企业账户下的超管登录开放平台的这类企业,开放平台为自动为企业生成企业服务商,成为企业服务商的默认状态为「未认证」,未认证的企业服务商只可创建 [企业内建应用](https://) 。
若此服务商需要创建 [第三方个人应用](https://) 和 [第三方企业应用](https://) 时,需要完成服务商认证,提供认证相关的信息(如:企业营业执照,企业官网等信息)才可创建。
#### 平台服务商
非金山文档企业账户,可通过开放平台申请服务商,通过完成服务商认证后,可创建 [第三方个人应用](https://) 和 [第三方企业应用](https://)
######

<center>服务商与可创建的应用关系示意图</center>
</br>
```
注:暂不支持将平台服务商与金山文档中的企业进行关联
```
##### 服务商类型
类型 | 说明
---|:---:|
平台服务商 | 非金山文档企业,通过开放平台完成注册的服务商,可创建「第三方个人应用」、「第三方企业应用」 |
企业服务商 |金山文档企业在开放平台默认生成的服务商,企业服务商存在「未认证」和「已认证」两种状态,未认证状态仅可创建企业内建应用,已认证状态可创建「第三方个人应用」、「第三方企业应用」和「企业内建应用」 |
---
### 应用类型
针对不同场景下的需求,因第三方应用面向的使用群体不同,在不同的场景下开放平台需要验证对应应用可操作的权限。
#### 第三方企业应用
第三方应用集成开放平台开放给企业的能力后,将应用上架到WPS开放平台的应用中心,金山文档中的企业管理员可通过应用中心以将此类应用添加到企业,授权给企业员工办公使用。
#### 第三方个人应用
第三方应用集成开放平台开放给个人的能力后,将应用上架到WPS客户端应用中心,由个人WPS运营团队上架到WPS客户端应用中心,为WPS用户提供应用能力,如:文件收集,身份证识别,超级PPT等
#### 企业内建应用
金山文档企业客户集成开放平台开放给企业的能力后,发布到企业内部进行,由企业管理员授权予企业员内部使用的应用,如:企业OA等
##### 应用类型说明
名称 | 说明 |
---|:---:|
第三方企业应用 | 由平台服务商或已认证的企业服务商通过开放平台创建的应用,此类应用可以在被企业管理员授权之后,对应WPS+企业用户使用 |
第三方个人应用 | 由平台服务商或已认证的企业服务商通过开放平台创建的应用,此类应用在被个人用户授权之后可使用 |
企业内建应用 | 由企业服务商通过开放平台创建的应用,此类应用仅能被应用创建的WPS+企业内的企业用户使用 |
---
### 授权说明
针对不同应用开放平台定义了针对第三方的应用获取不同能力使用权限和应用需要获取的企业或个人信息时,通过完成不同类型的应用鉴权方可完成对接。目前定义的授权类型如下:应用授权、个人授权、企业授权。
#### 应用授权
企业或个人使用开放平台开放的第三方应用时,由开放平台验证应用的有效性并获取企业的使用权限,并发放授权给企业管理员开通应用的授权方式。WPS开放平台会推送企业授权变更应用事件给第三方企业应用,第三方企业应用需要进行企业信息初始化和授权。
> 授权流程图
```plantuml
participant 应用 AS A
participant 开放平台 AS B
A->A: 配置ip白名单,并开通相应功能权限
A->B: 使用appid、appkey和功能权限对应的scope获取app_token
B-->A: 返回app_token
A->B: 使用app_token进行相关功能操作
```
#### 个人授权
第三方应用需要获取用户信息(如:头像、用户名、用户文件等)时,由开放平台发起的授权流程,用户完成授权后,第三方应用可通过获取到的access_token进行数据获取。
> 授权流程图
```plantuml
participant 应用 AS A
participant 用户 AS B
participant 开放平台 AS C
A->A: 配置应用授权回调地址、ip白名单
A->B: 构造授权链接
B->C: 访问授权链接地址,并点击授权
C->C: 校验授权回调地址、scope等信息
C->A: 生成临时授权code并重定向到授权回调地址
A->C: 使用临时授权code获取用户授权的access_token
C-->A: 返回access_token
A->C: 使用access_token访问用户数据
```
#### 企业授权
由系统管理员对第三方应用进行的授权,如获取企业通讯录的管理权限、角色配置权限、审核日志的查询权限等,此类授权一般需要获取管理员角色相关的权限。通过企业授权获取company_token,第三方应用可以在业务系统中的对应场景操作以上管理员才具备的数据权限
> 授权流程图
```plantuml
participant 应用 AS A
participant 企业超级管理员 AS B
participant 开放平台 AS C
A->A: 配置应用授权回调地址、ip白名单及企业授权通知地址
A->B: 构造企业授权链接
B->C: 访问企业授权链接地址,并点击授权
C->C: 校验授权回调地址、scope等信息
C->>A: 通过授权通知地址,通知授权状态
C->A: 重定向到授权回调地址
A->C: 使用appid、appkey获取company_token
C-->A: 返回company_token
A->C: 使用company_token访问企业数据(通讯录、企业团队、文档等)
```
### FAQ
> #### 授权code
授权后的临时码,合作方通过code进行获取token的时候需要用到,code的超时时间为10分钟,且使用一次就会失效。
> #### 授权access_token
在用户允许授权后,可以获取到一个授权特有的接口调用凭证(授权access_token),通过应用授权access_token可以进行授权后接口调用,如获取用户基本信息。
access_token有效期为24小时,过期后可用refresh_token(有效期暂为90天,不要记录该时间,过期后需重新授权)刷新换取新的access_token,每次换新的token,旧的都会失效。
> #### 关于UnionID机制
如果开发者拥有多个应用,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为同一用户,对同一个开放平台下的不同应用,unionid是相同的。
> #### 关于OpenID机制
用户唯一标识,在不同应用中同一用户的openid不同。