钉钉⼩程序开发实战:第⼆章,H5企业第三⽅应⽤开发讲解
H5开发应⽤:
H5应⽤开发最典型的就是第三⽅企业应⽤,我们就以第三⽅企业应⽤作为样例进⾏开发。
填写应⽤基本信息。包括应⽤名称、应⽤Logo、应⽤类型和应⽤简介,其中,管理后台、PC端⾸页地址,如果不使⽤都可以先不填写。需特别注意:
1. 应⽤类型
应⽤类型分为“测试应⽤”和“正式应⽤”,选择后不能进⾏修改,测试应⽤不受服务器IP⽩名单限制,⽆法发布上架,仅供测试使⽤。如果选择正式应⽤,需要填写IP⽩名单。
点击下⼀步配置开发信息:
2. 推送类型
可以选择使⽤“钉钉云推送”或“HTTP推送”。
(1)钉钉云推送:
在保障数据安全的前提下,极⼤的简化了推送协议,减少了数据传输次数,提⾼了数据传输速度,提升了推送的稳定性。正式版的第三⽅应⽤都须使⽤钉钉云推送(注意:第三⽅应⽤在申请接⼝权限、上架应⽤市场的时候,必须使⽤钉钉云)。
不需要服务端加密解密,只需要确认有服务即可。
(2)HTTP推送:
是使⽤回调地址推送数据的⽅式,开发者提供HTTP回调服务,钉钉服务器会向此回调地址推送数据,数据需要经过加解密的处理。
也就是说需要服务端写⼀个公⽹连接地址,然后把接受到的数据进⾏加密解密,返回正确的值,通常有两个作⽤,第⼀个是验证服务器地址的正确性⽤的,第⼆个是开通⼀些功能的权限⽤的。
参考⽹址:
步骤⼆,创建成功后,可以在应⽤列表查看到创建的应⽤。点击您创建的应⽤可以查看应⽤的详细信息,如下图所⽰:
点击应⽤信息后⾯的“查看详情”,可以查看应⽤的信息,包括创建后得到的suiteId、suiteKey和suiteSecret,还可以在此页⾯点击修改进⾏内容的调整。
注意在应⽤主页地址后⾯可以写上?corpid=$CORPID$⽤URL传参的⽅式来获取第三⽅企业的corpid
创建完事微应⽤了,就可以在前端到后端的代码了,主要是写两个⽅⾯,第⼀个⽅⾯是页⾯获取临时授权码然后到后台换取应⽤token的⼀套代码,以页⾯和java为例:
页⾯:
1.引⽤js,引⽤js调⽤钉钉的⽅法
<script src="g.alicdn/dingding/dingtalk-jsapi/2.10.3/dingtalk.open.js"></script>
2.钉钉的⽅法写在钉钉环境下可以获得换取token的免登授权码的地⽅,免登授权码5分钟内有效。
dd.questAuthCode({
corpId: _pId, // 企业id
onSuccess: function (info) {
code = de // 通过该免登授权码可以获取⽤户⾝份
}});
});
3.在js页⾯获取url传参传递过来的corpid
var corpid =  ”想尽办法活得url⽹址后⾯的corpid下⾯的auth_corpid会⽤“
把官⽹的代码复制到本地:
DefaultDingTalkClient client = new DefaultDingTalkClient("oapi.dingtalk/service/get_corp_token");OapiServiceGetCorpTokenRequest req
= new OapiServiceGetCorpTokenRequest();req.setAuthCorpid("dingc365fcabbf733c3535c2f4657eb6378f");OapiServiceGetCorpTokenResponse execute = ute(req,"suiteKey","suiteSecrect", "suiteTicket");
把⾥⾯的参数替换替换,上⾯的参数⼤部分都是创建应⽤的时候有的,可以⼀,然后解析返回的数据⾥⾯就有access_token了
(access_token两个⼩时有效,如果⽤户量⽐较⼤可以存⼊数据库或者服务器缓存⾥⾯等失效了再去官⽹取,如果⽤户量⽐较⼩,也可以每次都去官⽹取,这个看⾃⼰)。
注意的是上⾯有⼀个计算机签名的⽣成,在参考⽹址⾥⾯也有
5.使⽤access_token获取⽤户ID
DingTalkClient client = new DefaultDingTalkClient("oapi.dingtalk/user/getuserinfo");OapiUserGetuserinfoRequest request
= new OapiUserGetuserinfoRequest();request.setCode(requestAuthCode);request.setHttpMethod("GET");OapiUserGetuserinfoResponse response = ute(request, accessToken);String userId = Userid();
在返回值⾥⾯可以解析出来userid
6.使⽤⽤户ID还可以获取⽤户的详情信息
DingTalkClient client = new DefaultDingTalkClient("oapi.dingtalk/user/get");OapiUserGetRequest request
= new OapiUserGetRequest();request.setUserid("zhangsan");request.setHttpMethod("GET");OapiUserGetResponse response
= ute(request, accessToken);
通过access_token和userid可以获取⽤户的详细信息:⽐如姓名,⾓⾊等
到现在,整个免登流程就结束了,还有获取企业权限部门等等。
然后就回到常⽤的h5移动端的开发模式了,在⼀系列的开发之后,有时候会发现需要更⾼级的功能,⽐如利⽤钉钉播出电话共鞥你需要这个时候就需要了jsapi鉴权功能了,说明⽩⼀点就是每⼀次调⽤这个功能的时候,都需要进⾏⽹址和签名的安全校验,符合安全机制,不允许论调⽤等等,注意只有H5微应⽤才需要做鉴权。
1. 也需要引⼊js
<script src="g.alicdn/dingding/dingtalk-jsapi/2.10.3/dingtalk.open.js"></script>
1. jsapi需要页⾯引⽤配置
'ification.prompt',        'biz.ding.post',        'biz.util.openLink',    ] // 必填,需要使⽤的jsapi列表,注意:不要带dd。});
从上⾯的参数来看,agentid和signature是需要获取的,其他的我们都已经有了,nonceStr是⾃⼰随便定义⼀个⼤于6位的字符串就⾏
3.agentid获取的⽅式:
4.计算机签名signature获取⽅式,注意url是当前⽹页调⽤鉴权⽅法的全部⽹址但是不包含#后⾯的⽹址。
public static String sign(String ticket, String nonceStr, long timeStamp, String url) throws OApiException {    String plain = "jsapi_ticket=" + ticket + "&noncestr=" + nonceStr + "×tamp=" + String.valueOf(timeStamp)            + "&url=" + url;    try {        MessageDigest sha1
= Instance("SHA-1");        set();        sha1.Bytes("UTF-8"));        return byteToHex(sha1.digest());    } catch (NoSuchAlgorithmException e) {        throw new Message());    } catch (UnsupportedEncodingException e) {
throw new Message());    }} // 字节数组转化成⼗六进制字符串    private static String byteToHex(final byte[] hash) {      Formatter formatter = new Formatter();        for (byte b : hash) {            formatter.format("%02x", b);        }        String result = String();      formatter.close();        return result;    }
把所需要的参数都传回页⾯,就可以了
页⾯代码:
'ification.prompt',        'biz.ding.post',        'biz.util.openLink',    ] // 必填,需要使⽤的jsapi列表,注意:不要带dd。});
小程序 字符串转数组鉴权成功以后,调⽤鉴权功能的⽅法要写在dd.ready⾥⾯
⽐如播出功能
最后补充⼀下开通应⽤授权的流程:
最后由于官⽹没提供调试⼯具,得⾃⼰调试⼯具
第⼀种调试⼯具是开发版的钉钉,然后在⾕歌浏览器上⾯输⼊localhost:168888可以调试
还有⼀种是在硬件设备上,⽐如⼿机或者平板上⾯安装调试⼯具,真是异常⿇烦,作者强烈不建议H5的技术模式。。。。

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