钉钉开放平台: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;}}
注意:以上操作需要接口权限,具体在实际调试过程中按照返回提示结合操作指引在钉钉开发者后台申请相应权限。