当前位置: 首页 > news >正文

对接钉钉审批过程记录(C#版本)

钉钉开放平台:API总览 - 钉钉开放平台

按照开放平台操作指引,进入到钉钉开发者后台:开发者后台统一登录 - 钉钉统一身份认证,进行应用创建。

按照开放平台指引下载钉钉SDK(新版)。

在vs引入钉钉dll文件。

  • 获取应用接入token:
 public class GetToken{public static AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client CreateClient(){AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config();config.Protocol = "https";config.RegionId = "central";return new AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client(config);}public static string DingtalkToken(){AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client client = CreateClient();AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models.GetTokenRequest getTokenRequest = new AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models.GetTokenRequest{ClientId = "你的clientid,在开发者后台查看",ClientSecret = "你的secret,在开发者后台查看",GrantType = "client_credentials",};var res = client.GetToken("你的组织corpid,需要管理员在钉钉管理后台查看", getTokenRequest);return res.Body.AccessToken;}}
  • 获取用户id:
public class GetUser
{public static AlibabaCloud.SDK.Dingtalkcontact_1_0.Client CreateClient(){AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config();config.Protocol = "https";config.RegionId = "central";return new AlibabaCloud.SDK.Dingtalkcontact_1_0.Client(config);}public static string GetUserId(string token,string username){AlibabaCloud.SDK.Dingtalkcontact_1_0.Client client = CreateClient();AlibabaCloud.SDK.Dingtalkcontact_1_0.Models.SearchUserHeaders searchUserHeaders = new AlibabaCloud.SDK.Dingtalkcontact_1_0.Models.SearchUserHeaders();searchUserHeaders.XAcsDingtalkAccessToken = token;AlibabaCloud.SDK.Dingtalkcontact_1_0.Models.SearchUserRequest searchUserRequest = new AlibabaCloud.SDK.Dingtalkcontact_1_0.Models.SearchUserRequest{QueryWord = username,Offset = 0,Size = 10,FullMatchField = 1,};try{var res = client.SearchUserWithOptions(searchUserRequest, searchUserHeaders, new AlibabaCloud.TeaUtil.Models.RuntimeOptions());string uid = res.Body.List.First();return uid;}catch (TeaException err){if (!AlibabaCloud.TeaUtil.Common.Empty(err.Code) && !AlibabaCloud.TeaUtil.Common.Empty(err.Message)){Console.WriteLine(err.Code);Console.WriteLine(err.Message);var a = err.AccessDeniedDetail["requiredScopes"];foreach (var item in (List<object>)a){Console.WriteLine(item.ToString());}}}catch (Exception _err){TeaException err = new TeaException(new Dictionary<string, object>{{ "message", _err.Message }});if (!AlibabaCloud.TeaUtil.Common.Empty(err.Code) && !AlibabaCloud.TeaUtil.Common.Empty(err.Message)){Console.WriteLine(err.Code);Console.WriteLine(err.Message);}}return "";}
}
  • 发起流程:
public class DingtalkProcess
{public static AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client CreateClient(){AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config();config.Protocol = "https";config.RegionId = "central";return new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client(config);}public static string StartProcess(string Token,string Uid,string Now, string Code, string Name,string Group,string Address){AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client client = CreateClient();AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceHeaders startProcessInstanceHeaders = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceHeaders();startProcessInstanceHeaders.XAcsDingtalkAccessToken = Token;string InstanceId = "";AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues0 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues{Name = "日期",Value = Now,ComponentType = "DDDateField",};AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues1 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues{Name = "编码",Value = Code,ComponentType = "TextField",};AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues2 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues{Name = "名称",Value = Name,ComponentType = "TextField",};AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues3 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues{Name = "分组",Value = Group,ComponentType = "TextField",};AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues4 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues{Name = "地址",Value = Address,ComponentType = "TextField",};AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest startProcessInstanceRequest = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest{OriginatorUserId = Uid,//发起人idProcessCode = "你的单据id,由管理员在钉钉后台OA审批相应单据查看",DeptId = 1234567,//部门id,由管理员在通讯录查询相应部门idFormComponentValues = new List<AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues>
{formComponentValues0, formComponentValues1, formComponentValues2, formComponentValues3, formComponentValues4
},};try{var ResponseId=client.StartProcessInstanceWithOptions(startProcessInstanceRequest, startProcessInstanceHeaders, new AlibabaCloud.TeaUtil.Models.RuntimeOptions());InstanceId = ResponseId.Body.InstanceId;}catch (TeaException err) {Console.WriteLine(err.Code);Console.WriteLine(err.Message);var a=err.AccessDeniedDetail["requiredScopes"];foreach (var item in (List<object>)a){Console.WriteLine(item.ToString());}}return InstanceId;}
}
  • 根据钉钉流程审批实例id获取审批流程状态:
 public class GetInstance{public static AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client CreateClient(){AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config();config.Protocol = "https";config.RegionId = "central";return new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client(config);}public static GetProcessInstanceResponse GetProcess(string token,string processId) {AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client client = CreateClient();AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.GetProcessInstanceHeaders getProcessInstanceHeaders = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.GetProcessInstanceHeaders();getProcessInstanceHeaders.XAcsDingtalkAccessToken = token;AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.GetProcessInstanceRequest getProcessInstanceRequest = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.GetProcessInstanceRequest{ProcessInstanceId = processId,};try{var res= client.GetProcessInstanceWithOptions(getProcessInstanceRequest, getProcessInstanceHeaders, new AlibabaCloud.TeaUtil.Models.RuntimeOptions());return res;}catch (TeaException err){if (!AlibabaCloud.TeaUtil.Common.Empty(err.Code) && !AlibabaCloud.TeaUtil.Common.Empty(err.Message)){// err 中含有 code 和 message 属性,可帮助开发定位问题}}catch (Exception _err){TeaException err = new TeaException(new Dictionary<string, object>{{ "message", _err.Message }});if (!AlibabaCloud.TeaUtil.Common.Empty(err.Code) && !AlibabaCloud.TeaUtil.Common.Empty(err.Message)){// err 中含有 code 和 message 属性,可帮助开发定位问题}}return null;}}

注意:以上操作需要接口权限,具体在实际调试过程中按照返回提示结合操作指引在钉钉开发者后台申请相应权限。

http://www.dtcms.com/a/318040.html

相关文章:

  • 高可用改造之构建​​双活冗余的TDengine时序数据处理架构
  • 通过最严时序标准,再登产业图谱榜首,TDengine 时序数据库在可信数据库大会荣获双荣誉
  • AI 软件工程开发 AI 算法 架构与业务
  • Effective C++ 条款25:考虑写出一个不抛异常的swap函数
  • linux 使用docker时开放的端口不受防火墙控制的解决方案
  • 医疗AI中GPU部署的“非对等全节点架构“方案分析(上)
  • AI领域的三箭齐发之夜 - genie3,gpt-oss, Opus 4.1
  • hyper-v常见问题解答(此文会持续更新)
  • DNS 服务器
  • 远程连接----ubuntu ,rocky 等Linux系统,WindTerm_2.7.0
  • 当前主流GPU全景讲解:架构、功能与应用方向
  • 一种简单的3dnr去噪算法介绍
  • 北京-4年功能测试2年空窗-报培训班学测开-第六十九天-投简历第一天-从兴奋到害怕
  • Unity工具—Inspector面板增加Rect Transform组件上下左右移动的工具
  • linux IO介绍
  • Android系统性能分析利器:深入解析Tracing框架
  • Dify+Nginx反向代理:80端口冲突的优雅解决方案
  • ICCV 2025 | 视频生成迈入“多段一致”新时代!TokensGen用“压缩Token”玩转长视频生成
  • Mysql如何迁移数据库数据
  • mysql数据库基础操作
  • 每日任务day0806:小小勇者成长记之收获日
  • 在 Visual Studio Code 中免费使用 Gemini 2.5 Pro API
  • 滴滴招java开发
  • 利用DeepSeek改写并增强测试Duckdb和sqlite的不同插入方法性能
  • 虚幻GAS底层原理解剖四 (TAG)
  • Boosting 知识点整理:调参技巧、可解释性工具与实战案例
  • [Oracle] NVL()函数
  • 【概念学习】深度学习有何不同
  • 220降5V,30mA电流,墙壁开关和调光器应用场景WD5201
  • 【秋招笔试】2025.08.02-OPPO秋招第二套-第一题