云之家集成

2.3.1准备

进入云之家后台建立轻应用

准备好APP ID 、APPSecret 和 团队EID。

2.3.2集成要点

类似于微信,云之家对外开放的接口都需要通过信鸿OAuth2.0授权协议获取到accessToken进行授权后才能访问。

云之家access_token有效期为7200秒,不同于微信,通过云之家URL在7200秒之内获取到的access_token不变,在第三方应用后台将access_token缓存到redis时注意逻辑的处理,必要时需要调用云之家刷新access_token的刷新接口。

获取云之家用户信息流程

集成过程

2.3.3开发步骤

2.3.3.1登录云之家后台,配置应用入口URL和可见范围

2.3.3.2 配置的入口URL跳转到应用的中间页面并追加带入ticket,调用后台登录接口并传入ticket。

URL举例:

http://192.168.0.1/?redirectPage=ApprovalPage&pageName=XinHong&ticket=APPURLWITHTICKETc0ac6a233e97e73467a1fc10898b185e&client_id=500000183&expire_time=1577781405153&msgShowStyle=31#/approval/nav/n5/approval-list

2.3.3.3 后台通过ticket等获取云之家用户信息,验证并做登录

1)根据应用appId+应用Secret 获取access_token,并缓存到redis

2)根据access_token+ticket获取云之家用户基本信息 (userName、userId、jobNo)

3)根据userid和jobNo匹配后台用户信息映射表 并做应用的登录

核心代码

