# 流程

> 客户通过主菜单进入系统
1. 客户点击乙方系统主菜单后,乙方网关调用甲方(广发)接口,由甲方(广发)判断用户是否已授权,如已授权可以正常使用。
2. 如未授权,提示没有授权。
3. 如果用户信息正常,可以使用,乙方用户模块根据tokenId获取权限清单,展示功能列表。
4. 点击功能菜单,调用iframe在客户系统中展示。
第二种:
> 客户不点击主菜单,直接在客户系统中点击某功能通过iframe展示数据
1. 客户点击某功能点,乙方网关调用甲方(广发)接口,由甲方(广发)判断用户是否已授权,如已授权可以正常使用。
2. 如未授权,提示没有授权。
3. 如果用户信息正常,网关继续判断tokenId是否有此功能项的权限。
4. 如果没有权限,提示没有该菜单项的权限。
5. 如果有权限,则通过iframe调转。
## API接口
前提:url功能清单已在客户系统维护
### Token API
- 介绍:乙方根据甲方http报文头中自带token信息,去验证token。
- 地址:http://*****/threadApi/validate/token
- 参数:
head报文头参数
参数| 说明
---|---
Authorization|存放tokenId信息
- 返回值
返回字段 | 说明
---|---
code|返回码
data|返回数据
msg|返回提示信息
winRspType|SUCC-成功、ERROR-失败
示例:
成功
```
{
"code": "200",
"data": {},
"msg": "string",
"winRspType": "SUCC"
}
```
失败
```
{
"code": "400",
"data": {},
"msg": "string",
"winRspType": "ERROR"
}
```
### validate token permission API
- 介绍:乙方根据token信息和操作的url信息,判断用户是否有操作此功能的权限
- 地址:http://*****/threadApi/validate/permission/
- 参数:
body报文体入参:
参数| 说明
---|---
tokenId|tokenId信息
url|操作功能项的url
- 返回值:
返回字段 | 说明
---|---
code|返回码
data|返回数据
msg|返回提示信息
winRspType|SUCC-成功、ERROR-失败
### User Function List API
- 介绍:乙方根据token信息获取权限清单(功能列表)
- 地址:http://*****/threadApi/data/permissionsList/
- 参数:
body报文体入参:
参数| 说明
---|---
tokenId|tokenId信息
- 返回值:
返回字段 | 说明
---|---
code|返回码
data|返回数据
msg|返回提示信息
winRspType|SUCC-成功、ERROR-失败
## 前端Iframe之间相互调用
### Iframe相互调用原理

1. 客户系统主界面相当于父界面
2. 已方系统访问甲方(广发)客户系统,通过window.top.postMessage发送data到父界面的url上,data结构可以使用json字符串,其中必输字段为将要访问的甲方(广发)功能点url链接。例如:data数据类型
```
{
"name":"标签信息" ,
"url":"http://***/info", //必输,主页面转发地址
"msg":"",
...
}
```
3. 主界面使用window.addEventListener监控message事件,并使用vuex(vue状态管理框架)或redux(react)存放并监控数据的变化,进行路由跳转,从而改变调转后的页面里的iframe的url的变化。