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

Posted seaquakear

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.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端(手机也行)钉钉打开应用看看效果:

技术图片

 

 

 

 

 

 

 

以上是关于.NET平台下,钉钉微应用开发之:获取userid的主要内容,如果未能解决你的问题,请参考以下文章

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

钉钉2.1更多里没有微应用了

怎样开发钉钉上的应用

钉钉微应用H5开发调试工具

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

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