.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,
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的更多相关文章
- .NET平台下,钉钉微应用开发之:工作消息通知
首先看下官方文档,为我们提供了POST请求地址,和几个必传参数的列表以及参数示例,写的都挺详细的. 无奈提供的SDK请求示例是JAVA的,而我用的是.NET的,所以还是摸了一些坑出来,其实也就是不同平 ...
- Unity3D开发之“获取IOS设备所在的国家代码"
原地址:http://dong2008hong.blog.163.com/blog/static/469688272014021025578/ 在前一段时间游戏开发中需要实现获取IOS设备所在的国家代 ...
- 钉钉开发入门,微应用识别用户身份,获取用户免登授权码code,获取用户userid,获取用户详细信息
最近有个需求,在钉钉内,点击微应用,获取用户身份,根据获取到的用户身份去企业内部的用户中心做校验,校验通过,相关子系统直接登陆; 就是在获取这个用户身份的时候,网上的资料七零八落的,找的人烦躁的很,所 ...
- 用java实现“钉钉微应用,免登进入某H5系统首页“功能”
一.前言 哈哈,这是我的第一篇博客. 先说一下这个小功能的具体场景: 用户登录钉钉app,点击微应用,获取当前用户的信息,与H5系统的数据库的用户信息对比,如果存在该用户,则点击后直接进入H5系统的首 ...
- 钉钉开发第三方H5微应用入门详细教程[ISV][免登流程][授权码][HTTP回调推送][识别用户身份][获取用户信息]
转载请注明原文地址:https://www.cnblogs.com/applerosa/p/11509512.html (by lnexin@aliyun.com 世间草木) 此教程注意点: 适用于第 ...
- 从钉钉微应用定制化导航栏看如何实现Hydrid App开发框架
钉钉是阿里的一款企业应用APP,里面提供了混合微应用的SDK,这其实最好的一种APP架构模式.微信公众号浏览器JSSDK也提供了类似功能特性,在在交互性上没有钉钉深入. http://ddtalk.g ...
- Laravel Cache 缓存钉钉微应用的 Access Token
钉钉微应用的 Access token 如何获取? Access_Token 是企业访问钉钉开放平台全局接口的唯一凭证,即调用接口时需携带Access_Token.从接口列表看,所有接口都需要携带 a ...
- 钉钉微应用接入钉钉免登陆配置记录。NET实现
在这里记录一下我配置的钉钉接入微应用遇到的坑.搞了我几天天才调通.头皮发麻,现在梳理一下,以免别人也入坑. 1.钉钉接入主要要获取钉钉企业员工的ID,然后去自己的应用的数据库里进行匹配然后实现免登陆的 ...
- 从钉钉微应用定制化导航栏看如何实现Hybrid App开发框架
钉钉是阿里的一款企业应用APP,里面提供了混合微应用的SDK,这其实最好的一种APP架构模式.微信公众号浏览器JSSDK也提供了类似功能特性,在在交互性上没有钉钉深入. http://ddtalk.g ...
随机推荐
- 在安装Openstack的keystone认证服务时,出现The request you have made requires authentication. (HTTP 401) (Request-ID: req-f94bebba-f0c5-4a92-85问题的处理
创建openstack的keystone认证服务器报错: The request you have made requires authentication. (HTTP 401) (Reques ...
- Python生成器和构造器
什么是生成器? 参考link:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00 ...
- java - 解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法
通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用JVM中的栈空间: 而通过new关键字和构造器创建的对象则放在堆空间,堆是垃圾收集器管理的主要区域,由于现在的垃圾收 ...
- WPF 动态添加按钮以及样式字典的引用(Style introduction)
我们想要达到的结果是,绑定多个Checkbox然后我们还可以获取它是否被选中,其实很简单,我们只要找到那几个关键的对象就可以了. 下面是Ui,其中定义了一个WrapPanel来存放CheckBox,还 ...
- ld: library not found for -
这几天在做微信登录,总是遇到这个问题,详细如下: ld: library not found for -lWeChatSDK clang: error: linker command failed w ...
- JavaScript数据结构——集合的实现与应用
与数学中的集合概念类似,集合由一组无序的元素组成,且集合中的每个元素都是唯一存在的.可以回顾一下中学数学中集合的概念,我们这里所要定义的集合也具有空集(即集合的内容为空).交集.并集.差集.子集的特性 ...
- java8中用流收集数据
用流收集数据 汇总 long howManyDishes = menu.stream().collect(Collectors.counting()); int totalCalories = men ...
- .Net Core in Docker - 使用阿里云Codepipeline及阿里云容器镜像服务实现持续集成(CI)
前面已经介绍过了 .Net Core 程序发布到 Docker 容器的内容.但是每次通过 SSH 链接到服务器敲命令,运行脚本也是挺麻烦的一件事.程序员是最懒的,能让电脑解决的问题绝不手动解决,如果当 ...
- Netty学习(三)-Netty重要接口讲解
上一节我们写了一个HelloWorld,对于Netty的运行有了一定的了解,知道Netty是如何启动客户端和服务器端.这一节我们简要的讲解一下几个重要的接口,初步探讨Netty的运行机制,当然刚学Ne ...
- HTML/CSS:display:flex 布局教程
网页布局(layout)是 CSS 的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂 ...