钉钉扫码获取用户信息接口

官方文档实在是太差劲了!

自己总结的,完整写一下

.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);


        }

    }
}

取到用户信息,就可以存数据库,或者和数据库里用户信息去比较了。

posted @ 2022-03-23 08:44  离。  阅读(433)  评论(0编辑  收藏  举报