399 lines
15 KiB
C#
399 lines
15 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using System.Text;
|
|||
|
using System.Threading.Tasks;
|
|||
|
using PCRobot.Entitys.Enterprise;
|
|||
|
using PCRobot.Utils;
|
|||
|
|
|||
|
namespace PCRobot.PCWechat.Enterprise
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// 企业微信基类
|
|||
|
/// </summary>
|
|||
|
public abstract class WechatEnterpriseBase : WechatBase
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// 是否初始化
|
|||
|
/// </summary>
|
|||
|
internal static bool IsQYInstall { get; set; }
|
|||
|
|
|||
|
public WechatEnterpriseBase(WechatUser User) : base(User) { }
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 获取会话ID
|
|||
|
/// </summary>
|
|||
|
/// <param name="username"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public string GetConversationId(string username)
|
|||
|
{
|
|||
|
var conversation_id = username;
|
|||
|
if (!username.StartsWith("R:"))
|
|||
|
conversation_id = $"S:{User.Wxid}_{username}";
|
|||
|
return conversation_id;
|
|||
|
}
|
|||
|
|
|||
|
#region 发送消息
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 发送目录
|
|||
|
/// </summary>
|
|||
|
/// <param name="username">接收者的微信</param>
|
|||
|
/// <param name="dirPath">目录路径</param>
|
|||
|
/// <returns></returns>
|
|||
|
public abstract void SendDirectory(string username, string dirPath);
|
|||
|
|
|||
|
///// <summary>
|
|||
|
///// 发送小程序
|
|||
|
///// </summary>
|
|||
|
///// <param name="toUsername">接收者的账号</param>
|
|||
|
///// <param name="appUsername">小程序账号(xxxx@app)</param>
|
|||
|
///// <param name="appId">小程序id</param>
|
|||
|
///// <param name="appName">小程序名称</param>
|
|||
|
///// <param name="appicon">小程序图片地址</param>
|
|||
|
///// <param name="title">小程序标题</param>
|
|||
|
///// <param name="page_path">小程序指定的路径</param>
|
|||
|
///// <param name="file_id">cdn文件id</param>
|
|||
|
///// <param name="aes_key">cdnkey</param>
|
|||
|
///// <param name="md5">md5</param>
|
|||
|
///// <param name="size">大小</param>
|
|||
|
///// <exception cref="Exception"></exception>
|
|||
|
//public abstract void SendProgramMessage(string username, string appUsername, string appId, string appName,
|
|||
|
// string appicon, string title, string page_path);
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 发送视频号
|
|||
|
/// </summary>
|
|||
|
/// <param name="username">接收者的账号</param>
|
|||
|
/// <param name="avatar">头像</param>
|
|||
|
/// <param name="cover_url"></param>
|
|||
|
/// <param name="desc">描述</param>
|
|||
|
/// <param name="feed_type">类型</param>
|
|||
|
/// <param name="nickname">标题</param>
|
|||
|
/// <param name="thumb_url"></param>
|
|||
|
/// <param name="url"></param>
|
|||
|
/// <param name="extras">附加</param>
|
|||
|
/// <exception cref="Exception"></exception>
|
|||
|
public abstract void SendVideoHao(string username, string avatar, string cover_url, string desc, int feed_type,
|
|||
|
string nickname, string thumb_url, string url, string extras);
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 转让群主
|
|||
|
/// </summary>
|
|||
|
public abstract void TransRoom(string username, string user_id);
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 开启关闭群邀请确认
|
|||
|
/// </summary>
|
|||
|
/// <param name="username"></param>
|
|||
|
/// <param name="status">true开启,flase关闭</param>
|
|||
|
public abstract void OnOffRoomInvite(string username, bool status);
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 开启关闭修改群名
|
|||
|
/// </summary>
|
|||
|
/// <param name="username"></param>
|
|||
|
/// <param name="status">true开启,flase关闭</param>
|
|||
|
public abstract void OnOffRoomModNick(string username, bool status);
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region 群操作类
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 邀请用户进群
|
|||
|
/// </summary>
|
|||
|
/// <param name="groupid">群ID</param>
|
|||
|
/// <param name="usernames">邀请的用户账号集</param>
|
|||
|
/// <returns></returns>
|
|||
|
public abstract void InviteMemberToGroup(string groupid, string[] usernames);
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 申请添加群成员为好友
|
|||
|
/// </summary>
|
|||
|
/// <param name="groupid">用户所在群ID</param>
|
|||
|
/// <param name="username">要加的用户账号(该用户一定要在群里)</param>
|
|||
|
/// <param name="verify">验证消息</param>
|
|||
|
/// <returns></returns>
|
|||
|
public abstract void AddGroupMemberToFriend(string groupid, string username, string corp_id, string verify);
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region 好友操作类
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 修改内/外部好友描述
|
|||
|
/// </summary>
|
|||
|
/// <param name="username">要修改的user_id</param>
|
|||
|
/// <param name="desc">好友描述信息</param>
|
|||
|
/// <returns></returns>
|
|||
|
public abstract void ModifyFriendDesc(string username, string desc);
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 修改外部联系人手机号列表
|
|||
|
/// </summary>
|
|||
|
/// <param name="username">要修改的user_id</param>
|
|||
|
/// <param name="phone_list">手机号列表,最多5个</param>
|
|||
|
/// <returns></returns>
|
|||
|
public abstract void ModifyFriendPhone(string username, string[] phone_list);
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 修改外部联系人公司名称
|
|||
|
/// </summary>
|
|||
|
/// <param name="username">要修改的user_id</param>
|
|||
|
/// <param name="company">公司名称</param>
|
|||
|
/// <returns></returns>
|
|||
|
public abstract void ModifyExternalFriendCompanyNick(string username, string company);
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 通过手机号查询微信信息
|
|||
|
/// </summary>
|
|||
|
/// <param name="search">搜索的内容</param>
|
|||
|
/// <returns></returns>
|
|||
|
public abstract Task<FriendInfoHandlerEnterprise> SearchContactMobile(string search);
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 添加搜索到的微信用户
|
|||
|
/// </summary>
|
|||
|
/// <param name="username">通过查询获取到的账号</param>
|
|||
|
/// <param name="openid">搜索到的openid</param>
|
|||
|
/// <param name="wx_ticket">搜索到的wx_ticket</param>
|
|||
|
/// <param name="verify">验证消息</param>
|
|||
|
/// <returns></returns>
|
|||
|
public abstract void AddRoutineSearchContact(string username, string openid, string wx_ticket, string verify);
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 添加搜索到的企业用户
|
|||
|
/// </summary>
|
|||
|
/// <param name="username">通过查询获取到的账号</param>
|
|||
|
/// <param name="corp_id">公司id</param>
|
|||
|
/// <param name="verify">验证信息</param>
|
|||
|
/// <exception cref="Exception"></exception>
|
|||
|
public abstract void AddEnterpriseSearchContact(string username, string corp_id, string verify);
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 添加名片为联系人
|
|||
|
/// </summary>
|
|||
|
/// <param name="username"></param>
|
|||
|
/// <param name="corp_id"></param>
|
|||
|
/// <param name="from_user_id"></param>
|
|||
|
/// <param name="verify"></param>
|
|||
|
/// <exception cref="Exception"></exception>
|
|||
|
public abstract void AddCardFriendContact(string username, string corp_id, string from_user_id, string verify);
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 添加删除的联系人
|
|||
|
/// </summary>
|
|||
|
/// <param name="username"></param>
|
|||
|
/// <param name="corp_id"></param>
|
|||
|
/// <param name="verify"></param>
|
|||
|
/// <exception cref="Exception"></exception>
|
|||
|
public abstract void AddDelFriendContact(string username, string corp_id, string verify);
|
|||
|
|
|||
|
///// <summary>
|
|||
|
///// 删除好友
|
|||
|
///// </summary>
|
|||
|
///// <param name="username"></param>
|
|||
|
///// <param name="corp_id"></param>
|
|||
|
///// <exception cref="Exception"></exception>
|
|||
|
//public abstract void DeleteFriend(string username, string corp_id);
|
|||
|
|
|||
|
///// <summary>
|
|||
|
///// 接受好友申请
|
|||
|
///// </summary>
|
|||
|
///// <param name="username">用户账号</param>
|
|||
|
///// <param name="corp_id">公司id</param>
|
|||
|
///// <exception cref="Exception"></exception>
|
|||
|
//public abstract Task<bool> AcceptFriend(string username, string corp_id);
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 创建空外部群
|
|||
|
/// </summary>
|
|||
|
/// <param name="usernames"></param>
|
|||
|
/// <exception cref="Exception"></exception>
|
|||
|
public abstract Task<CreateGroupInfo> CreateExternalGroup();
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region 基础信息类
|
|||
|
|
|||
|
///// <summary>
|
|||
|
///// 获取内部好友类表
|
|||
|
///// </summary>
|
|||
|
///// <returns></returns>
|
|||
|
//public abstract Task<Dictionary<string, FriendBase>> GetInnerFirends();
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 获取外部好友列表
|
|||
|
/// </summary>
|
|||
|
/// <returns></returns>
|
|||
|
public abstract Task<Dictionary<string, WorkFriendInfo>> GetExternalFirends();
|
|||
|
|
|||
|
///// <summary>
|
|||
|
///// 获取自己的二维码
|
|||
|
///// </summary>
|
|||
|
///// <returns></returns>
|
|||
|
///// <exception cref="Exception"></exception>
|
|||
|
//public abstract Task<QrImageInfo> GetOwnQrImage();
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 刷新登录二维码
|
|||
|
/// </summary>
|
|||
|
/// <exception cref="Exception"></exception>
|
|||
|
public abstract void FlushLoginQrImage();
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 解散群
|
|||
|
/// </summary>
|
|||
|
/// <param name="GroupId">群号</param>
|
|||
|
/// <exception cref="Exception"></exception>
|
|||
|
public abstract void DissolveGroup(string GroupId);
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Cdn下载
|
|||
|
/// </summary>
|
|||
|
/// <param name="url">回复中的cdn地址</param>
|
|||
|
/// <param name="auth_key">回复中的auth_key</param>
|
|||
|
/// <param name="aes_key">回复中的aes_key</param>
|
|||
|
/// <param name="size">回复中的size</param>
|
|||
|
/// <param name="save_path">保存文件完整路径</param>
|
|||
|
/// <exception cref="Exception"></exception>
|
|||
|
public abstract Task<string> CdnDown(string url, string auth_key, string aes_key, int size,
|
|||
|
FileSuffixType fileSuffixType);
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Cdn下载
|
|||
|
/// </summary>
|
|||
|
/// <param name="url">回复中的cdn地址</param>
|
|||
|
/// <param name="auth_key">回复中的auth_key</param>
|
|||
|
/// <param name="aes_key">回复中的aes_key</param>
|
|||
|
/// <param name="size">回复中的size</param>
|
|||
|
/// <param name="fileName">文件名带后缀</param>
|
|||
|
/// <returns></returns>
|
|||
|
/// <exception cref="Exception"></exception>
|
|||
|
public abstract Task<string> CdnDown(string url, string auth_key, string aes_key, int size, string fileName);
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// C2cCdn下载
|
|||
|
/// </summary>
|
|||
|
/// <param name="aes_key">回复中的aes_key</param>
|
|||
|
/// <param name="file_id">回复中的file_id</param>
|
|||
|
/// <param name="file_size">回复中的file_size</param>
|
|||
|
/// <param name="file_type">回复中的file_type</param>
|
|||
|
/// <param name="save_path">保存文件完整路径</param>
|
|||
|
/// <exception cref="Exception"></exception>
|
|||
|
public abstract Task<string> C2cCdnDown(string aes_key, string file_id, int file_size, QyCdnFileType file_type,
|
|||
|
FileSuffixType fileSuffixType);
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// BigCdn下载
|
|||
|
/// </summary>
|
|||
|
/// <param name="file_path"></param>
|
|||
|
/// <param name="file_type"></param>
|
|||
|
/// <returns></returns>
|
|||
|
/// <exception cref="Exception"></exception>
|
|||
|
public abstract Task<string> BigCdnDown(string file_path, string file_type);
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 获取Cdn通过文件上传
|
|||
|
/// </summary>
|
|||
|
/// <param name="file_path">文件路径</param>
|
|||
|
/// <param name="file_type">文件类型</param>
|
|||
|
/// <returns></returns>
|
|||
|
/// <exception cref="Exception"></exception>
|
|||
|
public abstract Task<FileC2cCdnInfo> GetCdnByUpLoadFile(string file_path, int file_type);
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
public string FindNick(string wxid)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
if (string.IsNullOrWhiteSpace(wxid)) return string.Empty;
|
|||
|
|
|||
|
if (wxid.IsQun())//为群账号,就获取群昵称
|
|||
|
{
|
|||
|
if (!User.WorkGroups.ContainsKey(wxid))
|
|||
|
{
|
|||
|
var ggi = this.GetGroupInfos().Result;//获取群信息
|
|||
|
if (ggi != null && ggi.Count != 0)
|
|||
|
{
|
|||
|
if (ggi.ContainsKey(wxid))
|
|||
|
return (ggi[wxid] as WorkGroupInfo).GroupNick;
|
|||
|
}
|
|||
|
}
|
|||
|
if (User.WorkGroups.ContainsKey(wxid))
|
|||
|
{
|
|||
|
if (string.IsNullOrWhiteSpace(User.WorkGroups[wxid].GroupNick))
|
|||
|
{
|
|||
|
var ggi = this.GetGroupInfos().Result;//获取群信息
|
|||
|
if (ggi != null && ggi.Count != 0)
|
|||
|
{
|
|||
|
if (ggi.ContainsKey(wxid))
|
|||
|
return (ggi[wxid] as WorkGroupInfo).GroupNick;
|
|||
|
}
|
|||
|
}
|
|||
|
return User.WorkGroups[wxid].GroupNick;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (!User.Friends.ContainsKey(wxid))
|
|||
|
{
|
|||
|
var friend = GetFriendInfo(wxid).Result;
|
|||
|
if (friend != null)
|
|||
|
return (friend as WorkFriendInfo).username;
|
|||
|
}
|
|||
|
if (User.WorkFriends.ContainsKey(wxid))
|
|||
|
return User.WorkFriends[wxid].username;
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{ }
|
|||
|
return string.Empty;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 获取群成员昵称
|
|||
|
/// </summary>
|
|||
|
/// <param name="group">群号</param>
|
|||
|
/// <param name="wxid">需要查找的用户账号</param>
|
|||
|
/// <returns></returns>
|
|||
|
public string FindNick(string group, string wxid)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
if (string.IsNullOrWhiteSpace(wxid)) return string.Empty;
|
|||
|
|
|||
|
if (User.WorkFriends.ContainsKey(wxid))//如果好友列表中存在就直接读取
|
|||
|
return User.WorkFriends[wxid].nickname;
|
|||
|
else
|
|||
|
{
|
|||
|
if (string.IsNullOrWhiteSpace(group)) return string.Empty;
|
|||
|
|
|||
|
if (!User.WorkGroups.ContainsKey(group))
|
|||
|
{
|
|||
|
var gInfo = this.GetGroupMemberInfo(group).Result;
|
|||
|
if (gInfo != null)
|
|||
|
return (gInfo as WorkGroupInfo).GroupNick;
|
|||
|
}
|
|||
|
if (User.WorkGroups.ContainsKey(group))
|
|||
|
{
|
|||
|
var friendDic = User.WorkGroups[group].friends;
|
|||
|
if (friendDic != null)
|
|||
|
{
|
|||
|
var ftmp = friendDic.FirstOrDefault(f => f.user_id == wxid);
|
|||
|
if (ftmp != null)
|
|||
|
return ftmp.nickname;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{ }
|
|||
|
return string.Empty;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|