本文介绍了苍穹企业信息处理中枢与类似云之家、企业微信等手机APP的集成过程,包括第三方APP配置、苍穹的基础配置(如人员同步和单点登录)、参数配置和接口开发。通过详细步骤说明如何创建应用、配置密钥和域名、实现单点登录和人员同步,并以企业微信为例,详细解释了集成流程和代码实现,如URL编码、配置工作台应用主页、同步企业微信人员信息等。同时,还介绍了苍穹标准产品已集成的功能和其他第三方应用可参考的实现方式。
随着移动互联网的兴起,越来越多的人喜欢在手机APP中处理个人生活和工作相关的事宜,下一代苍穹作为企业信息处理中枢,需要和类似云之家、企业微信之类的手机APP应用进行集成以方便用户业务处理。
1 实现步骤
1.1第三方APP应用配置
第三方应用与苍穹进行集成,我们首先需要在第三方APP创建对应的应用并发布。针对不同的第三方应用,需要做不同的配置和操作,如配置对应的密钥,域名,接口权限等(一般可从第三方应用接口文档可获取详细步骤)
1.2苍穹配置
1. 基础配置
(1)人员同步
目前苍穹标准产品预置了云之家、企业微信、钉钉等第三方应用的同步功能。
在系统服务云-配置工具-系统参数-系统服务云-基础服务中启用对应的第三方应用后,在系统服务云-基础服务-人员中会显示对应的同步按钮。其他第三方应用如果也需要做人员同步操作,可参考标准产品同步方案。
标准产品的同步方案:
a.同步功能的主要逻辑是,通过第三方系统提供的组织人员接口,获取到人员信息,并以两个系统中人员的焦点(比如手机号、邮箱账号等)作为比较条件,建立两个系统的人员映射关系,存储至苍穹系统中。
b.苍穹与微信、钉钉等第三方系统人员映射关系表t_bas_immapping
字段 | 编码 | 类型 | 描述 |
FID | Bigint(20) | ||
映射类型ID | FIMTYPEID | Bigint(20) | 0~100为原厂预留,扩展渠道第三方需要>100 |
苍穹人员ID | FUSERID | Bigint(20) | t_sec_user表中ID |
第三方系统人员ID | FOPENID | Varchar(80) |
c.参考代码实现:
kd.bos.sec.user.utils.UserOperationUtils.synWxqyh,该方法为企业微信同步人员信息实现过程,其中saveIMMapping方法为保存账号映射关系。
注意:需要同步处理人员新增情况,考虑第三方是否提供增量同步接口等。
(2)单点登录
目前苍穹标准产品已经实现与企业微信,钉钉和微信公众号的单点登录认证,在系统服务云-配置工具-单点登录中添加对应的应用账号信息即可。其他第三方APP需要自己实现单点登录,实现方式见3.3接口开发。
2. 参数配置
在配置管理中心配置当前环境需要使用的第三方APP的类,如果多个APP同时存在,多个类之间用,隔开。
1.3接口开发
1.实现与第三方APP应用的集成,苍穹接收到第三方的请求后需要处理与第三方应用的认证处理逻辑。开发时只需要实现一个类继承ThirdAppAuthtication并重写isNeedHandle和appAuthtication方法。
package kd.bos.login.thirdauth.app; import javax.servlet.http.HttpServletRequest; import kd.bos.dc.api.model.Account;import kd.bos.login.thirdauth.app.AppAuthResult; public abstract class ThirdAppAuthtication { public abstract boolean isNeedHandle(HttpServletRequest arg0, Account arg1); public abstract AppAuthResult appAuthtication(HttpServletRequest arg0, Account arg1); }
2.isNeedHandle方法
方法的目的检查当前所使用的url是否是本APP应用自己需要处理的,如果是返回true,否返回false。
(1)示例:
@Override public boolean isNeedHandle(HttpServletRequest request,Account currentCenter) { boolean isNeed = false; String ticket = request.getParameter("ticket"); if(StringUtils.isNotEmpty(ticket)&&){ isNeed=true; } return isNeed; }
(2)参数说明:
传入参数:
返回参数 | 参数类型 | 参数说明 |
request | request | 当前访问的HttpServletRequest对象 |
返回参数:
返回参数 | 参数类型 | 参数说明 |
isNeed | Boolean | 当前所使用的url是否是本APP应用自己需要处理的,如果是返回true,否返回false |
2.实现appAuthtication方法
方法的目的是如果当前所使用的url是本应用需要处理的,则自己实现和第三方应用的认证处理逻辑并返回用户的标识及标识类型,方便苍穹系统建立关联。
(1)示例:
@Override public AppAuthResult appAuthtication(HttpServletRequest request,Account currentCenter) { // TODO Auto-generated method stub AppAuthResult result = new AppAuthResult(); result.setSucceed(false); try { String ticket = request.getParameter("ticket"); // 请求的URL路径 String path = request.getServletPath(); // 轻应用id确定,由于云之家url变更做如下处理 AppContext appCtx = TicketService.getContextByTicket(currentCenter.getTenantId(), ticket); if (appCtx != null) { result.setSucceed(true);// result.setUserFlag(appCtx.getMobile()); result.setUserType(UserType.MOBILE_PHONE); } } catch (KDException ex) { throw ex; } catch (Exception e) { logger.error(e); String sMsg = String.format("App验证错误: ", ExceptionUtils.getExceptionStackTraceMessage(e)); throw new KDException(LoginErrorCode.loginBizException, sMsg); } return result;
(2)参数说明
传入参数:
返回参数 | 参数类型 | 参数说明 |
request | request | 当前访问的 HttpServletRequest对象 |
currentCenter | Account | 当前使用的账套对象 |
返回参数:
返回参数 | 参数类型 | 参数说明 |
result | AppAuthResult | 当前认证的结果 |
a. AppAuthResult.isSucceed :认证是否成功,如果是返回true,否返回false;
b.AppAuthResult.UserType:返回用户的类型。目前支持手机,uid,yzhuid三种 ,以后可扩展;
c.AppAuthResult.UserType:返回用户类型具体的值。
注:目前苍穹标准产品已集成云之家、企业微信等单点登录,其他第三方应用实现可参考YZJAppAuthtication、WxqyhAuthtication。
2 集成企业微信
以企业微信集成苍穹人人差旅为例,讲解苍穹如何集成第三方应用,其他第三方应用也是类似的实现过程。
2.1企业微信配置
获取企业ID
2. 创建应用
(1)输入应用名称、上传应用Logo,应用介绍,并制定应用可见范围,创建应用。
(2)获取应用ID和应用秘钥
3. 设置网页授权及JS-SDK
(1)需要在创建的应用中设置可信域名,可信域名必须和苍穹的域名一致,否则不能正常跳转。填写时注意规则,不需要填写http或者https,如有端口号可以填上端口号
4. 构造访问的URL
(1)拼接参数
需要在苍穹的人人差旅地址中把以下参数拼接到URL中:
a. 第一个参数是apptype,值必须是wxqyh,
b. 第二个参数是corpid,企业id,
c. 第三个参数是agendid,即应用Id,AgentId
(如果是多数据中心需要指定数据中心的话,可在这里拼加参数accountId=XXX,数据中心id可在mc中查看)。
(2)编码:将拼接完成后的URL进行编码,使用百度urlencode在线编码工具,把拼接完成的URL进行编码,编码后的结果替换下面URL中的REDIRECT_URL
示例:
苍穹的人人差旅访问地址为:
https://feature.kingdee.com:2024/baseline_a/?formId=er_tripreqbill
拼接完后后的结果是:
百度urlencode在线编码工具,把上面的链接进行编码,编码后的结果替换下面链接中的redirect_uri:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect
5. 设置工作台应用主页:设置第4步构造的URL
2.2苍穹配置
1.基础配置
(1)配置企业微信参数
a.操作位置:系统服务云-配置工具-系统参数-系统服务云-基础服务
b.配置企业ID和通讯录应用秘钥,以下截图为获取方式:
(2)人员同步(同步企业微信人员信息)
a.操作位置:系统服务云-基础服务-人员-企业微信同步(注:只有在系统参数中启用了企业微信,该按钮才会显示)
b.点击企业微信同步按钮,在企业微信【通讯录】api授权的前提下,系统会将企业微信人员信息映射到苍穹系统中(如想了解同步的实现过程,可调式代码kd.bos.sec.user.utils.UserOperationUtils中synWxqyh方法)。
注:是否同步成功可以通过查询映射表确认(系统库t_bas_immapping)
SELECT * FROM t_bas_immapping t WHERE t.`FUSERID`='xxx' AND t.`FIMTYPEID`='3';
(其中FUSERID为表t_SEC_User的id)
2. 环境配置
(1)单点登录配置:
a. 操作位置:系统服务云-配置工具-单点登录-企业微信号或者进入开发平台,搜索cts_wxqyh基础资料,新增企业微信的信息
(2)苍穹环境配置:
a.在mc中添加企业微信登录认证的配置参数:
配置项authtication.apps中的值添加
kd.bos.login.thirdauth.app.tencent.WxqyhAuthtication(注:公有云苍穹系统中默认已经添加该属性)
b. 添加完成后需要保存并发布集群
推荐阅读