再次清清楚楚的解析一遍前端的操作。下面的是我写的demo,我讲以这个demo为例进行讲解。
先是demo的主页代码:
<%@ page language="java" import="java.util.*" contentType="text/html;charset=utf-8"%>
dingding-1
//调用jquery需要的库,手机版和电脑版的不同
//手机版钉钉免登引入的jsapi,和电脑版引入的不同
//获取code码值的js文件
钉钉test
未知
然后是调用jsapi前端的js代码文件demo.js(我放在项目的javascripts文件夹下)
dd.config({ //实现验证
agentId : _config.agentId,
corpId : _config.corpId,
timeStamp : _config.timeStamp,
nonceStr : _config.nonceStr,
signature : _config.signature,
jsApiList : [
'runtime.info',
'biz.contact.choose',
'device.notification.confirm',
'device.notification.alert',
'device.notification.prompt',
'biz.ding.post',
'biz.util.openLink' ]
});
dd.ready(function() { //验证成功
dd.runtime.permission.requestAuthCode({ //获取code码值
corpId : _config.corpId,
onSuccess : function(info) {
alert('authcode: ' + info.code);
$.ajax({
url : 'userinfo?code=' + info.code + '&corpid=' //请求后台通过code值获得userId
+ _config.corpId,
type : 'GET',
success : function(data, status, xhr) {
var info = JSON.parse(data);
document.getElementById("userName").innerHTML = info.name;
document.getElementById("userId").innerHTML = info.userid;
},
error : function(xhr, errorType, error) {
logger.e("yinyien:" + _config.corpId);
alert(errorType + ', ' + error);
}
});
},
onFail : function(err) {
alert('fail: ' + JSON.stringify(err));
}
});
});
dd.error(function(err) { //验证失败
alert("进入到error中");
document.getElementById("userName").innerHTML = "验证出错";
alert('dd error: ' + JSON.stringify(err));
});
首先得操作是验证信息,通过调用函数config()来实现,验证成功就会去执行dd.ready()这个函数中定义的函数,如果验证失败,就执行error()函数。注意,ready和error都是回调函数,要先执行config(),才会执行回调函数。并且所有的验证成功后的操作都要放在ready()中才会被执行。
最后我再总结一下常见的错误:
1.config(),ready()等接口得不到执行:
有几种原因会造成这种情况,最常见的就是你没有在手机上访问demo主页,而是随便找了一个电脑做测试访问。因为dd对象
是钉钉应用,只要在钉钉手机版访问时,才会有dd对象,相应的接口方法才会得到执行。另外一种常见的原因是你写的js文件有错误,错误就会导致js文件执行不下去,所以建议你用PC版的钉钉去调试,先下载一个PC版的钉钉RC版(RC版就是调试版),然后在RC版钉钉上找一个空白的地方右键,就能看到show DevTools,点击进去,然后你再RC版中访问一下你的微应用,相应的错误信息会在devtools的控制台中显示(你可以在devtool右上角看到红色的叉号,那就是错误),然后根据错误改正就好。