1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > C# 开发企业内部微应用接入钉钉获取用户信息

C# 开发企业内部微应用接入钉钉获取用户信息

时间:2020-04-29 06:39:42

相关推荐

C# 开发企业内部微应用接入钉钉获取用户信息

一 首先从下面的网址中下载钉钉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;

}

四然后把网站发布到服务器上,然后打开钉钉--工作---自己新建的应用----弹出钉钉当前的用户姓名

以上就是通过钉钉开发微应用获取免登码以及用户信息

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。