• .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端(手机也行)钉钉打开应用看看效果:

  • 相关阅读:
    团队作业第三次——项目需求分析
    快乐就队——第八次站立式会议(05-02)
    快乐就队——第七次站立式会议(04-30)
    快乐就队——第六次站立式会议(04-29)
    快乐就队——第五次站立式会议(04-28)
    快乐就队——第四次站立式会议(04-27)
    快乐就队——第三次站立式会议(04-26)
    快乐就队——第二次站立式会议(04-25)
    快乐就队——第一次站立式会议(04-24)
    快乐就队——项目系统设计与数据库设计
  • 原文地址:https://www.cnblogs.com/seaquakear/p/11431000.html
Copyright © 2020-2023  润新知