苍穹集成第三方APP应用原创
金蝶云社区-云社区用户71598104
云社区用户71598104
9人赞赏了该文章 5212次浏览 未经作者许可,禁止转载编辑于2021年11月17日 10:25:19

    随着移动互联网的兴起,越来越多的人喜欢在手机APP中处理个人生活和工作相关的事宜下一代苍穹作为企业信息处理中枢,需要和类似云之家企业微信之类的手机APP应用进行集成以方便用户业务处理。

1 实现步骤

1.1第三方APP应用配置

第三方应用与苍穹进行集成,我们首先需要在第三方APP创建对应的应用并发布。针对不同的第三方应用,需要做不同的配置和操作,如配置对应的密钥,域名,接口权限等(一般可从第三方应用接口文档可获取详细步骤)

1.2苍穹配置

1. 基础配置

(1)人员同步

目前苍穹标准产品预置了云之家、企业微信、钉钉等第三方应用的同步功能。

在系统服务云-配置工具-系统参数-系统服务云-基础服务中启用对应的第三方应用后,在系统服务云-基础服务-人员中会显示对应的同步按钮。其他第三方应用如果也需要做人员同步操作,可参考标准产品同步方案。

 image.png

标准产品的同步方案:

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方法为保存账号映射关系。

注意:需要同步处理人员新增情况,考虑第三方是否提供增量同步接口等。

 image.png

(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)参数说明:

传入参数:

返回参数参数类型参数说明
requestrequest当前访问的HttpServletRequest对象

返回参数:

返回参数参数类型参数说明
isNeedBoolean当前所使用的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企业微信配置

  1.  获取企业ID

image.png

2. 创建应用

1)输入应用名称、上传应用Logo,应用介绍,并制定应用可见范围,创建应用。

 image.png

image.png

2获取应用ID和应用秘钥

 image.png

3. 设置网页授权及JS-SDK

1)需要在创建的应用中设置可信域名可信域名必须和苍穹的域名一致,否则不能正常跳转。填写时注意规则,不需要填写http或者https,如有端口号可以填上端口号

 image.png

 image.png

4. 构造访问的URL

(1)拼接参数

需要在苍穹的人人差旅地址中以下参数拼接到URL

a. 第一个参数是apptype,值必须是wxqyh

b. 第二个参数是corpid,企业id

c. 第三个参数是agendid即应用IdAgentId

(如果是多数据中心需要指定数据中心的话,可在这里拼加参数accountId=XXX,数据中心id可在mc中查看)
2编码:将拼接完成后的URL进行编码,使用百度urlencode在线编码工具,把拼接完成的URL进行编码,编码后的结果替换下面URL中的REDIRECT_URL

示例:

苍穹的人人差旅访问地址为:

https://feature.kingdee.com:2024/baseline_a/?formId=er_tripreqbill

完后后的结果是:

https://feature.kingdee.com:2024/baseline_a/?formId=er_tripreqbill&apptype=wxqyh&corpid=CORPID&agentid=AGENTID

百度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

 image.png

2.2苍穹配置

1.基础配置

(1)配置企业微信参数

a.操作位置:系统服务云-配置工具-系统参数-系统服务云-基础服务

 image.png

b.配置企业ID和通讯录应用秘钥,以下截图为获取方式:

 image.png

 image.png

2)人员同步(同步企业微信人员信息)

a.操作位置:系统服务云-基础服务-人员-企业微信同步(注:只有在系统参数中启用了企业微信,该按钮才会显示)

 image.png

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)

 image.png

2. 环境配置

(1)单点登录配置:

a. 操作位置:系统服务云-配置工具-单点登录-企业微信号或者进入开发平台,搜索cts_wxqyh基础资料新增企业微信的信息

 image.png

 image.png

(2)苍穹环境配置

a.在mc中添加企业微信登录认证的配置参数:

配置项authtication.apps中的值添加

kd.bos.login.thirdauth.app.tencent.WxqyhAuthtication(注:公有云苍穹系统中默认已经添加该属性)

 image.png

b. 添加完成后需要保存并发布集群


赞 9