钉钉 H5微应用开发 免密登录
近2年钉钉很火,很多企业在用,要做一个钉钉的微应用
打算用VUE做前端,springboot做后端。其中比较重要的就是钉钉的免密登录,网上资料比较少
而且很多都过时了,下面我这个官方SDK包是20190926发布的
钉钉微应用开发者文档: https://ding-doc.dingtalk.com/doc#/bgb96b/aw3h75
本博客项目源码: https://github.com/wushu0725/dingtalk-demo
基本流程如下图
相关代码:
前端:
import * as dd from 'dingtalk-jsapi';
try { dd.ready(function () { // dd.ready参数为回调函数,在环境准备就绪时触发,jsapi的调用需要保证在该回调函数触发后调用,否则无效。 try { dd.runtime.permission.requestAuthCode({ corpId: self.corpId, onSuccess: function (result) { //通过corpId,code获取userid self.getUserInfo(self.corpId,result.code); }, onFail: function (err) { alert(JSON.stringify(err)); } }); } catch (e) { alert(e); } });
后端:
/** * 根据corpId 获取AccessToken * @param corpId * @return * @throws ApiException */ private String updateAccessToken(String corpId) throws ApiException { defaultDingTalkClient.resetServerUrl(DingTalkConstant.OAPI_GETTOKEN_HOST); OapiGettokenRequest request = new OapiGettokenRequest(); request.setAppkey(DingTalkConstant.APP_KEY); request.setAppsecret(DingTalkConstant.APP_SECRET); request.setHttpMethod("GET"); OapiGettokenResponse response =defaultDingTalkClient.execute(request); return response.getAccessToken(); }
/** * 获取用户详情 * @param code * @param corpId * @return JSONObject */ public JSONObject getUserInfoDetail(String code,String corpId){ try { String accessToken = updateAccessToken(corpId); log.info("获取token:"+accessToken); //获取用户钉钉基本信息 JSONObject userJson = this.getUserInfo(code,accessToken); log.info("获取用户ID:"+userJson.getString("userId")); //获取用户详细信息 defaultDingTalkClient.resetServerUrl(DingTalkConstant.OAPI_GETINFODETAIL_HOST); OapiUserGetRequest request = new OapiUserGetRequest(); request.setUserid(userJson.getString("userId")); request.setHttpMethod("GET"); OapiUserGetResponse response = defaultDingTalkClient.execute(request, accessToken); log.info("获取用户详情:"+response.getName()); JSONObject retrunJson = new JSONObject(); retrunJson.put("userId",userJson.getString("userId")); retrunJson.put("name",response.getName()); retrunJson.put("mobile",response.getMobile()); return retrunJson; } catch (ApiException e) { e.printStackTrace(); } return null; }