一 首先从下面的网址中下载钉钉RC开发版,然后登录账户为开发者模式(需要系统管理员开通)
https://open-/doc2/detail?spm=0.0.0.0.O5MWZ8&treeId=176&articleId=104958&docType=1
二 创建微应用
1 登录账户后,单击---工作---应用中心----管理应用-----进入管理后台
2 进入后台--工作台---自建应用
3 填写所需的信息----下一步
4 创建即可
5 可以获取到appkey和appsecret (这两个后面用于获取token)
6 CorpId 这个后面也会用到,这些信息都先准备好
三 前期准备工作已经完成,下面就是编写代码
1前台获取免登授权码 前台页面ceshi.aspx中需要引入三个js
<script type="type/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
<script src="/dingding/dingtalk-jsapi/2.0.57/dingtalk.open.js"></script>
然后编写
<script type="text/javascript">
dd.ready(function () {
dd.runtime.permission.requestAuthCode({
corpId:“上面准备资料微应用中 二.6 信息”,
onSuccess: function (result) {
var code= result.code; //获取的免登授权码,用于获取用户id
$.ajax({
url: "ceshi.ashx",//授权码传入后台,后台操作
type: "GET",
contentType: "application/json",
dataType: "text",
data: { code: code },
success: function (name) {
alert(name);//弹出当前用户名字
},
error: function (err) {
alert(err);
}
});
}
});
});
</script>
2 ceshi.ashx
3 DingD类
1 先定义几个实体类(用于存放token,用户信息等)
public class AccessTokenModel
{
public string access_token { get; set; }
public int errcode { get; set; }
public string errmsg { get; set; }
}
public class Access_UserInfo
{
public string errcode { get; set; }
public string errmsg { get; set; }
public string userid { get; set; }
/// <summary>
/// 手机设备号,由钉钉在安装时随机产生
/// </summary>
public string deviceId { get; set; }
/// <summary>
/// 是否是管理员
/// </summary>
public string is_sys { get; set; }
/// <summary>
/// 级别,0:非管理员 1:超级管理员(主管理员) 2:普通管理员(子管理员) 100:老板
/// </summary>
public string sys_level { get; set; }
}
public class Dingding_User
{
public string errcode;
public string errmsg;
public string userid;
/// <summary>
/// 成员名称
/// </summary>
public string name;
/// <summary>
/// 分机号(仅限企业内部开发调用)
/// </summary>
public string tel;
/// <summary>
/// 办公地点(ISV不可见)
/// </summary>
public string workPlace;
/// <summary>
/// 备注(ISV不可见)
/// </summary>
public string remark;
/// <summary>
/// 手机号码(ISV不可见)
/// </summary>
public string mobile;
/// <summary>
/// 员工的电子邮箱(ISV不可见)
/// </summary>
public string email;
/// <summary>
/// 员工的企业邮箱,如果员工已经开通了企业邮箱,接口会返回,否则不会返回(ISV不可见)
/// </summary>
public string orgEmail;
/// <summary>
/// 是否已经激活, true表示已激活, false表示未激活
/// </summary>
public bool active;
/// <summary>
/// 在对应的部门中的排序, Map结构的json字符串, key是部门的Id, value是人员在这个部门的排序值
/// </summary>
public string orderInDepts;
/// <summary>
/// 是否为企业的管理员, true表示是, false表示不是
/// </summary>
public bool isAdmin;
/// <summary>
/// 是否为企业的老板, true表示是, false表示不是(【设置负责人】:主管理员登陆钉钉手机客户端 -【通讯录】-【企业名后面的管理】-【企业通讯录】-【负责人设置】进行添加则可。)
/// </summary>
public bool isBoss;
/// <summary>
/// 钉钉Id,在钉钉全局范围内标识用户的身份(不可修改
/// </summary>
public string dingId;
public string unionid;
/// <summary>
/// 在对应的部门中是否为主管, Map结构的json字符串, key是部门的Id, value是人员在这个部门中是否为主管, true表示是, false表示不是
/// </summary>
public string isLeaderInDepts;
/// <summary>
/// 是否号码隐藏, true表示隐藏, false表示不隐藏
/// </summary>
public bool isHide;
/// <summary>
/// 成员所属部门id列表
/// </summary>
public string[] department;
/// <summary>
/// 职位信息
/// </summary>
public string position;
/// <summary>
/// 头像url
/// </summary>
public string avatar;
/// <summary>
/// 入职时间
/// </summary>
public string hiredDate;
/// <summary>
/// 员工工号
/// </summary>
public string jobnumber;
/// <summary>
/// 扩展属性,可以设置多种属性(但手机上最多只能显示10个扩展属性,具体显示哪些属性,请到OA管理后台->设置->通讯录信息设置和OA管理后台->设置->手机端显示信息设置)
/// </summary>
public string extattr;
/ <summary>
/ 角色信息(ISV不可见),json数组格式
/ </summary>
//public Roles roles;
/// <summary>
/// 手机号码区号
/// </summary>
public string stateCode;
/// <summary>
/// 是否是高管
/// </summary>
public string isSenior;
}
2 然后获取access_token
CacheHelper cacheHelper = new CacheHelper();
public static DateTime dd_accesstokentime;
public static string dd_accesstoken;
public static string dd_corpid;
public static string dd_corpsecret;
public static string dd_userid;
/// <summary>
/// 更新AccessToken
/// </summary>
public static void GetAccessToken()
{
object DDToken = CacheHelper.GetCache("dd_accesstoken");
if (DDToken == null)
{
dd_corpid = "";//上面准备工作的appkey
dd_corpsecret = "";//上面准备工作的appsecret
//获取Token
if (dd_accesstokentime == null || (DateTime.Now.Ticks - dd_accesstokentime.Ticks) >= 5000)
{
dd_accesstokentime = DateTime.Now;
dd_accesstoken = JsonConvert.DeserializeObject<AccessTokenModel>(Request("gettoken?appkey=" + dd_corpid + "&appsecret=" + dd_corpsecret, "GET")).access_token;
}
//Token存入缓存
CacheHelper.SetCache("dd_accesstoken", dd_accesstoken, 115);
}
else
dd_accesstoken = DDToken.ToString();
}
3 由于token有时效性,不用每次都获取,只要在官方token失效内,所以才有了缓存类CacheHelper(网上可搜索到该类)
public class CacheHelper
{
/// <summary>
/// 读取缓存数据
/// </summary>
/// <param name="cacheKey">键</param>
/// <returns></returns>
public static object GetCache(string cacheKey)
{
var objCache = HttpRuntime.Cache.Get(cacheKey);
return objCache;
}
/// <summary>
/// 设置缓存数据
/// </summary>
/// <param name="cacheKey">键</param>
/// <param name="content">值</param>
public static void SetCache(string cacheKey, object content)
{
var objCache = HttpRuntime.Cache;
objCache.Insert(cacheKey, content);
}
/// <summary>
/// 设置缓存数据并且设置默认过期时间
/// </summary>
/// <param name="cacheKey"></param>
/// <param name="content"></param>
/// <param name="timeOut"></param>
public static void SetCache(string cacheKey, object content, int timeOut = 3600)
{
try
{
if (content == null)
{
return;
}
var objCache = HttpRuntime.Cache;
//设置绝对过期时间
//绝对时间过期。DateTime.Now.AddSeconds(10)表示缓存在3600秒后过期,TimeSpan.Zero表示不使用平滑过期策略。
objCache.Insert(cacheKey, content, null, DateTime.Now.AddSeconds(timeOut), TimeSpan.Zero, CacheItemPriority.High, null);
//相对过期
//DateTime.MaxValue表示不使用绝对时间过期策略,TimeSpan.FromSeconds(10)表示缓存连续10秒没有访问就过期。
//objCache.Insert(cacheKey, objObject, null, DateTime.MaxValue, timeout, CacheItemPriority.NotRemovable, null);
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// 移除指定缓存
/// </summary>
/// <param name="cacheKey">键</param>
public static void RemoveAllCache(string cacheKey)
{
var objCache = HttpRuntime.Cache;
objCache.Remove(cacheKey);
}
/// <summary>
/// 删除全部缓存
/// </summary>
public static void RemoveAllCache()
{
var objCache = HttpRuntime.Cache;
var cacheEnum = objCache.GetEnumerator();
while (cacheEnum.MoveNext())
{
objCache.Remove(cacheEnum.Key.ToString());
}
}
}
4 下面就是获取用户id和用户信息方法
/// <summary>
/// 获取用户的信息userid
/// </summary>
/// <param name="code"></param>
/// <returns></returns>
public static string getUserinfo(string code)
{
GetAccessToken();
dd_userid = JsonConvert.DeserializeObject<Access_UserInfo>(Request("user/getuserinfo?access_token=" + dd_accesstoken + "&code="+code, "GET")).userid;
return dd_userid;
}
/// <summary>
/// 获取用户详细信息name
/// </summary>
/// <returns></returns>
public static string getUserDetail()
{
string result =JsonConvert.DeserializeObject<Dingding_User>(Request("user/get?access_token=" + dd_accesstoken + "&userid=" + dd_userid, "GET")).name;
return result;
}
public static string Request(string url, string method)
{
string urld = "/";
WebRequest request = WebRequest.Create(urld+url);
WebResponse response=request.GetResponse();
Stream stream=response.GetResponseStream();
StreamReader reader=new StreamReader(stream);
string content=reader.ReadToEnd();
return content;
}
四然后把网站发布到服务器上,然后打开钉钉--工作---自己新建的应用----弹出钉钉当前的用户姓名
以上就是通过钉钉开发微应用获取免登码以及用户信息