using System.Text.Json; using Senparc.Weixin.Work.AdvancedAPIs; using Senparc.Weixin.Work.AdvancedAPIs.MailList; using Senparc.Weixin.Work.AdvancedAPIs.MailList.Member; using Senparc.Weixin.Work.Containers; namespace JNPF.Extras.Thirdparty.WeChat; /// /// 企业号微信. /// public class WeChatUtil { /// /// 访问令牌. /// public string accessToken { get; private set; } /// /// 构造函数. /// public WeChatUtil(string corpId, string corpSecret, string appSecret = null) { try { if (appSecret != null) corpSecret = appSecret; accessToken = AccessTokenContainer.TryGetToken(corpId, corpSecret); } catch (Exception) { } } #region 部门 /// /// 查询部门. /// public List GetDepartmentList() { var result = MailListApi.GetDepartmentList(accessToken); if (result.errcode == 0) { return result.department; } else { throw new Exception(result.errmsg); } } /// /// 创建部门. /// /// 部门名称. /// 父亲部门id. /// 在父部门中的次序. /// 返回信息. /// 部门id. /// 代理请求超时时间(毫秒). /// public string CreateDepartment(string name, long parentId, int order, ref string msg, int? id = null, int timeOut = 10000) { try { var result = MailListApi.CreateDepartment(accessToken, name, parentId); if (result.errcode == 0) { return result.id.ToString(); } else { msg = result.errmsg; return string.Empty; } } catch (Exception ex) { msg = string.Format("【组织{0}创建失败】{1}", name, ex.Message); return string.Empty; } } /// /// 编辑部门. /// /// 部门Id. /// 部门名称. /// 父亲部门id. /// 在父部门中的次序. /// 返回信息. /// 代理请求超时时间(毫秒). /// public bool UpdateDepartment(int? id, string name, int? parentId, int? order, ref string msg, int timeOut = 10000) { try { var result = MailListApi.UpdateDepartment(accessToken, Convert.ToInt64(id), name); if (result.errcode == 0) { return true; } else { msg = result.errmsg; return false; } } catch (Exception ex) { msg = string.Format("【组织{0}修改失败】{1}", name, ex.Message); return false; } } /// /// 删除部门. /// /// 部门Id. /// 返回信息. /// public bool DeleteDepartment(int? id, ref string msg) { var result = MailListApi.DeleteDepartment(accessToken, Convert.ToInt64(id)); if (result.errcode == 0) { return true; } else { msg = result.errmsg; return false; } } /// /// 获取部门成员. /// /// 获取的部门id. /// 1/0:是否递归获取子部门下面的成员. /// public List GetDepartmentMember() { var depList = GetDepartmentList(); var userList = new List(); if (depList.Count > 0) { foreach (var item in depList.Select(x => x.id)) { var result = MailListApi.GetDepartmentMemberInfo(accessToken, item, 1); if (result.errcode == 0 && result.userlist.Count > 0) { userList = userList.Union(result.userlist).ToList(); } } } return userList; } #endregion #region 用户 /// /// 获取成员. /// /// 用户Id. /// public string GetMember(string userId) { var result = MailListApi.GetMember(accessToken, userId); if (result.errcode == 0) { return JsonSerializer.Serialize(result); } else { throw new Exception(result.errmsg); } } /// /// 创建成员. /// /// 企业用户. /// 返回信息. /// 代理请求超时时间(毫秒). public bool CreateMember(QYMember member, ref string msg, int timeOut = 10000) { try { MemberCreateRequest memberCreate = new MemberCreateRequest(); memberCreate.name = member.name; memberCreate.avatar_mediaid = member.avatar_mediaid; memberCreate.department = member.department; memberCreate.email = member.email; memberCreate.enable = member.enable; memberCreate.english_name = member.english_name; memberCreate.extattr = (Extattr)member.extattr; memberCreate.external_profile = (External_Profile)member.external_profile; memberCreate.gender = member.gender; memberCreate.mobile = member.mobile; memberCreate.order = member.order; memberCreate.position = member.position; memberCreate.telephone = member.telephone; memberCreate.userid = member.userid; var result = MailListApi.CreateMember(accessToken, memberCreate, timeOut); if (result.errcode == 0) return true; return false; } catch (Exception ex) { msg = ex.Message; return false; } } /// /// 编辑成员. /// /// 企业用户. /// 返回信息. /// 代理请求超时时间(毫秒). public bool UpdateMember(QYMember member, ref string msg, int timeOut = 10000) { try { MemberUpdateRequest memberUpdate = new MemberUpdateRequest(); memberUpdate.name = member.name; memberUpdate.avatar_mediaid = member.avatar_mediaid; memberUpdate.department = member.department; memberUpdate.email = member.email; memberUpdate.enable = member.enable; memberUpdate.english_name = member.english_name; memberUpdate.extattr = (Extattr)member.extattr; memberUpdate.external_profile = (External_Profile)member.external_profile; memberUpdate.gender = member.gender; memberUpdate.mobile = member.mobile; memberUpdate.order = member.order; memberUpdate.position = member.position; memberUpdate.telephone = member.telephone; memberUpdate.userid = member.userid; var result = MailListApi.UpdateMember(accessToken, memberUpdate, timeOut); if (result.errcode == 0) { return true; } else { return false; } } catch (Exception ex) { msg = ex.Message; return false; } } /// /// 删除成员. /// /// 成员Id. /// 返回信息. /// public bool DeleteMember(string userId, string msg = null) { try { var result = MailListApi.DeleteMember(accessToken, userId); if (result.errcode == 0) { return true; } return false; } catch (Exception ex) { msg = ex.Message; return false; } } /// /// 批量删除成员. /// /// 成员UserID列表. /// 代理请求超时时间(毫秒). /// public bool BatchDeleteMember(string[] useridlist, int timeOut = 10000) { var result = MailListApi.BatchDeleteMember(accessToken, useridlist, timeOut = 10000); if (result.errcode == 0) { return true; } else { throw new Exception(result.errmsg); } } /// /// 手机号获取成员. /// /// 手机号码. public string GetUserid(string mobile) { try { var result = MailListApi.GetUserid(accessToken, mobile, 10000); if (result.errcode == 0) { return result.userid; } else { return string.Empty; } } catch (Exception ex) { return string.Empty; } } #endregion #region 消息 /// /// 发送消息. /// /// 企业应用的id. /// 消息内容. /// UserID列表. /// PartyID列表. /// TagID列表. /// 否是保密消息. /// 代理请求超时时间(毫秒). /// public async Task SendText(string agentId, string content, string toUser, string toParty = null, string toTag = null, int safe = 0, int timeOut = 10000) { var result = await MassApi.SendTextAsync(accessToken, agentId, content, toUser, toParty, toTag, safe); if (result.errcode != 0) { throw new Exception(result.errmsg); } } /// /// 发送文件消息. /// /// 企业应用的id. /// 媒体资源文件ID. /// UserID列表. /// PartyID列表. /// TagID列表. /// 否是保密消息. /// 代理请求超时时间(毫秒). /// public bool SendFile(string agentId, string mediaId, string toUser, string toParty = null, string toTag = null, int safe = 0, int timeOut = 10000) { var result = MassApi.SendFile(accessToken, agentId, mediaId, toUser, toParty, toTag, safe); if (result.errcode == 0) { return true; } else { throw new Exception(result.errmsg); } } /// /// 发送图片消息. /// /// 企业应用的id. /// 媒体资源文件ID. /// UserID列表. /// PartyID列表. /// TagID列表. /// 否是保密消息. /// 代理请求超时时间(毫秒). public bool SendImage(string agentId, string mediaId, string toUser, string toParty = null, string toTag = null, int safe = 0, int timeOut = 10000) { var result = MassApi.SendImage(accessToken, agentId, mediaId, toUser, toParty, toTag, safe); if (result.errcode == 0) { return true; } else { throw new Exception(result.errmsg); } } /// /// 发送视频消息. /// /// 企业应用的id. /// 媒体资源文件ID. /// UserID列表. /// PartyID列表. /// TagID列表. /// 视频消息的标题. /// 视频消息的描述. /// 否是保密消息. /// 代理请求超时时间(毫秒). /// public bool SendVideo(string agentId, string mediaId, string toUser, string toParty = null, string toTag = null, string title = null, string description = null, int safe = 0, int timeOut = 10000) { var result = MassApi.SendVideo(accessToken, agentId, mediaId, toUser, toParty, toTag, title, description, safe); if (result.errcode == 0) { return true; } else { throw new Exception(result.errmsg); } } /// /// 发送语音消息. /// /// 企业应用的id. /// 媒体资源文件ID. /// UserID列表. /// PartyID列表. /// TagID列表. /// 否是保密消息. /// 代理请求超时时间(毫秒). /// public bool SendVoice(string agentId, string mediaId, string toUser, string toParty = null, string toTag = null, int safe = 0, int timeOut = 10000) { var result = MassApi.SendVoice(accessToken, agentId, mediaId, toUser, toParty, toTag, safe); if (result.errcode == 0) { return true; } else { throw new Exception(result.errmsg); } } #endregion }