公司将办公协同基本上都搬到钉钉线上来了,偶有部门个性的功能,钉钉没有合适的应用可以解决,所以只能自己开发系统解决。钉钉企业内部应用分E应用和微应用,E应用说白了就是小程序,微应用是H5页面。如果公司内部系统全接口开发的,并且微信小程序有开发经验,E应用首选。内部系统是传统模式那就微应用吧。我们公司没有成体系的OA系统,所以就针对部分特殊需求单开吧,微应用更快。
先进钉钉开放平台https://open.dingtalk.com,进入应用开发栏目,微应用管理,创建企业内部应用,设置应用名称,logo、简介、应用首页,pc首页,后台地址,服务器信息等。企业内部应用是不需要钉钉审核的。如果是开发商,需要创建第三方应用,这个是需要钉钉审核的。内部应用创建完成后就会得到AgentId、AppKey和AppSecret。进入应用权限管理中社情对应的权限,默认开通的基础权限,如果需要审批、代办等权限需要在下面权限列表里面单独申请,不过还在不需要钉钉审核,即开即用。
钉钉的文档着实没体系,东一个链接西一个链接的。总结下来免登流程分四步:1、前端获取钉钉免登授权码code;2、后端获取access_token;3、使用授权码code和access_token换取用户userid;4、通过access_token和userid换去用户详情userinfo。
1、获取授权码code。
首先页面引入JSAPI。
其次调用JSAPI组件。
2、后台获取access_token
access_token很简单,只要把AppKey和AppSecret传到接口地址上去,就能拿到。鉴于钉钉后端都是接口请求的,建议把curl提取出来做个函数,接口域名、路径、请求方式、传参全部参数化,调用统一的curl就好了。
3、换取userId。
首先把前台调用JSAPI组件的结果传到后台,我用AJAX干的。JSAPI组件初始化反馈的结果已经是一个标准的json格式,不用转换直接传后台就好。
再调用钉钉的获取userId接口获取userId,方法和获取access_token的方法一致,参数就是code和access_token。
4、换取userInfo。
调用钉钉获取userInfo接口获取userInfo,方法和前面一致,参数是access_token和userId。
授权码code是每次请求都不一样,单次请求的数据5分钟有效,所以没必要缓存,直接用一次调一次。access_token有效期7200秒,自动续期。缓不缓存根据需要自便吧