using DingTalk.Api; using DingTalk.Api.Request; using DingTalk.Api.Response; using NCC.Dependency; using NCC.Expand.Thirdparty.DingDing; using Mapster; using System; namespace NCC.Expand.Thirdparty { /// /// 钉钉 /// [SuppressSniffer] public class Ding { public string token { get; private set; } public Ding(string appKey, string appSecret) { token = GetDingToken(appKey, appSecret); } /// /// 钉钉token /// /// /// /// public string GetDingToken(string appKey, string appSecret) { try { var tokenurl = "https://oapi.dingtalk.com/gettoken"; DefaultDingTalkClient client = new DefaultDingTalkClient(tokenurl); OapiGettokenRequest req = new OapiGettokenRequest(); req.SetHttpMethod("GET"); req.Appkey = appKey; req.Appsecret = appSecret; OapiGettokenResponse response = client.Execute(req); if (response.Errcode == 0) { //过期时间 var timeout = DateTime.Now.Subtract(DateTime.Now.AddSeconds(response.ExpiresIn)); return response.AccessToken; } else { throw new Exception("获取钉钉Token失败,失败原因:" + response.Errmsg); } } catch (Exception ex) { throw new Exception(ex.Message); } } /// /// 钉钉登录 /// /// /// public object DingLogin(string code) { var url = "https://oapi.dingtalk.com/user/getuserinfo"; DefaultDingTalkClient client = new DefaultDingTalkClient(url); OapiUserGetuserinfoRequest req = new OapiUserGetuserinfoRequest(); req.Code = code; req.SetHttpMethod("GET"); OapiUserGetuserinfoResponse rsp = client.Execute(req, token); if (rsp.IsError) { throw new Exception(rsp.ErrMsg); } return rsp.Body; } #region 用户 /// /// 添加钉钉用户 /// /// /// public string CreateUser(DingUserModel dingModel, ref string msg) { try { var url = "https://oapi.dingtalk.com/topapi/v2/user/create"; DefaultDingTalkClient client = new DefaultDingTalkClient(url); OapiV2UserCreateRequest req = dingModel.Adapt(); OapiV2UserCreateResponse rsp = client.Execute(req, token); if (rsp.Errcode == 0) { return rsp.Result.Userid; } else { msg = rsp.Errmsg; return ""; } } catch (Exception ex) { throw new Exception(ex.Message); } } /// /// 修改钉钉用户 /// /// public bool UpdateUser(DingUserModel dingModel, ref string msg) { try { var url = "https://oapi.dingtalk.com/topapi/v2/user/update"; DefaultDingTalkClient client = new DefaultDingTalkClient(url); OapiV2UserUpdateRequest req = dingModel.Adapt(); OapiV2UserUpdateResponse rsp = client.Execute(req, token); if (rsp.Errcode != 0) { msg = rsp.Errmsg; } return rsp.Errcode == 0; } catch (Exception ex) { throw new Exception(ex.Message); } } /// /// 修改钉钉用户 /// /// public void DeleteUser(DingUserModel dingModel, ref string msg) { try { var url = "https://oapi.dingtalk.com/topapi/v2/user/delete"; DefaultDingTalkClient client = new DefaultDingTalkClient(url); OapiV2UserDeleteRequest req = dingModel.Adapt(); OapiV2UserDeleteResponse rsp = client.Execute(req, token); if (rsp.Errcode != 0) { msg = rsp.Errmsg; } } catch (Exception ex) { throw new Exception(ex.Message); } } #endregion #region 部门 /// /// 添加钉钉部门 /// /// /// public string CreateDep(DingDepModel dingModel, ref string msg) { try { var url = "https://oapi.dingtalk.com/topapi/v2/department/create"; DefaultDingTalkClient client = new DefaultDingTalkClient(url); OapiV2DepartmentCreateRequest req = dingModel.Adapt(); OapiV2DepartmentCreateResponse rsp = client.Execute(req, token); if (rsp.Errcode==0) { if (!rsp.IsError) { return rsp.Result.DeptId.ToString(); } else { msg = rsp.Errmsg; return null; } } else { msg = rsp.Errmsg; return null; } } catch (Exception ex) { throw new Exception(ex.Message); } } /// /// 修改钉钉部门 /// /// public bool UpdateDep(DingDepModel dingModel, ref string msg) { try { var url = "https://oapi.dingtalk.com/topapi/v2/department/update"; DefaultDingTalkClient client = new DefaultDingTalkClient(url); OapiV2DepartmentUpdateRequest req = dingModel.Adapt(); OapiV2DepartmentUpdateResponse rsp = client.Execute(req, token); if (rsp.Errcode == 0) { msg = rsp.IsError?rsp.Errmsg:""; return !rsp.IsError; } else { msg = rsp.Errmsg; return false; } } catch (Exception ex) { return false; } } /// /// 删除钉钉部门 /// /// public bool DeleteDep(DingDepModel dingModel, ref string msg) { try { var url = "https://oapi.dingtalk.com/topapi/v2/department/delete"; DefaultDingTalkClient client = new DefaultDingTalkClient(url); OapiV2DepartmentDeleteRequest req = dingModel.Adapt(); OapiV2DepartmentDeleteResponse rsp = client.Execute(req, token); if (rsp.Errcode == 0) { msg = rsp.IsError ? rsp.Errmsg : ""; return !rsp.IsError; } else { msg = rsp.Errmsg; return false; } } catch (Exception ex) { throw new Exception(ex.Message); } } #endregion /// /// 发送工作消息 /// /// public void SendWorkMsg(DingWorkMsgModel dingModel) { try { var url = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2"; DefaultDingTalkClient client = new DefaultDingTalkClient(url); OapiMessageCorpconversationAsyncsendV2Request request = new OapiMessageCorpconversationAsyncsendV2Request() { AgentId = long.Parse(dingModel.agentId), UseridList = dingModel.toUsers, Msg = dingModel.msg }; request.SetHttpMethod("POST"); OapiMessageCorpconversationAsyncsendV2Response response = client.Execute(request, token); if (response.IsError) { throw new Exception(response.ErrMsg); } } catch (Exception ex) { } } } }