钉钉企业内部H5微应用开发详解
企业内部h5微应用开发 分为 服务端api和前端api的开发,主要涉及到进入应用免登流程和jsapi鉴权。
jsapi鉴权开发步骤:
1、创建h5微应用
登入钉钉开放平台(),进入“应用开发”->企业内部开发h5微应用->创建应用,并填写基本信息和配置开发信息
2、jsapi鉴权服务端api的开发:
(1)通过appkey 和 appsecret 获取调用接口凭证accesstoken(https://oapi.dingtalk.com/gettoken?appkey=appkey&appsecret=appsecret)
(2)通过accesstoken 获取用于jsapi的临时票据ticket(https://oapi.dingtalk.com/get_jsapi_ticket?access_token=access_token)
(3)ticket(jsapi的临时票据),noncestr(随机串),timestamp(时间戳),url(当前网页的url,不包含#及其后面部分)计算签名信息
计算签名参数
/* *ticket(jsapi的临时票据),noncestr(随机串),timestamp(时间戳),url(当前网页的url,不包含#及其后面部分)计算签名信息 * */ public static function sign($ticket, $noncestr, $timestamp, $url) { $plain = 'jsapi_ticket=' . $ticket . '&noncestr=' . $noncestr . '×tamp=' . $timestamp . '&url=' . $url; return sha1($plain); }
(4)通过accesstoken 获取用于jsapi的临时票据ticket(说明:由于会牵涉到多个企业,企业的appkey 和 appsecret的一些信息都是写在json配置文件中,前端传企业id到服务端,服务端就会从json配置文件中获取企业信息)
/* * 根据企业id corpid 返回 jsapi 鉴权配置信息 * */ public static function getconfig($corpid) { $_config = self::getapiconfig($corpid); $appkey = $_config["appkey"]; $appsecret = $_config["appsecret"]; $agentid = $_config["agentid"]; $noncestr = 'flywong'; $timestamp = time(); //$url = self::getcurrenturl(); $url = $_config["appurl"]; $accesstoken = self::getaccesstoken($appkey,$appsecret); $ticket = self::getticket($accesstoken); $signature = self::sign($ticket, $noncestr, $timestamp, $url); $config = array( 'agentid' => $agentid, 'corpid' => $corpid, 'timestamp' => $timestamp, 'noncestr' => $noncestr, 'signature' => $signature, 'url' => $url, 'type'=>0 ); return json_encode($config, json_unescaped_slashes); }
/* * 根据企业id corpid 从api_config.json配置文件中找到 企业对应的信息,并返回企业应用开发信息 * */ public static function getapiconfig($corpid) { $json_string = file_get_contents(__dir__ .'/../api_config.json'); //从文件中读取数据到php变量 $arrs = json_decode($json_string, true); foreach($arrs as $key => $value) { if($value["corpid"] == $corpid) { return $value; } } }
企业的配置文件api_config.json
3、jsapi鉴权前端api的开发:
前端发送get请求获取服务端的jsapi 鉴权配置信息
// 异步获取dd.config async getddconfig({commit, state},callback) { // 发送异步ajax请求 const result = await reqddconfig(state.corpid) // 提交一个mutation const ddconfig = result ddconfig.jsapilist= state.jsapilist dd.config(ddconfig); commit(receive_ddconfig, {ddconfig}) // 数据更新了, 通知一下组件 callback && callback() }
let that = this; //获取 jsapi 鉴权配置信息 that.$store.dispatch('getddconfig', () => {// that.$nexttick(() => {// 数据ddconfig state 更新后执行 that.$store.dispatch('getuserinfo')//获取登入用户信息 that.$store.dispatch('getgeolocation')//获取地图定位信息 }) })
/* 状态管理*/ export default { corpid:'dingb0bd5c5a3ba53e1231232378f',//企业id ddconfig:{},//钉钉签权配置信息 jsapilist:[ 'runtime.info', 'biz.contact.choose', 'device.notification.confirm', 'device.notification.alert', 'device.notification.prompt', 'biz.ding.post', 'biz.util.openlink', 'device.geolocation.get', 'biz.util.scancard' ],//需要签权的jsapi userinfo:{}, //用户信息 geolocation:{} //地图定位信息 }
4、h5微应用的免登
“免登”是指用户进入应用后,无需输入钉钉用户名和密码,应用程序可自动获取当前用户身份,进而登录系统的流程。
1、前端去获取微应用免登授权码,然后把授权码发送到服务端api得到当前用户信息
// 异步获取userinfo getuserinfo({commit, state}) { dd.runtime.permission.requestauthcode({ corpid: state.corpid, // 企业id onsuccess: async function (info) { let code = info.code // 通过该免登授权码可以获取用户身份 // 发送异步ajax请求 const result = await requserinfo(code,state.corpid) // 提交一个mutation const userinfo = result commit(receive_userinfo, {userinfo}) } }) }
2、服务端api获取用户信息
/* * 通过免登授权码code和access_token获取用户的userid * */ public static function getuserinfo($accesstoken, $code) { $response = \util\http::get("/user/getuserinfo",array("access_token" => $accesstoken, "code" => $code)); $userinfo = json_decode(json_encode($response),true); $userid = $userinfo["userid"]; return self::getuser($accesstoken,$userid); } /* * 通过access_token 和 userid 获取用户详情 * */ private static function getuser($accesstoken,$userid) { $response = \util\http::get("/user/get",array("access_token" => $accesstoken, "userid" => $userid)); return json_encode($response); }
提醒:钉钉的信息获取必须在钉钉应用环境中运行。(我是在电脑上安装安卓模拟器然后安装钉钉app进行调试的)
到此这篇关于钉钉企业内部h5微应用开发详解的文章就介绍到这了,更多相关钉钉企业内部h5微应用内容请搜索以前的文章或继续浏览下面的相关文章,希望大家以后多多支持!