.NET平台下,钉钉微应用开发之:获取userid

工作需求,开发钉钉微应用和小程序,之前有接触过支付宝小程序和生活号的开发,流程没有很大的差别,这里记录下我用ASP.NET MVC实现钉钉微应用的开发,并实现获取用户的userid。小弟我技术有限,本文中的一些命名或方法写的不好的,还请指点。

钉钉开发者平台上有各个平台的SDK,我也有下载对应的.NET版本的SDK,但是还没有全搞懂,我先用最土的办法:直接发起http请求,来获取我需要的数据,后面如果有时间我会把.NET的也补上。

1、注册钉钉微应用:

注册完成之后,继续完善下应用配置,如IP白名单等。

在基本信息>开发信息(旧版)中,可以看到有一个Corpid,官方文档中“获取微应用免登授权码”,就是需要这个ID。

2、获取Code:

首先需要根据corpid获取免登授权码。按照官方文档中的写法,这个步骤很简单,我直接写在按钮事件中,返回的result中就带有我需要的code了。

 1  //获取免登授权码
 2         $("#getAuthorCode").click(function () {
 3             dd.ready(function () {
 4                 // dd.ready参数为回调函数,在环境准备就绪时触发,jsapi的调用需要保证在该回调函数触发后调用,否则无效。
 5                 dd.runtime.permission.requestAuthCode({
 6                     corpId: "这里填写corpid",
 7                     onSuccess: function (result) {
 8                         alert("succeed");
 9                         alert(result.code);
10                     },
11                     onFail: function (err) {
12                         alert("fail");
13                     }
14                 });
15             });
16             var arr = [];
17             arr.push({ "AuthorCode": authorCode });
18             ajax("/Home/GetAuthorCode", arr, "text", false);
19         });

3、获取access_token:

先看官方文档是怎么写的。

嗯,对,其实我主要是看这里的“请求地址”,只要在后台中把参数赋上就可以了,相应的后端代码如下。

接收到钉钉返回的数据后,对数据进行反序列化,得到access_token。

 1  /// <summary>
 2         /// 获取授权访问令牌
 3         /// </summary>
 4         /// <returns></returns>
 5         public JsonResult GetAccessToken()
 6         {
 7             string AppKey = "后台提供的key";
 8             string AppSecret = "后台提供的secret";
 9             string url = "https://oapi.dingtalk.com/gettoken?appkey=" + AppKey + "&appsecret=" + AppSecret;
10             WebRequest request = WebRequest.Create(url);
11             WebResponse response = request.GetResponse();
12             StreamReader reader = new StreamReader(response.GetResponseStream(),Encoding.ASCII);
13             string responseData = reader.ReadToEnd();
14        var data = JsonConvert.DeserializeObject<CommonModel>(responseData); //json字符串反序列化          string token = data.access_token;
22             return Json(new { Result = true, token }, JsonRequestBehavior.AllowGet);
23         }

4、获取userid:

根据官方文档,获取userid需要使用code和token。

当我在后台将几分钟前获取到的code和token,直接作为参数并发起http请求时,这时候报了错误码40078,

也就是说前面获取到的code需要重新进入鉴权,这里的鉴权机制可以仔细查看官方文档,我也不是非常清楚,有用到的时候才会去看文档。

那么我就重新获取code和token就好了:

 1 /// <summary>
 2         /// 获取userid
 3         /// </summary>
 4         /// <returns></returns>
 5         public JsonResult GetUserid()
 6         {
 7             //重新获取code
 8             string authorCode = Request.Form[0];
 9             JavaScriptSerializer js = new JavaScriptSerializer();
10             CommonModel selectListss = new CommonModel();
11             var data = js.Deserialize<List<CommonModel>>(authorCode);
12             string Code = data[0].AuthorCode;
13
14             //获取token
15             string AppKey = "后台提供的key";
16             string AppSecret = "后台提供的secret";
17             string url = "https://oapi.dingtalk.com/gettoken?appkey=" + AppKey + "&appsecret=" + AppSecret;
18             WebRequest request = WebRequest.Create(url);
19             WebResponse response = request.GetResponse();
20             StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.ASCII);
21             string responseData = reader.ReadToEnd();

          var data = JsonConvert.DeserializeObject<CommonModel>(responseData); //json字符串反序列化
          string token = data.access_token;

30
31             //获取userid
32             string getUserId_Url = "https://oapi.dingtalk.com/user/getuserinfo?access_token=" + token + "&code=" + Code;
33             WebRequest getUserId_request = WebRequest.Create(getUserId_Url);
34             WebResponse getUserId_response = getUserId_request.GetResponse();
35             StreamReader getUserId_reader = new StreamReader(getUserId_response.GetResponseStream(), Encoding.ASCII);
36             string getUserId_responseData = getUserId_reader.ReadToEnd();
37

          var data = JsonConvert.DeserializeObject<CommonModel>(getUserId_responseData); //json字符串反序列化

          string userid = data.userid;

45             return Json(new { Result = true,userid }, JsonRequestBehavior.AllowGet);
46         }

以上,将写好的项目打包并发布到我的IIS服务器上,PC端(手机也行)钉钉打开应用看看效果:

