对接服务端API
- 对接应用ticket回调,获取并缓存应用凭证(suite_access_token)(必选)-> 应用凭证管理
- 对接应用安装授权流程,获取并缓存机构凭证(access_token)(可选)-> 应用安装授权
- 对接登录授权流程,用户登录后获取并缓存用户凭证(access_token)(必选)-> 用户登录验证
- 对接通讯录变更事件回调通知流程,拉取并缓存用户、组织架构数据(可选)-> 通讯录变更事件
- 对接消息推送流程,向机构成员推送企业微信、微信消息(可选)-> 消息通知
- 对接消息中心,作为消息通道,接收来自第三方应用的消息,并向用户展示(可选)-> 消息通道
对接前端API
参考:登录接入方式
典型场景
仅登录
仅为了校验用户的身份,以及只会用到登录用户的相关信息,不需要以机构身份来获取机构的其它数据。
- 页面链接支持code参数,获取到code后,使用/open/access_token接口获取用户的access_token,缓存起来。
- 使用/account/userinfo获取登录用户的信息,返回内容有几个关键信息:
- corpid: 登录的机构ID,可以知道用户是哪个机构的。
- userid: 登录的用户ID,可以知道具体是哪个用户,用来做后续用户数据的存取。
- role_id: 登录的角色,可以知道 用户的角色,用来判断允不允许使用本应用。比如应用是给教师提供服务的,那只能允许role_id为教师的登录,其余角色需要引导页提示不支持。
- 一般需要会给用户派发应用自己的token,有效期与上述access_token一致即可, 避免将access_token暴露给用户。
应用(不缓存数据)
给教师提供功能的应用,能够查看班级学生、家长信息。 给学生提供功能的应用,能够查看班级、同学、家长信息。 给家长提供功能的应用,能够查看孩子信息。 不缓存用户及组织架构数据,每次都实时从平台侧拉取。
- 搭建回调服务,回调服务需要支持:
- 接收Ticket,将Ticket保存起来;使用/service/get_suite_token换取应用的access_token,缓存起来。
- 接收应用授权通知,将预授权码缓存起来;使用/service/get_permanent_code换取机构的永久授权码,保存起来;使用/service/get_corp_token换取机构的access_token,缓存起来。
- 接收应用变更通知,拉取最新的授权状态(比如应用被停用了),停用状态的应用应该不允许用户登录。
- 接收应用取消授权通知,删除授权码及应用存储的机构相关的数据。
- 其余通知,直接返回success即可。
- 页面链接支持code参数,获取到code后,使用/open/access_token接口获取用户的access_token,缓存起来。
- 使用/account/userinfo获取登录用户的信息,返回内容有几个关键信息:
- corpid: 登录的机构ID,可以知道用户是哪个机构的。
- userid: 登录的用户ID,可以知道具体是哪个用户,用来做后续用户数据的存取。
- role_id: 登录的角色,可以知道用户的角色,用来判断允不允许使用本应用或者是展示什么样的内容。
- 一般需要会给用户派发应用自己的token,有效期与上述access_token一致即可, 避免将access_token暴露给用户。
- 对不同的用户展示不同的内容:
- 教师
- 使用/teacher/class/list获取任课的班级列表。
- 使用/school/user/list获取班级下的学生列表和家长列表。
- 学生
- 使用/school/user/get获取学生的班级信息和家长信息。
- 使用/school/department/list获取班级的详细信息。
- 使用/school/user/list获取班级下的学生列表。
- 家长
- 使用/school/user/get获取家长的小孩信息。
- 教师
应用(缓存数据)
给教师提供功能的应用,能够查看班级学生、家长信息。 给学生提供功能的应用,能够查看班级、同学、家长信息。 给家长提供功能的应用,能够查看孩子信息。 缓存用户及组织架构数据,使用时直接使用本地数据。
- 搭建回调服务,回调服务需要支持:
- 接收Ticket,将Ticket保存起来;使用/service/get_suite_token换取应用的access_token,缓存起来。
- 接收应用授权通知,将预授权码缓存起来;使用/service/get_permanent_code换取机构的永久授权码,保存起来;使用/service/get_corp_token换取机构的access_token,缓存起来;返回success后,需要做本地数据初始化:
- 使用/department/list拉取所有教职工部门,生成部门树。
- 使用/user/list分页拉取所有教职工。
- 使用/school/department/list拉取所有家校部门,生成家校部门树,根据部门类型可标识哪些节点是班级。
- 使用/school/user/list分页拉取所有学生和家长。
- 对所有班级,使用/class/teacher/list拉取每个班级下的教师。
- 接收应用变更通知,拉取最新的授权状态(比如应用被停用了),停用状态的应用应该不允许用户登录。
- 接收应用取消授权通知,删除授权码及应用存储的机构相关的数据。
- 接收内部通讯录新增成员和更新成员通知,使用/user/get查询教职工并更新本地数据,注意兼容重复通知的情况,对本地不存在的,应执行新增操作,对平台不存在的,应执行删除操作;使用/teacher/class/list查询教师的任课班级信息,更新地本数据。
- 接收内部通讯录删除成员通知,删除本地教职工数据。
- 接收内部通讯录新增部门通知,使用/department/list查询新部门并更新本地数据。
- 接收内部通讯录更新部门通知,使用/common/department/get查询部门最新数据并更新本地数据。
- 接收内部通讯录删除部门通知,删除本地部门数据。
- 接收家校通讯录新增学生和更新学生通知,使用/school/user/get查询学生信息并更新本地数据,注意兼容重复通知的情况,对本地不存在的,应执行新增操作,对平台不存在的,应执行删除操作。
- 接收家校通讯录删除学生通知,删除本地学生数据。
- 接收家校通讯录新增家长和更新家长通知,使用/school/user/get查询家长信息并更新本地数据,注意兼容重复通知的情况,对本地不存在的,应执行新增操作,对平台不存在的,应执行删除操作。
- 接收家校通讯录删除家长通知,删除本地家长数据。
- 接收家校通讯录新增部门通知,使用/school/department/list查询新部门并更新本地数据。
- 接收家校通讯录更新部门通知,使用/common/department/get查询部门最新数据并更新本地数据。
- 接收家校通讯录删除部门通知,删除本地部门数据。
- 页面链接支持code参数,获取到code后,使用/open/access_token接口获取用户的access_token,缓存起来。
- 使用/account/userinfo获取登录用户的信息,返回内容有几个关键信息:
- corpid: 登录的机构ID,可以知道用户是哪个机构的。
- userid: 登录的用户ID,可以知道具体是哪个用户,用来做后续用户数据的存取。
- role_id: 登录的角色,可以知道用户的角色,用来判断允不允许使用本应用或者是展示什么样的内容。
- 一般需要会给用户派发应用自己的token,有效期与上述access_token一致即可, 避免将access_token暴露给用户。
- 对不同的用户展示不同的内容:
- 教师
- 查询本地的教师任课班级列表。
- 查询本地的班级下的学生列表和家长列表。
- 学生
- 查询本地的学生的班级信息和家长信息。
- 查询本地的班级的详细信息。
- 查询本地的班级下的学生列表。
- 家长
- 查询本地的家长的小孩信息。
- 教师
数据源
在项目侧作为数据源的应用,管理组织架构数据和人员数据,同步到教育号。数据期望以应用侧的为准。 数据源应用需要申请对应数据的写权限,才能调用相应接口进行数据的写操作。 建议是提供oauth2的协议及通知功能,由平台的适配层来做数据转换和写入。 以下是不使用平台的适配层,直接来同步数据的实现,同步时需要判断数据是否已存在,一般需要做字段映射存储。
- 搭建回调服务,回调服务需要支持:
- 接收Ticket,将Ticket保存起来;使用/service/get_suite_token换取应用的access_token,缓存起来。
- 接收应用授权通知,将预授权码缓存起来;使用/service/get_permanent_code换取机构的永久授权码,保存起来;使用/service/get_corp_token换取机构的access_token,缓存起来。
- 接收应用变更通知,拉取最新的授权状态(比如应用被停用了),停用状态的应用应该不再进行数据同步。
- 接收应用取消授权通知,删除授权码及应用存储的机构相关的数据。
- 其余通知,一般也需要做处理,比如确认数据变更结果是否与本地数据是一致的,不一致的情况是否需要处理。注意需要有保护逻辑,防止乒乓球效应(比如陷入更新->通知->查询并更新->通知->查询并更新->通知...的循环)。
- 数据同步:在本地数据发生变更时,同步到平台
- 部门数据:使用/common/department/get查询部门是否存在,不存在则使用/department/create创建新部门,保存创建后的部门id;使用/department/update更新部门;使用/department/delete删除部门。
- 教职工数据: 使用/user/get查询教职工是否存在,不存在则使用/user/create创建教职工,保存创建后的用户id;使用/user/update_info更新教职工;使用/user/delete删除教职工。
- 家校部门数据: 使用/common/department/get查询部门是否存在,不存在则使用/school/department/create创建新的家校部门,保存创建后的部门id;使用/school/department/update更新家校部门,使用/school/department/delete删除家校部门。
- 学生数据: 使用/school/user/get查询学生是否存在,不存在则使用/school/user/create_student创建学生,保存创建后的学生id;使用/school/user/update_student_info更新学生;使用/school/user/delete_student删除学生。
- 家长数据: 使用/school/user/get查询家长是否存在,不存在则使用/school/user/create_parent创建家长,保存创建后的家长id;使用/school/user/update_parent_info更新家长;使用/school/user/delete_parent删除家长。
- 教师任课数据: 使用/school/department/create在创建班级属性的家校部门时可指定任课教师;使用/school/department/update也可更新或删除班级的任课教师列表。
教师类应用
提供给教师使用的应用。
- 根据应用是否缓存数据,参考上边的应用(不缓存数据)和应用(缓存数据)做搭建回调服务以及处理登录逻辑。
- 判断用户角色
- 使用/account/userinfo获取登录用户的信息
- 返回的role_id=12表示教师(教育局的教职工则为2),因此仅有此身份才允许使用应用功能,其余角色应该做相应的提示。
- 返回的corpid和userid表示哪个学校和哪个用户,可用于查询应用内部产生的数据,一般来说,应用内部产生的数据也应该以这两个ID作为Key来存储。
- 可以使用/user/get查询教师的详细信息。
- 有时候需要知道用户是否是学校管理员,可以使用/common/teacher/get_group来获取教师的其余身份,如果身份里有1或3,则表示有学校管理员的身份。
- 一般教师只对负责的班级有权限
- 可以使用/teacher/class/list获取教师的任课班级。
- 可以使用/school/user/list获取班级下的学生列表和家长列表。
- 使用/account/userinfo获取登录用户的信息