/**
* 获取并验证云之家映射用户信息
* @param map
* @return
*/
public ModuleReturn<?> preLoginForXH(LoginUser loginUser) {
ModuleReturn<?> moduleReturn = ModuleReturn.ok();
String ticket = loginUser.getTicket();
if(ticket==null||"".equals(ticket))
{  String xhNoTicket = messageHandler.getMessage("xhNoTicket");   moduleReturn.setCode(ConstUtils.COM_FAIL_500);  moduleReturn.setReturnMessage(xhNoTicket);  return moduleReturn ;
}  SystemService sService = SpringBeanUtil.getBean(SystemService.class);
String accessToken = this.getAccessToken();
AdSysParamDto aspd = sService.getAdSysParamDtoByTypeAndCode("XH_PARAM","USER_INFO_URL");
AdSysParamDto aspd2 = sService.getAdSysParamDtoByTypeAndCode("XH_PARAM","APP_ID");
if(aspd!=null && aspd2!=null)
{  String userUrl = aspd.getParamValues();//url  String appId = aspd2.getParamValues();  if(userUrl!=null)  {  userUrl = userUrl.replace("{ACCESS_TOKEN}", accessToken);  JSONObject userParam = new JSONObject();  userParam.put("appid", appId);  userParam.put("ticket", ticket);  String userParamStr = userParam.toString();  logger.debug("*****ticket:"+ticket+"****获取云之家用户信息接口URL:"+userUrl+"************");          logger.debug("*****ticket:"+ticket+"****获取云之家用户信息接口参数:"+userParamStr+"************");                  String resStr = LocalUtil.sendPost(userUrl, userParamStr);  logger.debug("*****ticket:"+ticket+"****获取云之家用户信息接口结果:"+resStr+"************");  JSONObject json = JSONObject.parseObject(resStr);  String errorCode = json.getString("errorCode") ;  if(errorCode.equals("0"))  {  JSONObject data = json.getJSONObject("data");  String userId = data.getString("userid");  String jobNo = data.getString("jobNo");  if(userId!=null && !"".equals(userId))  {  Map<String, Object> param = new HashMap<String, Object>();  param.put("xhUserId", userId);  param.put("xhJobNo", jobNo);  ModuleReturn<UserInfoXhMappingDto> weUserModule = userInfoXhMappingAPI.queryUserInfoXHMapping(param);  if(weUserModule.isSuccess())  {  UserInfoXhMappingDto xhUser = weUserModule.getDatas();  if(xhUser!=null)  {  String userAccount = xhUser.getUserAccount();  loginUser.setIsPointLogin("1");//单点登录  loginUser.setUserAccount(userAccount);  loginUser.setPassword(userAccount);//单点登录密码不校验  }  }  else //未获取到映射关系,根据jobNo登录并建立映射关系  {  UserInfoDto userDto = new UserInfoDto();  userDto.setUserAccount(jobNo);  userDto.setDeletedFlag(AppConstUtil.DEL_FLAG_NO);  ModuleReturn<UserInfoDto> userModule = userInfoAPI.selectOne(userDto);  if(userModule.isSuccess()&&userModule.getDatas()!=null)  {  UserInfoDto uDto = userModule.getDatas();  String userAccount = uDto.getUserAccount();  loginUser.setIsPointLogin("1");//单点登录  loginUser.setUserAccount(userAccount);  loginUser.setPassword(userAccount);//单点登录密码不校验  UserInfoXhMappingDto userIfoXhDto =new UserInfoXhMappingDto();  userIfoXhDto.setUserId(uDto.getId());  userIfoXhDto.setUserAccount(userAccount);  userIfoXhDto.setXhUserId(userId);  userIfoXhDto.setXhJobNo(jobNo);  Date sysDate = DateCovertUtil.getSysDate();   userIfoXhDto.setGmtCreate(sysDate);  userIfoXhDto.setGmtModified(sysDate);  userIfoXhDto.setCreateBy(uDto.getId());  userIfoXhDto.setLastModifiedBy(uDto.getId());  userIfoXhDto.setDeletedFlag(AppConstUtil.DEL_FLAG_NO);  userInfoXhMappingAPI.saveUserXHMapping(userIfoXhDto);  }  else  {  String xhNoPermission = messageHandler.getMessage("xhNoPermission");   logger.debug("*********云之家用户"+jobNo+"对应的本系统用户不存在************");  moduleReturn.setCode(ConstUtils.COM_FAIL_500);  moduleReturn.setReturnMessage(jobNo+xhNoPermission);  return moduleReturn ;  }  }  }  else  {  String tip = messageHandler.getMessage("xhNoUserId");  moduleReturn.setCode(ConstUtils.COM_FAIL_500);  moduleReturn.setReturnMessage(tip);  return moduleReturn ;  }  }
}  return moduleReturn;

2.3.4 集成效果

应用集合:

第三方应用入口:

第三方应用页面:

云之家集成第三方应用相关推荐

  1. 艾科思移动报表平台与金蝶云之家集成

    一.绑定云之家 本页下面的内容截图中找到相应的配置 二. 云之家团队EID配置 登陆 https://www.yunzhijia.com 云之家平台,获得团队EID信息 三. 轻应用配置 假设您已创建 ...

  2. 金蝶云如何html5登录,第三方系统单点登录到金蝶云指南V2

    启用第三方系统登录授权 2   测试第三方系统单点登陆 使用生成的链接测试是否能正常的单点登录. 3   在第三方系统中生成签名授权的URL [参数格式]:ud={"dbid":& ...

  3. 金蝶协同HTML流程,云之家网页版登录,开启高效协同操作

    现在很多企业开始使用办公协同软件,企业内的员工可以更好的进行信息的交流和工作的协调与配合.金蝶云之家就是非常不错的企业办公软件,可以帮助企业实现业务协同操作,而且也能够满足大中型企业移动化创新的追求. ...

  4. 金蝶s-HR V8.2、EAS与云之家同步常见问题集锦(一)

    写在前面的话:请升级为最新同步工具!请升级为最新同步工具!请升级为最新同步工具! 截止发布本帖之前,最新的同步工具是2018年1月24日发放的,在此日期前部署的同步工具都是老版本的.同步工具每一次的升 ...

  5. Spring Boot 快速集成第三方登录功能

    Spring Boot 快速集成第三方登录功能 前言 此 demo 主要演示 Spring Boot 项目如何使用 史上最全的第三方登录工具 - JustAuth 实现第三方登录,包括 QQ 登录.G ...

  6. SpringBoot项目中集成第三方登录功能

    SpringBoot项目中集成第三方登录功能 引言 1 环境准备 2 代码实现 3 第三方平台认证申请 4 打包和部署项目 5 第三方平台登录认证测试 6 参考文章 引言 最近想把自己在公众号上介绍过 ...

  7. 分析报告:云之家V9 VS 钉钉3.5

    http://news.yesky.com/hotnews/1/244252501.shtml 1.市场调研 1.1 企业需求 笔者所在单位是一家中型企业,企业流程和信息化基础较为成熟.随着移动互联网 ...

  8. 远光软件获得阿里云产品生态集成认证,携手阿里云共建新合作

    近日,远光软件股份有限公司新一代企业数字核心系统远光达普(YG-DAP)V7.1 通过阿里云产品集成认证测试,与阿里云旗下的阿里云应用服务器(V1.0).阿里云 PolarDB 数据库管理软件.消息队 ...

  9. 【SaaS】一年收款破亿,金蝶云之家与田荣举“向上的青春”

    作者:牛成  | 小编:阿软 媒体沟通会上的田荣举很激情,展现出一种更年轻的面貌. 确实,云之家创业可以说是他管理软件生涯的又一春.20多年ERP经历,此前长期担任金蝶CTO,转而做云之家CEO,进入 ...

  10. 集成第三方推送最佳实践

    集成第三方推送最佳实践 字数6571  阅读7983  评论46  喜欢57 本文会不定期更新,推荐watch下项目.如果喜欢请star,如果觉得有纰漏请提交issue,如果你有更好的点子可以提交pu ...

最新文章

  1. LSTM入门学习——结合《LSTM模型》文章看
  2. 使用键值flyweight的Boost.Flyweight示例
  3. java深拷贝和浅拷贝_Java 深拷贝浅拷贝 与 序列化
  4. 在洛谷开了一个邀请赛
  5. matlab vs2010编译器xml,matlab(R2010a)找不到vs2010的c++编译器
  6. Vue.js项目中,当图片无法显示时则显示默认图片
  7. mongooseDB数据库添加账号
  8. editor修改样式 vue_vue修改富文本中的元素样式
  9. Cglib动态代理实现原理
  10. 微信公众号H5支付的两种方式
  11. 采写编杂志采写编杂志社采写编编辑部2022年第10期目录
  12. Markdown箭头总汇
  13. LiveCharts心得
  14. sop8语音芯片选型,九齐硕呈等等比较,看完此篇就足够了
  15. 谣言检测论文精读——11.PAKDD2020-SAFE: Similarity-Aware Multi-Modal Fake News Detection
  16. Whitelabel Error Page并且报500
  17. C++ define的用法
  18. python给我做500份问卷
  19. Luogu P1535 【游荡的奶牛】
  20. CSS3转换属性—transform之translate、rotate、scale函数详解

热门文章

  1. 2022开源的群管理机器人源码+实测可用
  2. Android截屏的几种方法
  3. java smslib rxtx_SMSLIB+RXTX 短信猫开发模块
  4. 西部数据硬盘不同色彩的含义
  5. 配置无线AP 采用POE供电模块怎么配置无线AP没有POE交换机
  6. ftp常用命令使用方法
  7. distpicker使用记录
  8. android 播放视频文件格式,安卓播放exe视频,如何将exe格式视频转换成常用格式视频...
  9. 宇宙最强API接口调试工具Apipost
  10. JMeter之接口测试脚本编写