一 首先从下面的网址中下载钉钉RC开发版,然后登录账户为开发者模式(需要系统管理员开通)

https://open-doc.dingtalk.com/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="https://g.alicdn.com/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 = "https://oapi.dingtalk.com/";
            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;
        }

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

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

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

  1. H5自建企微应用,企业微信获取用户信息(网页如何拿到code,后端如何根据code获得UserId)

    开始开发 最后更新:2019/08/08 企业微信提供了OAuth的授权登录方式,可以让从企业微信终端打开的网页获取成员的身份信息,从而免去登录的环节. 企业应用中的URL链接(包括自定义菜单或者消息 ...

  2. 钉钉微应用获取用户信息

    前言 最近有个需求,要把之前做的一套H5应用放在钉钉内,点击微应用,获取用户身份,根据获取到的用户身份去H5系统直接登陆.就是在获取这个用户身份的时候,网上的资料七零八落的,找的人烦躁的很,所以自己记 ...

  3. 叮叮获取所有用户信息_钉钉小程序获取用户信息

    1.钉钉小程序只允许开发办公类的程序,不能开发娱乐型的程序. 2.钉钉小程序审核需要产品说明书,最大大小不能超过30M(文档). 3.貌似可以用IP,暂时没有看到有关https的限制. (业务提供商( ...

  4. 钉钉小程序获取用户信息

    钉钉小程序获取用户信息 1.钉钉小程序只允许开发办公类的程序,不能开发娱乐型的程序. 2.钉钉小程序审核需要产品说明书,最大大小不能超过30M(文档). 3.貌似可以用IP,暂时没有看到有关https ...

  5. 浙政钉扫一扫获取用户信息

    浙政钉的开发文档和专有钉钉一样:但想通过浙政钉扫一扫需向发浙政钉起申请获取应用信息 这里以专有钉钉为例 1.首先先注册一个专有钉钉账户 专有钉钉开放平台开发文档:https://dg-work.cn/ ...

  6. 赚四五百万,一款打卡作弊软件的 CEO 被判5年6个月!因破坏了钉钉系统获取用户真实地理位置...

    ‍ ‍上面这个公号,是我的一个备用号,平时我也会发一些很短.很生活的图片.文字,也会推荐看到的好书.节目.电影等. 1 发现商机 昨天看到这个案例,蛮唏嘘的,特别对于我们技术人创业来讲,也算是提了一个 ...

  7. Unity接入越南社交软件Zalo登录之获取用户信息

    根据Unity接入越南社交软件Zalo登录(Android)之SDK接入接入SDK后,需要获取用户name,id,头像,性别的信息,这一篇文章教你如何获取 根据官网文档获取用户信息API ZaloSD ...

  8. 钉钉开发第三方H5微应用入门详细教程[ISV][免登流程][授权码][HTTP回调推送][识别用户身份][获取用户信息]...

    转载请注明原文地址:https://www.cnblogs.com/applerosa/p/11509512.html (by lnexin@aliyun.com 世间草木) 此教程注意点: 适用于第 ...

  9. 获取钉钉企业部门用户信息

    获取钉钉企业用户信息 有一个需求,需要获取本公司钉钉里面所有部门的员工信息,查阅钉钉官方文档后整理出了以下步骤: 1.登录钉钉企业管理员账号,创建一个应用 因为是公司内部使用区别第三方,所以选择企业内 ...

最新文章

  1. oracle19c主目录用户,oracle 19c 添加 scott用户与表
  2. 高性能服务器架构思路(五)——分布式缓存
  3. MATLAB AWGN信道 M-ary PSK 误码性能
  4. android6.0源码分析之Zygote进程分析
  5. oracle delete 空间增加,实战经验:关于Oracle Delete数据后空间重用问题的测试
  6. 禅道之需求追踪和多角色协作流程
  7. 解决xp登陆域很慢的方法
  8. keras构建卷积神经网络_在Keras中构建,加载和保存卷积神经网络
  9. 监督分类空白处也被分类了_监督学习(2)|本质是分类的“逻辑回归”
  10. 支付宝的一些小问题,注意事项等等,等用得时候在来写写
  11. Python 3.8.3 发布
  12. Python解决滑块验证,Scarpy框架采集数据到redis数据库!
  13. BBR开启教程(转)
  14. List集合的去重问题
  15. 今天又啃了一些數據類型的東西~漸漸地記起了一些東西。
  16. IEEE 1588和IEEE 802.1AS的版本和关系
  17. C语言实现99乘法表
  18. NVIDIA GeForce Experience报错:“验证程序加载失败,请检查您的浏览器设置,例如广告拦截程序”的解决方法
  19. Agents and Multi-agent System考试重要知识点整理
  20. 【转载】自然语言处理(NLP)的历史、发展、成果和难题,以及在教育领域的应用情况

热门文章

  1. [附源码]Node.js计算机毕业设计高校运动会管理系统Express
  2. 文件重命名的快捷键是什么F2
  3. docker GitLab-runner CI/CD持续集成
  4. web应用程序的访问与服务器,本地机的带宽关系 + 带宽详解
  5. redisson watchdog 使用和原理
  6. CVE-2014-0321漏洞成因分析
  7. 【BSV动态】VXPASS与世卫组织合作为莱索托提供数字疫苗监测服务
  8. Java - 对象克隆
  9. 用python代码(turtle库)绘制好看的效果图
  10. zbb20180930 设计模式-单例模式