钉钉扫码获取用户信息接口
官方文档实在是太差劲了!
自己总结的,完整写一下
.NET开发调用钉钉接口时
TopSdk.dll。这个DLL要添加到引用,而且要最新版本,这是2022.01.26时的最新版本,
如再有更新,可去官网找下载,网址:https://open.dingtalk.com/document/orgapp-server/sdk-download
辣鸡钉钉官网文档,有可能会变
相关引用及JS下载:TopSdk.dll--dingtalk.js-----和钉钉接口开发,SDK,需要的DLL-C#文档类资源-CSDN下载
第一步获取CODE
先调用dingtalk.js。再添加引用TopSdk.dll
让用户打开GetDingding01.aspx页,也可把此页生成二维码,此页只获取CODE用,获取CODE后再跳转去获取access_token
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<script src="JS/jquery-3.4.1.js"></script>
<script src="JS/dingtalk.js"></script>
<script>
$(function () {
dd.ready(function () {
dd.runtime.permission.requestAuthCode({
corpId: "ding*********",
onSuccess: function (result) {
var code = result.code;
//alert(code);
//将code 发往后台处理
window.location.href = "GetDingding.aspx?code=" + code;
},
onFail: function (err) {
alert('出错了, ' + err);
}
});
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
第二步获取access_token和用户信息
跳转到GetDingding.aspx来获取信息
这里页面上不用写东西,直接在CS代码里写逻辑就行
using System;
using System.Text;
using System.Net;
using System.IO;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using Newtonsoft.Json;
using DAL;
using DingTalk.Api;
using DingTalk.Api.Request;
using DingTalk.Api.Response;
namespace MyProject
{
public partial class GetDingding : System.Web.UI.Page
{
private string strCode = "";
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["code"] != null)
{
strCode = Request.QueryString["code"].ToString();
GetDingdingInfo(strCode);
}
}
#region 获取钉钉接口调用凭证:access_token
/// <summary>
/// 获取钉钉接口调用凭证:access_token
/// </summary>
/// <returns></returns>
public static string GetDingAccessToken()
{
string access_token = string.Empty;
try
{
string accessToken = string.Empty;
IDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
OapiGettokenRequest req = new OapiGettokenRequest();
req.Appkey = "ding********";// "ding********";
req.Appsecret = "***************"; //"*****-*****";
req.SetHttpMethod("GET");
OapiGettokenResponse rsp = client.Execute(req, access_token);
//Console.WriteLine(rsp.Body);
access_token = rsp.AccessToken;//rsp.Body
}
catch (Exception ex)
{
}
return access_token;
}
#endregion
private void GetDingdingInfo(string code)
{
string access_token = GetDingAccessToken();
Common.CreateWebLog("code+access_token", "code:" + code + "__" + "access_token:" + access_token);
IDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/getuserinfo");
OapiV2UserGetuserinfoRequest req = new OapiV2UserGetuserinfoRequest();
req.Code = code;
OapiV2UserGetuserinfoResponse rsp = client.Execute(req, access_token);
//Console.WriteLine(rsp.Body);
Common.CreateWebLog("钉钉扫码获取用户信息", "unionid:" + rsp.Result.Unionid + "__" + "姓名:" + rsp.Result.Name + "__" + "Userid:" + rsp.Result.Userid);
}
}
}
取到用户信息,就可以存数据库,或者和数据库里用户信息去比较了。