企业内部h5微应用开发 分为 服务端api和前端api的开发,主要涉及到进入应用免登流程和jsapi鉴权。
jsapi鉴权开发步骤:
1、创建h5微应用
登入钉钉开放平台(),进入“应用开发”->企业内部开发h5微应用->创建应用,并填写基本信息和配置开发信息
2、jsapi鉴权服务端api的开发:
(1)通过appkey 和 appcret 获取调用接口凭证accesstoken(/d/file/titlepic/gettoken 获取用于jsapi的临时票据ticket(/d/file/titlepic/get_jsapi_ticket *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 和 appcret的一些信息都是写在json配置文件中,前端传企业id到服务端,服务端就会从json配置文件中获取企业信息)
/* * 根据企业id corpid 返回 jsapi 鉴权配置信息 * */ public static function getconfig($corpid) { $_config = lf::getapiconfig($corpid); $appkey = $_config["appkey"]; $appcret = $_config["appcret"]; $agentid = $_config["agentid"]; $noncestr = 'flywong'; $timestamp = time(); //$url = lf::getcurrenturl(); $url = $_config["appurl"]; $accesstoken = lf::getaccesstoken($appkey,$appcret); $ticket = lf::getticket($accesstoken); $signature = lf::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('getu化学方程式配平方法rinfo')//获取登入用户信息 that.$store.dispatch('getgeolocation')//获取地图定位信息 }) })
/* 状态管理*/export default { corpid:'dingb0bd5c5a3ba53e1231232378f',//企业id ddconfig:{},//钉钉签权配置信息 jsapilist:[ 'runtime.info', 'biz.contact.choo', 'device.notification.confirm', 'device.notification.alert', 'device.notification.prompt', 'biz.ding.post', 'biz.util.openlink', 'device.geolocation.get', 桌面图片 'biz.util.scancard' ],//需要签权的jsapi urinfo:{}, //用户信息 geolocation:{} //地图定位信息}
4、h5微应用的免登
“免登”是指用户进入应用后,无需输入钉钉用户名和密码,应用程序可自动获取当前用户身份,进而登录系统的流程。
1、前端去获取微应用免登授权码,然后把授权码发送到服务端api得到当前用户信息
// 异步获取urinfo geturinfo({commit, state}) { dd.runtime.permission.reques脸颊祛斑tauthcode({ corpid: state.corpid, // 企业id onsuccess: async function (info) { let code = info.code // 通过该免登授权码可以获取用户身份 // 发送异步ajax请求 const result = await requrinfo(code,state.corpid) // 提交一个mutation const urinfo = result commit(receive_urinfo, {urinfo}) } }) }
2、服务端api获取用户信息
/* * 通过免登授权码code和access_token获取用户的urid * */ public static function geturinfo($accesstoken, $code) { 莲菜的做法 $respon = \util\http::get("/ur/geturinfo",array("access_token" => $accesstoken, "code" => $code)); $urinfo = json_decode(json_encode($respon),true); $urid = $urinfo["urid"]; return lf::getur($accesstoken,$urid); } /* * 通过access_token 和 urid 获取用户详情 * */ private static function getur($accesstoken,$urid) { $respon = \util\http::get("/u英语听力材料r/get",array("access_token" => $accesstoken, "urid" => $urid)); return json_encode($respon); }
提醒:钉钉的信息获取必须在钉钉应用环境中运行。(我是在电脑上安装安卓模拟器然后安装钉钉app进行调试的)
到此这篇关于钉钉企业内部h5微应用开发详解的文章就介绍到这了,更多相关钉钉企业内部h5微应用内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章,希望大家以后多多支持www.887551.com!
本文发布于:2023-04-07 11:05:09,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/23804a9470221400a0bd1a23c2f55344.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:钉钉企业内部H5微应用开发详解.doc
本文 PDF 下载地址:钉钉企业内部H5微应用开发详解.pdf
留言与评论(共有 0 条评论) |