using NCC.Dependency;
using NCC.JsonSerialization;
using Senparc.Weixin.Work.AdvancedAPIs;
using Senparc.Weixin.Work.AdvancedAPIs.MailList.Member;
using Senparc.Weixin.Work.Containers;
using System;
namespace NCC.Expand.Thirdparty
{
///
/// 企业号微信
///
[SuppressSniffer]
public class WeChat
{
public string accessToken { get; private set; }
public WeChat(string corpId, string corpSecret, string appSecret = null)
{
try
{
if (appSecret != null)
{
corpSecret = appSecret;
}
accessToken = AccessTokenContainer.TryGetToken(corpId, corpSecret);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
#region 部门
///
/// 查询部门
///
/// Token
/// 部门id
///
public string GetDepartmentList()
{
var result = MailListApi.GetDepartmentList(accessToken);
if (result.errcode == 0)
{
return JSON.Serialize(result.department);
}
else
{
throw new Exception(result.errmsg);
}
}
///
/// 创建部门
///
/// Token
/// 部门名称
/// 父亲部门id
/// 在父部门中的次序
/// 部门id
/// 代理请求超时时间(毫秒)
///
public long CreateDepartment(string name, long parentId, int order, ref string msg, int? id = null, int timeOut = 10000)
{
try
{
var result = MailListApi.CreateDepartment(accessToken, name, parentId, order);
if (result.errcode == 0)
{
return result.id;
}
else
{
msg = result.errmsg;
return 0;
}
}
catch (Exception ex)
{
msg = ex.Message;
return 0;
}
}
///
/// 编辑部门
///
/// Token
/// 部门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, Convert.ToInt64(parentId), Convert.ToInt32(order));
if (result.errcode == 0)
{
return true;
}
else
{
msg = result.errmsg;
return false;
}
}
catch (Exception ex)
{
msg = ex.Message;
return false;
}
}
///
/// 删除部门
///
/// Token
/// 部门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 string GetDepartmentMember(long departmentId, int fetchChild = 1)
{
var result = MailListApi.GetDepartmentMember(accessToken, departmentId, fetchChild);
if (result.errcode == 0)
{
if (result.userlist.Count > 0)
{
return JSON.Serialize(result.userlist);
}
else
{
return null;
}
}
else
{
throw new Exception(result.errmsg);
}
}
#endregion
#region 用户
///
/// 获取成员
///
/// 用户Id
///
public string GetMember(string userId)
{
var result = MailListApi.GetMember(accessToken, userId);
if (result.errcode == 0)
{
return JSON.Serialize(result);
}
else
{
throw new Exception(result.errmsg);
}
}
///
/// 创建成员
///
/// 创建成员信息请求包
/// 代理请求超时时间(毫秒)
///
public bool CreateMember(QYMemberModel 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(QYMemberModel 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);
}
}
#endregion
#region 消息
///
/// 发送消息
///
/// 企业应用的id
/// 消息内容
/// UserID列表
/// PartyID列表
/// TagID列表
/// 否是保密消息
/// 代理请求超时时间(毫秒)
///
public bool SendText(string agentId, string content, string toUser, string toParty = null, string toTag = null, int safe = 0, int timeOut = 10000)
{
var result = MassApi.SendText(accessToken, agentId, content, toUser, toParty, toTag, safe, timeOut);
if (result.errcode == 0)
{
return true;
}
else
{
return false;
}
}
///
/// 发送文件消息
///
/// 企业应用的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, timeOut);
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, timeOut);
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, timeOut);
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, timeOut);
if (result.errcode == 0)
{
return true;
}
else
{
throw new Exception(result.errmsg);
}
}
#endregion
}
}