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)
{
}
}
}
}