原文地址:https://www.cnblogs.com/seaquakear/p/11431000.html

时间: 2024-11-05 22:45:41

.NET平台下,钉钉微应用开发之:获取userid的相关文章

用java实现“钉钉微应用,免登进入某H5系统首页“功能”

一.前言 哈哈,这是我的第一篇博客. 先说一下这个小功能的具体场景: 用户登录钉钉app,点击微应用,获取当前用户的信息,与H5系统的数据库的用户信息对比,如果存在该用户,则点击后直接进入H5系统的首页,否则显示“您无权限”. 补充:又加了一个小需求,就是免登成功,会给该用户发条消息 我是参考钉钉开发文档实现的这个小功能,文档地址:https://ding-doc.dingtalk.com/doc#/serverapi2/clotub 二.准备工作 需要创建一个微应用:https://open-

移动端(钉钉微服务)webpack配置需要移除hash来解决应用更新后白屏的问题

钉钉微服务webpack配置调整方案 1: Vue CLI配置修改方法 a. 修改build下webpack.prod.config.js.去掉图中三处hash(.[chunkhash]): b. 修改build下webpack.base.config.js.去掉图中hash: 2: 非Vue CLI配置修改方法: 类似CLI,通常去除config文件中的output的filename和chunkFilename的hash值以及rules中对应的hash值. 原文地址:https://www.c

钉钉H5w微应用鉴权

原文:钉钉H5w微应用鉴权 1 ///// <summary> 2 ///// 登录获取签名 3 ///// </summary> 4 ///// <param name = "url" > 获取的url </ param > 5 ///// < returns > 成功时,返回签名信息</returns> //引用system.web 6 public signResultObject DDGetSign(str

钉钉微应用发送消息

原文:钉钉微应用发送消息 微应用就是网站,钉钉自带的E应用难用,而且前端UI都不是很好,所以倾向使用网站来开发 string UrlUserID = "https://oapi.dingtalk.com/message/send?access_token=" + token; //获取自己的Token string PostData = "{ \"touser\":\"\", "; //职员代码,不知道是什么 去通讯录上查,多

钉钉——第三方应用嵌入钉钉【微应用】

2017年做了一款移动端手机web系统,用于公司的内部使用,使用了jquery mobile前端框架和后端SSM. 2018年11月份,要求将这款系统嵌入到钉钉平台,实现免登录. 踩了一堆坑...阿里云社区的也是问题多,成功解答的少. 总结一下: 第三方应用嵌入钉钉,钉钉仅仅提供 dingtalk.js 来给我们dd对象,dd对象的生命周期函数中可以利用相关code对钉钉账户信息进行相关请求, 我只做了userid获取,其他免登陆的工作全是三方应用的编码,与钉钉无关. 问题一:签名不正确,报错5

钉钉小程序微应用技术扫盲开发手册|钉钉小程序开发实战|钉钉小程序新手福利|梁凤财

钉钉小程序比较全的开发手册,一次扫盲,一路顺畅!. 图片为书中部分内容 下载地址: 链接:https://pan.baidu.com/s/1LuPbtRL2lUIKbvfjw2mEvw 提取码:pbvi 复制这段内容后打开百度网盘手机App,操作更方便哦 原文地址:https://www.cnblogs.com/ZenoLiang/p/12677463.html

js api 实现钉钉免登

js api 实现钉钉免登,用于从钉钉微应用跳转到企业内部的oa,erp等,我刚刚实施完了我公司的这个功能,钉钉用起来还不错. 1 js api 实现钉钉免登,页面配置. <title>利用jsapi实现免登</title>     <script type="text/javascript" src="https://g.alicdn.com/ilw/ding/0.7.5/scripts/dingtalk.js" ></s

钉钉开发平台服务端笔记

钉钉开发平台服务端练习:1.在钉钉开发者平台创建一个微应用(前提是注册):2.将编写好的项目放在钉钉微应用中,建立两者的连接.把开发的项目的首页地址,和后台地址,给我们的微应用.地址必须是http://打头的公网地址.或者说是把工程放到一台服务器中,对外进行访问.3.然后根据服务端开发文档创建微应用的各个功能.如:部门操作:员工操作等. 如何接入?首先要有公司的CorpID企业标识和CorpSecret企业凭证密钥,然后再获取访问令牌accessToken. public static fina

“破局者”氚云——低代码应用搭建工具,基于钉钉敏捷搭建企业专属应用

关键词:低代码开发.氚云.中心企业信息化.丰富模板.移动办公 通过信息化来提升管理效率,减低管理成本,增强企业竞争力,是绝大部分企业在发展过程中都绕不开的关键点. 对于大小企业而言,专业的IT人才配备以及充沛的资金支持能够保证信息化管理的有效推行.而更多的企业在信息化布局过程中却面临层层困局,软件购买费用过高,企业费用预算有限;配置专业的IT人员,企业运营成本攀升;购买的系统与业务匹配度低,自定义升级难-- 作为一款低代码(Low-Code)应用搭建工具,氚云恰恰能轻松破解企业信息化布局中遇到的