【钉钉免登录】(详解)钉钉接⼝,H5微应⽤,钉钉免登录
及获取当前⽤户信息
本⽂⽬录
⼀、背景描述
公司做⼀个项⽬要集成到钉钉上,但是呢公司⾥⼜没有⼈做过,所以需要⾃⼰研究了。有了需求,就要开始⾏动。
⾸先当然是要去钉钉开放平台查看相关资料,钉钉开放平台地址: 。
⼆、准备⼯作
第⼀、你需要有⼀个 ⾃⼰的 企业钉钉,进⼊企业钉钉管理,如下图所⽰
第⼆、看创建H5微应⽤的教程,链接地址: ,这个教程上⾯有很详细的创建微应⽤的步骤以及注意事项。
三、查看微应⽤配置信息
以下的AgentId、AppKey、AppSecret会⽤到,所以个地⽅保存⼀下,如果你是管理员那就更好了,随时都可以登录钉钉组织查看哦。
3.1 基础信息
3.2 开发管理
重点来喽:服务器出⼝IP,⾃⼰刚开始配置的时候不清楚到底是什么意思,也不懂服务器出⼝IP是⼲什么⽤的,虽然官⽹教程上写的有哈。其实呢,这个服务器出⼝IP(1、本地测试时:填写你 电脑的IP + 端⼝ + 映射路径;2、测试环境或者⽣产环境时:你的测试或者⽣产 服务器IP + 端⼝ + 映射路径或者是域名 + 端⼝号 + 映射路径)就是应⽤所在的电脑IP,可以这样简单理解哈。
3.3 权限管理
注意:如果想要获取钉钉⽤户的⼿机号,需要开通 企业员⼯⼿机号信息 这⼀个权限哦。
⼀般只需要开启以下⼏个权限即可,其他权限可根据需要⾃⾏开通哦。
3.4 版本管理与发布
只有点击确认发布后,才可以在钉钉⼯作台看到微应⽤。
四、核⼼代码
引⼊POM依赖:
<!-- 钉钉SDK -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>alibaba-dingtalk-service-sdk</artifactId>
<version>1.0.1</version>
</dependency>
接下来就是核⼼代码实现喽,可能会有点长哈
4.1 Controller层
package com.iot.daily.dingding.web;
import bean.BeanUtil;
import com.alibaba.fastjson.JSONObject;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.quest.OapiUserGetRequest;
import com.quest.OapiUserGetuserinfoRequest; import com.sponse.OapiUserGetResponse;
import com.sponse.OapiUserGetuserinfoResponse; import com.taobao.api.ApiException;
import com.iot.dailymon.domain.vo.JsonResult;
import com.iot.dailymon.util.CommonUtil;
import com.iot.fig.DingAppConfig;
import com.iot.fig.DingUrlConstant;
import com.iot.daily.dingding.domain.ConfigDTO;
import com.iot.daily.dingding.domain.ServiceResult;
import com.iot.daily.dingding.domain.UserDTO;
import com.iot.ption.DingtalkEncryptException; import com.iot.daily.dingding.service.DingAuthService;
import com.iot.daily.dingding.service.TokenService;
import com.iot.daily.dingding.util.JsApiSignature;
import com.ity.DailyViewUser;
spring到底是干啥的import com.ity.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.Map;
import java.util.Optional;
/**
* <p>DingLoginController 此类⽤于:钉钉企业内部应⽤免登(H5微应⽤)</p>
* <p>@author:hujm</p>
* <p>@date:2021年05⽉18⽇ 15:06</p>
* <p>@remark:钉钉企业内部微应⽤DEMO, 实现了⾝份验证(免登)功能</p>
*/
@Api(value = "dingAuthController", tags = "钉钉企业内部应⽤免登(H5微应⽤)")
@Slf4j
@Controller
@RequestMapping(value = "/ding")
public class DingAuthController {
@Resource
private TokenService tokenService;
@Resource
private DingAppConfig dingAppConfig;
@Resource
private DingAuthService dingAuthService;
/**
* 欢迎页⾯,通过 /welcome 访问,判断后端服务是否启动
*
* @return 字符串 welcome
*/
@ApiOperation(value = "⽇报跳转的⾸页地址")
@RequestMapping("/login")
public String mobileLogin() {
return "mobile/dinglogin";
}
/
**
* 欢迎页⾯,通过 /welcome 访问,判断后端服务是否启动
*
* @return 字符串 welcome
*/
@ApiOperation(value = "⽇报跳转的⾸页地址")
@RequestMapping("/index")
public String mobileIndex() {
return "mobile/index";
}
/**
* 钉钉跳转到页⾯
*
* @param request  请求
* @param response 响应
* @return ModelAndView 页⾯
*/
@RequestMapping("/toIndex")
public ModelAndView toDingView(HttpServletRequest request, HttpServletResponse response) {        String view = Parameter("view");
Map<String, Object> pMap = ParameterMap(request);
return new ModelAndView(view, pMap);
}
/**
* 钉钉⽤户登录,显⽰当前登录⽤户的userId和名称
*
* @param authCode 免登临时authCode
* @return 当前⽤户
*/
@ApiOperation(value = "钉钉⽤户登录,显⽰当前登录⽤户的userId和名称")
@PostMapping("/avoidLogin")
@ResponseBody
public JsonResult login(@RequestBody String authCode, HttpServletRequest request) {
String accessToken;
/
/ 获取accessToken
ServiceResult<String> accessTokenSr = AccessToken();
if (!accessTokenSr.isSuccess()) {
return JsonResult.fail(Integer.Code()), Message());        }
accessToken = Result();
JSONObject jsonObject = JSONObject.parseObject(authCode);
String getAuthCode = (String) ("authCode");
// 获取⽤户userId
ServiceResult<String> userIdSr = getUserInfo(accessToken, getAuthCode);
if (!userIdSr.isSuccess()) {
return JsonResult.fail(Integer.Code()), Message());
}
// 获取⽤户详情
JsonResult userInfo = User(accessToken, Result());
UserDTO userDTO = (UserDTO) Result();
log.info("根据accessToken和⽤户userId查询出的⽤户信息 userDTO = {}", userDTO);
HttpSession session = Session();
User user = UserFromUserDTO(userDTO);
session.setAttribute("date", String.valueOf(System.currentTimeMillis()));
session.setAttribute("user", user);
return userInfo;
}
/
**
* 封装User对象
*
* @param userDTO userDTO对象
* @return User对象
*/
private User getUserFromUserDTO(UserDTO userDTO) {
User user = new User();
user.UserName());
user.TrueName());
user.UserId());
user.AgentSid());
user.CreateDate());
user.DingUserId());
user.AgentName());
user.Fid());
user.Handset());
user.HeadPortrait());
user.IsAdmin());
user.IsAlarm());
user.IsLeader());
user.LoginCount());
user.LoginLastDate());

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。