工作需求,开发钉钉微应用和小程序,之前有接触过支付宝小程序和生活号的开发,流程没有很大的差别,这里记录下我用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的更多相关文章

  1. .NET平台下,钉钉微应用开发之:工作消息通知

    首先看下官方文档,为我们提供了POST请求地址,和几个必传参数的列表以及参数示例,写的都挺详细的. 无奈提供的SDK请求示例是JAVA的,而我用的是.NET的,所以还是摸了一些坑出来,其实也就是不同平 ...

  2. Unity3D开发之“获取IOS设备所在的国家代码"

    原地址:http://dong2008hong.blog.163.com/blog/static/469688272014021025578/ 在前一段时间游戏开发中需要实现获取IOS设备所在的国家代 ...

  3. 钉钉开发入门,微应用识别用户身份,获取用户免登授权码code,获取用户userid,获取用户详细信息

    最近有个需求,在钉钉内,点击微应用,获取用户身份,根据获取到的用户身份去企业内部的用户中心做校验,校验通过,相关子系统直接登陆; 就是在获取这个用户身份的时候,网上的资料七零八落的,找的人烦躁的很,所 ...

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

    一.前言 哈哈,这是我的第一篇博客. 先说一下这个小功能的具体场景: 用户登录钉钉app,点击微应用,获取当前用户的信息,与H5系统的数据库的用户信息对比,如果存在该用户,则点击后直接进入H5系统的首 ...

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

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

  6. 从钉钉微应用定制化导航栏看如何实现Hydrid App开发框架

    钉钉是阿里的一款企业应用APP,里面提供了混合微应用的SDK,这其实最好的一种APP架构模式.微信公众号浏览器JSSDK也提供了类似功能特性,在在交互性上没有钉钉深入. http://ddtalk.g ...

  7. Laravel Cache 缓存钉钉微应用的 Access Token

    钉钉微应用的 Access token 如何获取? Access_Token 是企业访问钉钉开放平台全局接口的唯一凭证,即调用接口时需携带Access_Token.从接口列表看,所有接口都需要携带 a ...

  8. 钉钉微应用接入钉钉免登陆配置记录。NET实现

    在这里记录一下我配置的钉钉接入微应用遇到的坑.搞了我几天天才调通.头皮发麻,现在梳理一下,以免别人也入坑. 1.钉钉接入主要要获取钉钉企业员工的ID,然后去自己的应用的数据库里进行匹配然后实现免登陆的 ...

  9. 从钉钉微应用定制化导航栏看如何实现Hybrid App开发框架

    钉钉是阿里的一款企业应用APP,里面提供了混合微应用的SDK,这其实最好的一种APP架构模式.微信公众号浏览器JSSDK也提供了类似功能特性,在在交互性上没有钉钉深入. http://ddtalk.g ...

随机推荐

  1. http面试笔试常考知识点(二)

    接上一篇随笔 1. https协议为什么比http安全? 内容加密:建立一个信息安全通道,确保信息传输安全: 身份认证:确保网站的真实性: 数据完整性校验:防止内容被第三方冒充或者篡改 2.常见状态码 ...

  2. 一文了解有趣的位运算(&、|、^、~、>>、<<)

    1.位运算概述 从现代计算机中所有的数据二进制的形式存储在设备中.即0.1两种状态,计算机对二进制数据进行的运算(+.-.*./)都是叫位运算,即将符号位共同参与运算的运算. 口说无凭,举一个简单的例 ...

  3. 【iOS】UIButton 常用属性

    发现 UIButton 的相关属性不熟悉了……常用的一些属性代码如下: UIButton *add = [UIButton buttonWithType:UIButtonTypeCustom]; ad ...

  4. 【Android Studio】Frameworks detected: Android framework is detected in the project Configure

    刚开始在 Mac 上用 Android Studio, 打开第一个项目就遇到了问题,描述如下: 上午9:: Frameworks detected: Android framework is dete ...

  5. MOCTF-WEB-writeup

    MOCTF-WEB-writeup 好菜,除了简单的几个题,自己会做,难的都是看老大WP完成的,太菜了 啥姿势都不会,就此记录一下,供日后查看及反省.菜鸡的自我修养 0x01 一道水题 题目链接:ht ...

  6. java的properties文件从数据库添加到文件

    package com.xian.jdbc; import java.io.BufferedInputStream; import java.io.FileInputStream; import ja ...

  7. 配置多个JDK存在的问题与解决方案 (亲测可用)

    安装多个JDK时的技巧 (亲测可用) 我的电脑本来是JDK8的,后来的想在不同的JDK版本下测试JDK的垃圾回收器. 一开始的的思路是,先安装JDK,为每个JDK配置自己的家目录,然后在想用哪个版本的 ...

  8. S2:.net

    1.net框架结构 主要包含公共语言运行时(CLR)和框架类库(.NET Framework 类库 ,FCL) 2.CLR 1.对于一个将要面向.NET平台进行开发的人来说,了解一下.NET平台的整 ...

  9. HackBar收费版绕过

    一段时间没用HackBar,近期做渗透,打开火狐浏览器,按F12键调出HackBar,发现居然需要收费买license才能使用. 经过研究,整理了以下两个绕过HackBar收费版的方法. 第一种:用其 ...

  10. webupload项目中使用

    目前项目需要一个多图上传的功能,使用LayUI并也是可以实现多图上传的,但是没有图片删除功能,参考了一下网上多图上传的插件,选择了WebUpload进行功能开发. 然而不幸的是,官方的插件并不带UI界 ...