• .Net 集成钉钉


      接通知要做钉钉组件开发,一头雾水。慢慢研究。发现是官方提供的接口供调用,该怎么写成组件呢。查了好多教程和大家的经验,很详细也很有用。根据自己这几天的摸索写下经验。

      但是为啥要接钉钉呢?使用钉钉的平台,钉钉的内部一些功能,用户数据角色管理审批管理等,无需关注待办工作流内部流程状态同步及处理,无需关注工作流模板创建及维护;只需关注产品业务场景,同时还可以节省企业开发成本。接入钉钉使用钉钉的一些功能,不用在重复开发。钉钉提供了丰富的api供调用,实现企业系统与钉钉的集成打通。

    钉钉中的准备:

    注册钉钉企业账户(https://oa.dingtalk.com/#/login)-》钉钉开放平台上创建应用-》授权一个开发人员,并获取CorpSecret,需要把corpId和CorpSecret作为参数请求api接口获取AccessToken,后面的所有接口都需要AccessToken。

    下面的图是网上盗的,详细查看https://www.cnblogs.com/westsoft/p/11282057.html

    完成以后就可以开始写代码了。

    1.根据之前获取的corpId和CorpSecret获取token

     private OapiGettokenResponse GetAccessToken(string CorpId, string CorpSecret, long AgentID)
            {
                IDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
                OapiGettokenRequest request = new OapiGettokenRequest();
                request.Corpid = CorpId;
                request.Corpsecret = CorpSecret;
                request.SetHttpMethod("GET");
                OapiGettokenResponse response = client.Execute(request);
                if (response.Errcode == 0)
                {
                    LogHelper.WriteLog(response.ErrMsg);
                    return response;
                }
                else
                {
                    return null;
                }
            }

    2.获取用户信息

            /// <summary>
            /// 获取用户信息
            /// </summary>
            /// <param name="CorpId"></param>
            /// <param name="CorpSecret"></param>
            /// <param name="AgentID"></param>
            /// <param name="Userid"></param>
            /// <returns></returns>
            public OapiUserGetResponse Getuserinfo(string CorpId, string CorpSecret, long AgentID,string Userid)
            {
                IDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/get");
                OapiUserGetRequest request = new OapiUserGetRequest();
                request.Userid = Userid;  //员工id
                request.SetHttpMethod("GET");
                var accesstoken = GetAccessToken(CorpId, CorpSecret, AgentID).AccessToken;
                if (accesstoken == null)
                {
                    return null;
                }
                else
                {
                    OapiUserGetResponse response = client.Execute(request, accesstoken);
                    LogHelper.WriteLog(response.Body);
                    return response;
                }
            }
    
    
            /// <summary>
            /// 获取当前部门下的userid列表
            /// </summary>
            /// <param name="CorpId"></param>
            /// <param name="CorpSecret"></param>
            /// <param name="AgentID"></param>
            /// <param name="DeptId"></param>
            /// <returns></returns>
            public OapiUserGetDeptMemberResponse GetuserBydept(string CorpId, string CorpSecret, long AgentID, string DeptId)
            {
                IDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/getDeptMember");
                OapiUserGetDeptMemberRequest req = new OapiUserGetDeptMemberRequest();
                req.DeptId= DeptId;
                req.SetHttpMethod("GET");
                var accesstoken = GetAccessToken(CorpId, CorpSecret, AgentID).AccessToken;
                if (accesstoken == null)
                {
                    return null;
                }
                else
                {
                    OapiUserGetDeptMemberResponse rsp = client.Execute(req, accesstoken);
                    LogHelper.WriteLog(rsp.Body);
                    return rsp;
                }
            }

    3.获取审批

     public OapiProcessinstanceGetResponse CreateFlow(string CorpId, string CorpSecret, long AgentID,
                string ProcessInstanceId)
            {
                IDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/processinstance/get");
                OapiProcessinstanceGetRequest req = new OapiProcessinstanceGetRequest();
                //审批流唯一码
                req.ProcessInstanceId = ProcessInstanceId;
                
                var accesstoken = GetAccessToken(CorpId, CorpSecret, AgentID).AccessToken;
                if (accesstoken == null)
                {
                    return null;
                }
                else
                {
                    OapiProcessinstanceGetResponse rsp = client.Execute(req, accesstoken);
                    return rsp;
                }
            }

    只做了几个例子。其他按接口都可以实现。

      关于所有的钉钉接口都在钉钉官网内,不过用的是java但是net版类似。详细看官网

    https://ding-doc.dingtalk.com/doc#/serverapi3/is3zms

    https://open-dev.dingtalk.com/apiExplorer#/?devType=isv&api=/user/getuserinfo

      有个与钉钉集成的案例,因为不涉及这么多功能,到时候有具体需求在研究。https://help.finereport.com/finereport8.0/doc-view-1473.html

      有个问题想不通,如果使用钉钉管理企业用户,那数据是存放在哪里呢?钉钉还是第三方呢。那数据安全怎么弄呢。

  • 相关阅读:
    dajngo 访问静态资源 图片
    springboot Shiro
    Jmeter集合点(线程组和同步定时器)
    Jmeter中的线程租的参数讲解
    人工智能必备数学知识学习笔记9:初等矩阵和矩阵的可逆性
    人工智能必备数学知识学习笔记8:线性系统
    在 web 中 后台 推送消息 页面 的消息提醒 注意
    web页面实现文件下载的几种方式
    ant desgin pro 的表格组件中的 使用 之自动刷新
    ant desgin 项目中 弹框modlel 模态框中展示 form 表单 将 form 表单 的提交按钮 关联到 模态框的 确定按钮上 在hook的写法中 在 class 的组件中 要加上 this
  • 原文地址:https://www.cnblogs.com/yokiblogs/p/12518533.html
Copyright © 2020-2023  润新知