old_flsystem/PCRobot/PCWechat/Wechat_Xiaoxie.cs

3748 lines
234 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using CsharpHttpHelper;
using Newtonsoft.Json;
using PCRobot.Entitys;
using PCRobot.Pack;
using PCRobot.Utils;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Web;
using System.Web.Caching;
using System.Windows.Forms;
namespace PCRobot.PCWechat
{
///// <summary>
///// 参考文档:
///// https://www.showdoc.cc/wxtool
///// https://www.showdoc.cc/WeApiUltimate
///// 密码:784615627.
///// </summary>
public class Wechat_Xiaoxie : BaseApi
{
public delegate void OnEvent(string Name, string Message);
public static OnEvent ClickEvent;
#region
public static void Install()
{
if (IsInstall) return;
#region ,
try
{
if (Version == "3.4.0.38")
{
string Winrarpath = @"Software\Tencent\WeChat";
string key = "FakeDeviceId";
//yes为开,no为关
RegistryHelper.SetRegistryKey("HKEY_CURRENT_USER", Winrarpath, key, "no");
RegistryHelper.GetRegistryValue(Winrarpath, key);
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error("自动登录新建设备信息", $"注册表操作异常:{ex.Message} - {ex.StackTrace}");
}
#endregion
ClickEvent?.Invoke("开始登录", "正在检测已登录微信,请稍等....");
try
{
//Thread.Sleep(5000);
//DllPath = HttpExtend.MapFile($"WeChatHelper_{Version}.dll", "Bin");
m_AcceptCallbackFunc = WxAcceptCallback;
m_RecvCallbackFunc = WxRecvCallback;
m_CloseCallbackFunc = WxCloseCallback;
UseUtf8();
// 初始化Callback
InitWeChatSocket(m_AcceptCallbackFunc, m_RecvCallbackFunc, m_CloseCallbackFunc);
DllPath = HttpExtend.MapFile($"WeChatHelper_{Version}.dll", "Bin");
KillPc(true);
}
catch (Exception)
{
}
finally
{
IsInstall = true;
ClickEvent?.Invoke("登录完成", "");
}
}
private static string DllPath;
/// <summary>
/// 微信WeChatWin.dll基址
/// </summary>
//private static IntPtr BaseAddress;
public delegate void AcceptCallbackFunc(uint dwClientId);
public delegate void RecvCallbackFunc(uint dwClientId, IntPtr intPtr, uint dwSize);
public delegate void CloseCallbackFunc(uint dwClientId);
private static AcceptCallbackFunc m_AcceptCallbackFunc;
private static RecvCallbackFunc m_RecvCallbackFunc;
private static CloseCallbackFunc m_CloseCallbackFunc;
// 引入DLL导出函数
[DllImport("Bin\\WeChatServer.dll")]
public static extern bool InitWeChatSocket(AcceptCallbackFunc acceptCallback,
RecvCallbackFunc recvCallback, CloseCallbackFunc closeCallback);
[DllImport("Bin\\WeChatServer.dll")]
public static extern uint InjectWeChat(byte[] strDllPath);
//[DllImport("Bin\\WeChatServer.dll")]
//public static extern bool SetLoginWxid(byte[] szWxid);
//BOOL __stdcall UseUtf8();
[DllImport("Bin\\WeChatServer.dll")]
public static extern bool UseUtf8();
[DllImport("Bin\\WeChatServer.dll")]
public static extern bool GetUserWeChatVersion(StringBuilder v);
[DllImport("Bin\\WeChatServer.dll")]
public static extern uint InjectWeChat2(byte[] dllPath, byte[] wechatPath);
[DllImport("Bin\\WeChatServer.dll")]
public static extern uint InjectWeChatMultiOpen(byte[] dllPath, byte[] wechatPath);
[DllImport("Bin\\WeChatServer.dll", EntryPoint = "SendWeChatData")]
public static extern bool _SendWeChatData(uint dwClienId, byte[] strJsonData);
public bool SendWeChatData(uint dwClienId, string strJsonData)
{
try
{
if (WechatClient.IsDebug)
LogHelper.GetSingleObj().Debug("调试发送", $"{dwClienId} -> {strJsonData}");
if (User != null && !string.IsNullOrEmpty(User.Wxid))
{
var json = HttpExtend.JsonToDictionary(strJsonData);
var type = json["type"].ToString();
MsgType msgType;
if (!Enum.TryParse(type, out msgType)) return false;
switch (msgType)
{
//截取发送消息 - 为是否是辅助输入提供判断
case MsgType.MT_SEND_TEXTMSG:
case MsgType.MT_SEND_CHATROOM_ATMSG:
case MsgType.MT_SEND_CARDMSG:
case MsgType.MT_SEND_XMLMSG:
case MsgType.MT_SEND_IMGMSG:
case MsgType.MT_SEND_FILEMSG:
case MsgType.MT_SEND_VIDEOMSG:
case MsgType.MT_SEND_GIFMSG:
{
json = json["data"] as Dictionary<string, object>;
string to_wxid = json["to_wxid"].ToString();
string message = string.Empty;
if (json.ContainsKey("content")) message = json["content"].ToString();
else if (json.ContainsKey("card_wxid")) message = json["card_wxid"].ToString();
else if (json.ContainsKey("xml")) message = json["xml"].ToString();
else if (json.ContainsKey("file")) message = json["file"].ToString();
if (!string.IsNullOrEmpty(message))
Common.SetCache(User.Wxid, to_wxid, message);
}
break;
}
}
return _SendWeChatData(dwClienId, Encoding.UTF8.GetBytes(strJsonData));
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, $"{ex.Message} - {ex.StackTrace}");
}
return false;
}
//[DllImport("Bin\\WeChatServer.dll")]
[DllImport("Bin\\WeChatServer.dll")]
public static extern bool DestroyWeChat();
[DllImport("Bin\\WeChatServer.dll")]
public static extern uint InjectWeChatPid(int dwPid, byte[] dllPath);
/// <summary>
/// 卸载安装
/// </summary>
public static void UnInstall()
{
try
{
DestroyWeChat();
LogHelper.GetSingleObj().Info(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, "卸载成功");
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
// 注入成功回调
static void WxAcceptCallback(uint dwClientId)
{
LogHelper.GetSingleObj().Info(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, "注入成功:" + dwClientId);
Console.WriteLine("注入成功:" + dwClientId);
}
#region
//private const string Version = "2.9.5.41";
//private const int PcOffSet = 0x1769E00;//2.9.5.41
//private const string PcMd5 = "194F44DF80553326711A4F576FE7166E";//2.9.5.41
//private const string Version = "3.3.0.93";
//private const int PcOffSet = 0x1DAEB90;//3.3.0.93
//private const string PcMd5 = "5EE8A5B9D4EE63BE1813632D8A7B2E77";//3.3.0.93
private const string Version = "3.4.0.38";
private const int PcOffSet = 0x1DEE968;//3.4.0.38
private const string PcMd5 = "AB0916C9949178A786192B188892AE2C";//3.4.0.38
#endregion
public override string GetVersion()
{
return Version;
}
/// <summary>
/// 杀死注入 pc
/// </summary>
/// <param name="isInject"></param>
private static void KillPc(bool isInject = false)
{
Process[] MyProcesses = Process.GetProcesses();
var path1 = HttpExtend.MapPath("PCWechat");
var path2 = HttpExtend.MapPath("PCWechat\\" + Version);
//var path3 = HttpExtend.MapPath("PCWechat\\" + "3.3.0.93");//退出上个版本的微信
foreach (Process MyProcess in MyProcesses)
{
try
{
var name = MyProcess.ProcessName.ToUpper();
if (name == "WECHAT" && MyProcess.MainModule.FileName.StartsWith(path1))
{
try
{
#region 退
//if (MyProcess.MainModule.FileName.StartsWith(path3))
//{
// try
// {
// LogHelper.GetSingleObj().Info("主动Q", "版本不对杀死进程:" + MyProcess.Id);
// MyProcess.Kill();
// }
// catch (Exception)
// { }
//}
#endregion
//判断微信版本
if (MyProcess.MainModule.FileName.StartsWith(path2))
{
var id = MyProcess.Id;
if (isInject)
{
var result = Task<bool>.Factory.StartNew(delegate
{
try
{
var WechatWinFile = HttpExtend.MapFile("WeChatWin.dll", $"PCWechat\\" + Version);
var md5 = Common.GetMD5Hash(WechatWinFile);
if (!File.Exists(WechatWinFile) || md5 != PcMd5.ToUpper())
{
return false;
}
else
{
LogHelper.GetSingleObj().Info("系统", $"开始注入进程:{id}...");
uint uin = InjectWeChatPid(id, Encoding.UTF8.GetBytes(DllPath));
LogHelper.GetSingleObj().Info("系统", $"注入成功:{id},句柄ID:{uin}");
return true;
}
}
catch (Exception)
{
}
return false;
}).Wait(30000);
if (!result)
{
try
{
LogHelper.GetSingleObj().Info("系统c", "杀死进程:" + MyProcess.Id);
MyProcess.Kill();
}
catch (Exception)
{ }
}
}
else
{
try
{
LogHelper.GetSingleObj().Info("主动d", "杀死进程:" + MyProcess.Id);
MyProcess.Kill();
}
catch (Exception)
{ }
}
Thread.Sleep(10);
}
}
catch (Exception)
{ }
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
}
public static uint StartWechat(string wxid, bool isError = false)
{
var path = string.Empty;
var WechatWinFile = HttpExtend.MapFile("WeChatWin.dll", $"PCWechat\\" + Version);
var md5 = Common.GetMD5Hash(WechatWinFile);
if (!File.Exists(WechatWinFile) || md5.ToUpper() != PcMd5.ToUpper())
{
if (isError) throw new Exception("易转发客户端微信版本不支持,请登录易转发端手动处理");
var rst = MessageBox.Show("您的微信版本暂时不支持,立即重新安装吗?", "版本不兼容", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (rst == DialogResult.Yes)
{
var f = new WechatUpdate(Version);
f.ShowDialog();
if (!f.IsOk) return 0;
}
else return 0;
}
path = HttpExtend.MapFile("WeChat.exe", $"PCWechat\\" + Version);
//WechatLoginHelper.BeginLogin(wxid);
//var ss = SetLoginWxid(Encoding.UTF8.GetBytes(""));
//返回dwClientId
var pid = InjectWeChat2(Encoding.UTF8.GetBytes(DllPath), Encoding.UTF8.GetBytes(path));
//WechatLoginHelper.ClickLogin((int)pid);
return pid;
//return InjectWeChatMultiOpen(Encoding.UTF8.GetBytes(DllPath), Encoding.UTF8.GetBytes(path));
}
/// <summary>
/// 远程登录微信
/// </summary>
public static List<RemoteLoginCode> RemoteLoginCodes = new List<RemoteLoginCode>();
/// <summary>
/// 是否在获取二维码
/// </summary>
private static string RemoteCache = "get_login_code_cache";
private static readonly object Friend_Lock = new object();
/// <summary>
/// pc微信登录二维码
/// </summary>
/// <param name="ServerMsgID"></param>
public static void LoginQrcode(string wxid, string ServerMsgID)
{
try
{
RemoteLoginCode result = null;
try
{
StartWechat(wxid, true);
}
catch (Exception ex)
{
result = new RemoteLoginCode() { pid = -1, rType = RobotType., b64Md5 = ex.Message };
}
if (result == null)
{
result = Task.Factory.StartNew<RemoteLoginCode>(delegate ()
{
var awaitTime = DateTime.Now.AddSeconds(10);
do
{
Thread.Sleep(200);
Cache cache = HttpRuntime.Cache;
object item = cache[RemoteCache];
if (item != null)
{
cache.Remove(RemoteCache);
var r = item as RemoteLoginCode;
return r;
}
} while (awaitTime >= DateTime.Now);
return null;
}).Result;
}
var socketClient = EasySoc.GetSocket();
var msg = new CommonResult();
msg.RobotUsername = string.Empty;
msg.RobotUsernick = string.Empty;
msg.RobotType = RobotType.;
msg.MsgId = ServerMsgID;
msg.Cmd = PCRobotCMD.rcvLoginCode;
msg.Data = result == null ? string.Empty : JsonConvert.SerializeObject(result);
socketClient.Send(msg);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 等待登录结果
/// </summary>
public static Dictionary<string, string> WaitLoginResult = new Dictionary<string, string>();
// 接收消息回调
static void WxRecvCallback(uint dwClient, IntPtr intPtr, uint dwSize)
{
try
{
byte[] body = new byte[dwSize];
Marshal.Copy(intPtr, body, 0, body.Length);
var recvData = Encoding.UTF8.GetString(body).Replace("\0", "").Trim();//再转成UTF8
if (WechatClient.IsDebug) LogHelper.GetSingleObj().Debug("调试收到文本消息", $"{dwClient} -> {recvData}\r\n");
//Console.WriteLine($"{dwClient} -> {recvData}\r\n");
var dwClientid = dwClient;
Task.Factory.StartNew(delegate ()
{
try
{
//Console.WriteLine("收到消息:" + recvData);
var json = HttpExtend.JsonToDictionary(recvData);
var type = json["type"].ToString();
var data = json.ContainsKey("data") ? json["data"] as Dictionary<string, object> : null;
MsgType msgType;
if (!Enum.TryParse(type, out msgType)) return;
if (PCRobotForm.AnalysisTypes != null && PCRobotForm.AnalysisTypes.Count != 0)
{
if (PCRobotForm.AnalysisTypes.FirstOrDefault(f => f == msgType.ToString().ToUpper()) == null)
return;
}
switch (msgType)
{
case MsgType.MT_SEND_XMLMSG:
break;
case MsgType.MT_DECRYPT_IMG_MSG:
break;
case MsgType.MT_DEBUG_LOG:
break;
case MsgType.MT_RECV_QRCODE_MSG:
{
//{"data":{"code":"http://weixin.qq.com/x/A98qrQOk3qB6L_fWPtxF","file":"C:\\Users\\????006\\AppData\\Local\\Temp\\qrcF451.tmp","pid":24088},"type":11087}
if (!data.ContainsKey("file")) return;
var file = data["file"].ToString();
var reg = Regex.Match(file, @"Temp\\(?<文件名>[a-z0-9A-Z]+.tmp)", RegexOptions.IgnoreCase);
if (reg.Success)
{
var codeFile = HttpExtend.MapFile($"{reg.Groups[""].Value}", Path.GetTempPath());
if (File.Exists(codeFile))
{
var pid = int.Parse(data["pid"].ToString());
var codeFilePng = Path.ChangeExtension(codeFile, "png");
try
{
if (File.Exists(codeFilePng))
File.Delete(codeFilePng);
File.Move(codeFile, codeFilePng);
if (File.Exists(codeFilePng))
{
var cfBase64 = Common.ConvertImageToBase64(Image.FromFile(codeFilePng));
var codeInfo = new RemoteLoginCode() { pid = pid, cImgB64 = cfBase64, b64Md5 = HttpHelper.ToMD5(cfBase64), rType = RobotType., t = HttpExtend.GetTimeStamp(DateTime.Now) };
Cache cache = HttpRuntime.Cache;
//查找 md5 的缓存,不存在则返回null
object item = cache[RemoteCache];
cache.Insert(RemoteCache, codeInfo, null, DateTime.Now.AddSeconds(3), Cache.NoSlidingExpiration);
RemoteLoginCodes.Add(codeInfo);
}
}
catch (Exception)
{ }
}
}
}
break;
case MsgType.MT_USER_LOGIN://登陆消息
{
WechatLoginHelper.EndBinginLogin();
var wxid = data["wxid"].ToString();
var user = WechatClient.GetUser(wxid, dwClientid, WechatType.Xiaoxie);
user.Nickname = data["nickname"].ToString();
user.HeaderUrl = data["avatar"].ToString();
user.DBFile = data["wx_user_dir"].ToString();
user.Pid = int.Parse(data["pid"].ToString());
user.Phone = data["phone"].ToString();
user.Uin = GetUin(user.Pid);
WechatClient.OnRefUserEvent(user, WaitLoginResult);
//if (WechatClient.IsDebug)
// LogHelper.GetSingleObj().Debug("调试登录", $"{wxid} - {user}");
}
break;
case MsgType.MT_USER_LOGOUT:
{
var wxid = data["wxid"].ToString();
var user = WechatClient.Users.FirstOrDefault(f => f.Key == wxid).Value;
if (user != null)
{
LogHelper.GetSingleObj().Info("系统", $"LogOut事件退出,Uin:{user.Uin},微信:{user.Nickname}({wxid})");
WechatClient.RemoveUser(user);
}
//if (WechatClient.IsDebug)
// LogHelper.GetSingleObj().Debug("调试注销", $"{wxid} - {user}");
}
break;
case MsgType.MT_SQL_QUERY:
break;
case MsgType.MT_DATA_OWNER_MSG:
break;
case MsgType.MT_DATA_WXID_MSG:
{
//{"data":{"account":"MOKA_1314_","avatar":"http://wx.qlogo.cn/mmhead/ver_1/UKuQPgzLzEY0UPqTgmqpSibLmx1BMibAlwJxOp4t8QksClGJP8tLHxUiaBDAax1Vf0Eiae6wKBIoT3ibAgOYTuuWiaVDiaiayiaaIZF46LcE5aBvTtSQ/132","city":"Chengdu","country":"CN","nickname":"进销存","province":"Sichuan","remark":"","sex":2,"wxid":"wxid_va4xpj22"},"type":11029}
lock (Friend_Lock)
{
var wxid = data["wxid"]?.ToString();
if (Common.IsGzh(wxid, WechatClient.IsGzh)) return;
var f = new FriendInfo();
f.account = data["account"]?.ToString();
f.wxid = wxid;
f.nickname = data["nickname"]?.ToString();
f.remark = data["remark"]?.ToString();
f.avatar = data["avatar"]?.ToString();
f.city = data["city"]?.ToString();
f.country = data["country"]?.ToString();
f.province = data["province"]?.ToString();
f.sex = int.Parse(data["sex"]?.ToString());
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
if (user == null)
return;
var friend = user.Friends.FirstOrDefault(z => z.wxid == f.wxid);
if (friend != null)
if (!user.Friends.TryTake(out friend)) return;
user.Friends.Add(f);
}
}
break;
case MsgType.MT_DATA_FRIENDS_MSG:
{
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
if (user == null)
return;
var client = WechatClient.GetApi(user) as Wechat_Xiaoxie;
if (!user.IsGetFriend) return;
try
{
var _data = json.ContainsKey("data") ? json["data"] as ArrayList : null;
if (_data == null) return;
for (int i = 0; i < _data.Count; i++)
{
var item = _data[i] as Dictionary<string, object>;
var wxid = item["wxid"]?.ToString();
if (Common.IsGzh(wxid, WechatClient.IsGzh)) continue;
var f = new FriendInfo();
f.wxid = wxid;
f.account = item["account"]?.ToString();
f.nickname = item["nickname"]?.ToString();
f.remark = item["remark"]?.ToString();
f.avatar = item["avatar"]?.ToString();
f.sex = int.Parse(item["sex"]?.ToString());
f.city = item["city"]?.ToString();
var friend = user.Friends.FirstOrDefault(z => z.wxid == f.wxid);
if (friend == null)
user.Friends.Add(f);
}
}
catch (Exception ex)
{ }
finally
{
user.IsGetFriend = false;
}
}
break;
case MsgType.MT_DATA_CHATROOMS_MSG:
{
if (data == null)
{
lock (Friend_Lock)
{
//{"data":[{"avatar":"http://wx.qlogo.cn/mmcrhead/iahdQicCC5VBRq5vMm7FxlfPct57WiadZ0NEnMUeicvXyS0fh73Hibw0QkkDMw9RQMETbWENFia9NQlmpibkH0bKsOothztfu8waTFy/0","is_manager":0,"manager_wxid":"wxid_yeh4ssxdjpqv12","member_list":["wxid_yeh4ssxdjpqv12","wujiahua0876","wxid_aiwyq8o6iqja12","wxid_lzssz365bwl222"],"nickname":"成都测试群","total_member":4,"wxid":"24444455370@chatroom"}],"type":11031}
var _data = json.ContainsKey("data") ? json["data"] as ArrayList : null;
if (_data == null) return;
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
if (user == null)
return;
for (int i = 0; i < _data.Count; i++)
{
Thread.Sleep(1000);
//{"avatar":"http://wx.qlogo.cn/mmcrhead/00GYaClAoOpPmXm2NY7u8dZ0mXndbaJvesrlr88KhsUXaPTGvDE8Rt5wpSv9qtHLZJSIHLNBbxEhwFBnbV9FmE6O2fAmlMW1/0","is_manager":0,"manager_wxid":"wzm881101","member_list":["wzmdd2562","wxid_axvwtp4221","huih2861","a30432165487","wangs381015","wxid_vy1kfbt22","wiujihcj056"],"nickname":"吃卤蛋不吐卤蛋壳群","total_member":7,"wxid":"6975286487@chatroom"}
var item = _data[i] as Dictionary<string, object>;
var f = new FriendInfo();
f.avatar = item["avatar"]?.ToString();
f.wxid = item["wxid"]?.ToString();
f.nickname = item["nickname"]?.ToString();
f.remark = item["nickname"]?.ToString();
f.manager_wxid = item["manager_wxid"]?.ToString();
f.is_manager = int.Parse(item["is_manager"]?.ToString());
f.member_list = string.Join(",", (string[])(item["member_list"] as ArrayList).ToArray(typeof(string)));
var group = user.Groups.FirstOrDefault(z => z.wxid == f.wxid);
if (group == null)
{
//群不存在,去获取群成员信息
var _json = HttpHelper.ObjectToJson(new { type = MsgType.MT_DATA_CHATROOM_MEMBERS_MSG, data = new { room_wxid = f.wxid } });
_SendWeChatData(dwClientid, Encoding.UTF8.GetBytes(_json));
group = new GroupInfo() { wxid = f.wxid, nickname = f.nickname, avatar = f.avatar, total_member = f.member_list.Length, friends = new List<FriendInfo>() };
user.Groups.Add(group);
}
else
group.total_member = f.member_list.Length;
var friend = user.Friends.FirstOrDefault(z => z.wxid == f.wxid);
if (friend == null)
user.Friends.Add(f);
}
}
}
}
break;
case MsgType.MT_DATA_CHATROOM_MEMBERS_MSG:
{
lock (Friend_Lock)
{
var group_wxid = data["group_wxid"].ToString();
var total = data["total"].ToString();
var member_list = data["member_list"] as ArrayList;
if (member_list == null) return;
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
if (user == null)
return;
var group = user.Groups.FirstOrDefault(z => z.wxid == group_wxid);
if (group == null)
{
group = new GroupInfo() { wxid = group_wxid, total_member = member_list.Count, friends = new List<FriendInfo>() };
user.Groups.Add(group);
}
else
group.total_member = member_list.Count;
for (int i = 0; i < member_list.Count; i++)
{
//{"account":"","avatar":"http://wx.qlogo.cn/mmhead/ver_1/klibauQfLYtmfniaYAzsV9l6V4cSHmdDhniaTmJ6aGo0z035JTkB5QWrOUbAPnJnP4YXTMuKKmwNBMNv2Fbj5ia9icNicYeXGXbbsRiagGFKryASro/132","city":"","country":"","nickname":"陈建","province":"","remark":"","sex":0,"wxid":"wxid_e1j30jf2k5zdk022"}
var item = member_list[i] as Dictionary<string, object>;
var f = new FriendInfo();
f.account = item["account"]?.ToString();
f.avatar = item["avatar"]?.ToString();
f.city = item["city"]?.ToString();
f.country = item["country"]?.ToString();
f.nickname = item["nickname"]?.ToString();
f.province = item["province"]?.ToString();
f.remark = item["remark"]?.ToString();
f.sex = int.Parse(item["sex"]?.ToString());
f.wxid = item["wxid"]?.ToString();
var friend = group.friends.FirstOrDefault(z => z.wxid == f.wxid);
if (friend == null)
group.friends.Add(f);
}
}
#region xx
//List<List<nmWxidInfo>> nmss = new List<List<nmWxidInfo>>();
//List<nmWxidInfo> mis = new List<nmWxidInfo>();
//var count = 20;
//var rem = member_list.Count % count;
//var num = member_list.Count / count;
//for (int i = 0; i < member_list.Count; i++)
//{
// var item = member_list[i] as Dictionary<string, object>;
// var account = item["account"]?.ToString();
// var avatar = item["avatar"]?.ToString();
// var city = item["city"]?.ToString();
// var country = item["country"]?.ToString();
// var nickname = item["nickname"]?.ToString();
// var province = item["province"]?.ToString();
// var remark = item["remark"]?.ToString();
// var sex = item["sex"]?.ToString();
// var wxid = item["wxid"]?.ToString();
// nmWxidInfo MemberInfo = new nmWxidInfo();
// MemberInfo.Wxid = wxid;
// MemberInfo.WxNo = account;
// MemberInfo.Nick = nickname;
// MemberInfo.Mark = remark;
// MemberInfo.HeadIMG = avatar;
// mis.Add(MemberInfo);
// if (mis.Count >= count)
// {
// nmss.Add(mis);
// mis = new List<nmWxidInfo>();
// }
// else if (nmss.Count == num && mis.Count == rem)
// {
// nmss.Add(mis);
// }
//}
//var socketClient = EasySoc.GetSocket();
//var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
//if (user == null) return;
//foreach (var item in nmss)
//{
// WechatGroupMember msg = new WechatGroupMember();
// msg.RobotUsername = user.Wxid;
// msg.RobotUsernick = user.Nickname;
// msg.RobotType = RobotType.客户端微信;
// msg.Cmd = PCRobotCMD.rcvGroupMember;
// nmGroupInfo group = new nmGroupInfo();
// group.Count = int.Parse(total);
// group.GroupID = group_wxid;
// group.List = item;
// msg.Message = HttpHelper.ObjectToJson(new Dictionary<string, nmGroupInfo>() { { "data", group } });
// socketClient.Send(msg);
// Thread.Sleep(5);
//}
#endregion
}
break;
case MsgType.MT_DATA_PUBLICS_MSG:
{
}
break;
case MsgType.MT_UPDATE_WXID_MSG:
{
}
break;
case MsgType.MT_UPDATE_ROOM_MEMBER_MSG:
{
}
break;
case MsgType.MT_RECV_LINK_MSG:
{
//if (WechatClient.IsDebug)
// LogHelper.GetSingleObj().Debug("调试收到链接", $"{dwClientid} -> {recvData}");
var is_pc = data["is_pc"]?.ToString();
var from_wxid = data["from_wxid"].ToString();
if (Common.IsGzh(from_wxid, WechatClient.IsGzh)) return;
var raw_msg = data["raw_msg"].ToString();
var room_wxid = data["room_wxid"].ToString();
var to_wxid = data["to_wxid"].ToString();
var wx_type = int.Parse(data["wx_type"].ToString());
var wx_sub_type = int.Parse(data["wx_sub_type"].ToString());
if (!WechatClient.IsAuxiliaryInput(from_wxid, to_wxid, raw_msg))
{
Console.WriteLine("此消息被过滤,因为是机器人自己发送的:" + raw_msg);
return;
}
var ass = WechatClient.IsAssistance(from_wxid, to_wxid, dwClientid);
if (ass.type == WechatClient.AssistanceType.) return;
//if (!string.IsNullOrWhiteSpace(raw_msg))
//{
// var reg = Regex.Match(raw_msg, "<url>(?<链接>.*)</url>");
// if (reg.Success)
// {
// raw_msg = reg.Groups["链接"].Value;
// }
//}
var socketClient = EasySoc.GetSocket();
WechatReceiveMsg wmsg = new WechatReceiveMsg();
wmsg.Cmd = PCRobotCMD.rcvTxt;
wmsg.IsSend = ass.type == WechatClient.AssistanceType.;
wmsg.RobotUsername = ass.robotName;
wmsg.RobotUsernick = ass.robotNick;
wmsg.RobotType = RobotType.;
wmsg.FromMessageType = WechatMsgType.;
if (room_wxid.Contains("@chatroom"))
wmsg.FromGroupid = room_wxid;
wmsg.FromUsername = ass.fromName;
wmsg.FromUsernick = ass.fromNick;
wmsg.FromMessage = raw_msg;
socketClient.Send(wmsg);
}
break;
case MsgType.MT_RECV_TEXT_MSG:
{
//if (WechatClient.IsDebug)
// LogHelper.GetSingleObj().Debug("调试收到文本消息", $"{dwClientid} -> {recvData}");
var at_user_list = data["at_user_list"] as ArrayList;
var from_wxid = data["from_wxid"].ToString();
var msg = data["msg"].ToString();
var msg_temp = string.Copy(msg);
#region @
if (at_user_list != null && at_user_list.Count != 0)
{
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
if (user == null)
return;
var client_temp = WechatClient.GetApi(user) as Wechat_Xiaoxie;
foreach (string username in at_user_list)
{
var firent = user.Friends.FirstOrDefault(f => f.wxid == username);
if (firent == null)
{
client_temp.GetWxidInfo(username);
Thread.Sleep(1000);
firent = user.Friends.FirstOrDefault(f => f.wxid == username);
}
if (firent != null)
msg_temp = msg_temp.Replace("@" + firent.nickname + " ", "{$@}");
}
}
#endregion
if (Common.IsGzh(from_wxid, WechatClient.IsGzh)) return;
var room_wxid = data["room_wxid"].ToString();
var to_wxid = data["to_wxid"].ToString();
var wx_type = int.Parse(data["wx_type"].ToString());
var socketClient = EasySoc.GetSocket();
if (!WechatClient.IsAuxiliaryInput(from_wxid, to_wxid, msg_temp))
{
Console.WriteLine("此消息被过滤,因为是机器人自己发送的:" + msg_temp);
return;
}
var ass = WechatClient.IsAssistance(from_wxid, to_wxid, dwClientid);
if (ass.type == WechatClient.AssistanceType.) return;
WechatReceiveMsg wmsg = new WechatReceiveMsg();
wmsg.Cmd = PCRobotCMD.rcvTxt;
wmsg.IsSend = ass.type == WechatClient.AssistanceType.;
wmsg.RobotUsername = ass.robotName;
wmsg.RobotUsernick = ass.robotNick;
wmsg.RobotType = RobotType.;
wmsg.FromMessageType = WechatMsgType.;
if (room_wxid.Contains("@chatroom") || room_wxid.Contains("@im.chatroom"))
{
wmsg.FromGroupid = room_wxid;
wmsg.FromUsername = from_wxid;
wmsg.FromUsernick = from_wxid == ass.robotName ? ass.robotNick : string.Empty;
}
else
{
wmsg.FromUsername = ass.fromName;
wmsg.FromUsernick = ass.fromNick;
}
wmsg.FromMessage = msg;
socketClient.Send(wmsg);
//从网络上下载群成员(刷新)
//var _json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_UPDATE_ROOM_MEMBER_MSG, data = new { room_wxid = "24444455370@chatroom" } });
//_SendWeChatData(dwClientid, Encoding.UTF8.GetBytes(_json));
//获取群成员列表
//var _json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_DATA_CHATROOM_MEMBERS_MSG, data = new { room_wxid = "24444455370@chatroom" } });
//_SendWeChatData(dwClientid, Encoding.UTF8.GetBytes(_json));
}
break;
case MsgType.MT_ZOMBIE_CHECK_MSG:
{
//if (data == null) return;
//if (data.ContainsKey("errcode"))
//{
// var status = int.Parse(data["status"].ToString());
// var wxid = data["wxid"].ToString();
// var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
// var firend = user.Friends.FirstOrDefault(f => f.wxid == wxid);
// if (firend == null) return;
// firend.is_zombie = status;
//}
}
break;
case MsgType.MT_SEND_CARD_XMLMSG:
{
}
break;
case MsgType.MT_RECV_PICTURE_MSG:
case MsgType.MT_RECV_VOICE_MSG:
case MsgType.MT_RECV_FRIEND_MSG:
case MsgType.MT_RECV_CARD_MSG:
case MsgType.MT_RECV_VIDEO_MSG:
case MsgType.MT_RECV_EMOJI_MSG:
case MsgType.MT_RECV_LOCATION_MSG:
case MsgType.MT_RECV_FILE_MSG:
{
var from_wxid = data["from_wxid"].ToString();
if (Common.IsGzh(from_wxid, WechatClient.IsGzh)) return;
var raw_msg = data["raw_msg"].ToString();
var room_wxid = data["room_wxid"].ToString();
var to_wxid = data["to_wxid"].ToString();
var wx_type = int.Parse(data["wx_type"].ToString());
if (!WechatClient.IsAuxiliaryInput(from_wxid, to_wxid, raw_msg))
{
Console.WriteLine("此消息被过滤,因为是机器人自己发送的:" + raw_msg);
return;
}
var socketClient = EasySoc.GetSocket();
if (wx_type == 3 || wx_type == 34 || wx_type == 43 || wx_type == 49)//图片、语音、视频、文件
{
var ass = WechatClient.IsAssistance(from_wxid, to_wxid, dwClientid);
if (ass.type == WechatClient.AssistanceType.) return;
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
if (user == null)
return;
var client = WechatClient.GetApi(user);
WechatReceiveMsg msg = new WechatReceiveMsg();
msg.Cmd = PCRobotCMD.rcvFile;
msg.IsSend = false;
if (wx_type == 3)//图片
{
//var image_thumb = data["image_thumb"].ToString();
var image = data["image"].ToString();
#region
long size = -1L;
var reg = Regex.Match(raw_msg, @"hdlength=\""(\d+?)\""");
if (reg.Success)
size = long.Parse(reg.Groups[1].Value);
else
{
reg = Regex.Match(raw_msg, @"\slength=\""(\d+?)\""");
if (reg.Success)
size = long.Parse(reg.Groups[1].Value);
else
{ }
}
var waitTime = DateTime.Now.AddSeconds(10);
do
{
Thread.Sleep(200);
var size_temp = new FileInfo(image).Length;
if (File.Exists(image) && size == size_temp)
break;
} while (waitTime >= DateTime.Now);
#endregion
msg.Cmd = PCRobotCMD.rcvImg;
msg.IsSend = ass.type == WechatClient.AssistanceType.;
var path = Common.CacheFilePath(ass.robotName, ass.fromName, "IMAGE", data["msgid"].ToString(), "jpg");
#region
//int i = 0;
//do
//{
// i++;
// client.DecryptImage(image, path);
// var failureTime = DateTime.Now.AddSeconds(2);
// do
// {
// Thread.Sleep(200);
// if (File.Exists(path)) break;
// } while (failureTime >= DateTime.Now);
// if (File.Exists(path))
// break;
//} while (4 >= i);
DecodeImage(image, byte.Parse(data["xor_key"].ToString()), path);
if (!string.IsNullOrWhiteSpace(path) && File.Exists(path))
{ }
else
path = image;
#endregion
msg.FromMessage = $"[图片={path}]";
msg.FromMessageType = WechatMsgType.;
msg.FileCDNXML = raw_msg;
}
else if (wx_type == 34)//语音
{
//msg.FromMessage = string.Empty;//$"[语音={FilePath}]";//TODO 语音文件
//msg.FromMessageType = WechatMsgType.语音;
return;
}
else if (wx_type == 43)//视频
{
//var video = data["video"].ToString();
//msg.FromMessage = $"[视频={video}]";
//msg.FromMessageType = WechatMsgType.视频;
return;
}
else if (wx_type == 49)//文件
{
//msg.FromMessage = string.Empty;//$"[文件={FilePath}]";//TODO 文件
//msg.FromMessageType = WechatMsgType.文件;
return;
}
msg.IsSend = false;
msg.RobotUsername = ass.robotName;
msg.RobotUsernick = ass.robotNick;
msg.RobotType = RobotType.;
if (room_wxid.Contains("@chatroom"))
msg.FromGroupid = room_wxid;
msg.FromUsername = from_wxid;
//msg.FromUsernick = string.Empty;//TODO 昵称没有获取
socketClient.Send(msg);
}
else if (wx_type == 37)//接收到好友申请请求
{
WechatApplyFriend wXApply = new WechatApplyFriend();
wXApply.Cmd = PCRobotCMD.applyFriend;
wXApply.RobotUsername = to_wxid;
wXApply.RobotUsernick = WechatClient.GetUser(to_wxid)?.Nickname;
wXApply.RobotType = RobotType.;
var reg = Regex.Match(raw_msg, @"content=""(?<申请文本>[^""]*?)""");
if (reg.Success)
wXApply.Message = reg.Groups["申请文本"].Value;
reg = Regex.Match(raw_msg, @"sourceusername=""(?<账号>[^""]*?)"" sourcenickname=""(?<昵称>[^""]*?)""");
if (reg.Success)
{
wXApply.OldFriendWxid = reg.Groups["账号"].Value;
wXApply.OldFriendNick = reg.Groups["昵称"].Value;
}
reg = Regex.Match(raw_msg, @"fromusername=""(?<账号>[^""]*?)""");
if (reg.Success)
{
if (!string.IsNullOrWhiteSpace(reg.Groups["账号"].Value))
wXApply.NewFriendWxid = reg.Groups["账号"].Value;
else
{
reg = Regex.Match(raw_msg, @"alias=""(?<账号>[^""]*?)""");
if (reg.Success)
wXApply.NewFriendWxid = reg.Groups["账号"].Value;
}
}
reg = Regex.Match(raw_msg, @"fromnickname=""(?<昵称>[^""]*?)""");
if (reg.Success)
wXApply.NewFriendNick = reg.Groups["昵称"].Value;
wXApply.Token = raw_msg;//TODO 这里好像要获取raw_msg 中 v1的值
socketClient.Send(wXApply);
}
//名片
else if (wx_type == 42) { }
//接收表情
else if (wx_type == 47) { }
//接收位置消息
else if (wx_type == 48) { }
}
break;
case MsgType.MT_RECV_WCPAY_MSG:
{
var from_wxid = data["from_wxid"].ToString();
if (Common.IsGzh(from_wxid, WechatClient.IsGzh)) return;
var raw_msg = data["raw_msg"].ToString();
var to_wxid = data["to_wxid"].ToString();
var wx_type = data["wx_type"].ToString();
var wx_sub_type = data["wx_sub_type"].ToString();
var socketClient = EasySoc.GetSocket();
if (raw_msg.IndexOf("微信转账") != -1 && raw_msg.IndexOf("收到转账") != -1)
{
string State = Common.StringMid(raw_msg, "<paysubtype>", "</paysubtype>");
string Transid = Common.StringMid(raw_msg, "transferid><![CDATA[", "]]></transferid>");
int dwTime = 0;
int.TryParse(Common.StringMid(raw_msg, "<invalidtime><![CDATA[", "]]></invalidtime>"), out dwTime);
if (State == "1" && Transid != string.Empty)
{
WechatReicevePay reicevePay = new WechatReicevePay();
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
if (user == null)
return;
reicevePay.RobotUsername = user.Wxid;
reicevePay.RobotUsernick = user.Nickname;
reicevePay.RobotType = RobotType.;
reicevePay.FromUsername = from_wxid;
reicevePay.FromUsernick = string.Empty;//TODO 没有获取昵称
reicevePay.Cmd = PCRobotCMD.receivePay;
reicevePay.Invalidtime = dwTime.ToString();
reicevePay.Transferid = Transid;
var reg = Regex.Match(raw_msg, "收到转账(?<金额>.+)元");
if (reg.Success)
reicevePay.Money = double.Parse(reg.Groups["金额"].Value);
if (reicevePay.RobotUsernick == null) reicevePay.RobotUsernick = string.Empty;
socketClient.Send(reicevePay);
return;
}
}
}
break;
case MsgType.MT_RECV_SYSTEM_MSG:
{
//{"data":{"from_wxid":"wxid_lzssz365bwl222","is_pc":0,"msgid":"9071106463111673540","raw_msg":"\"先森吳\"邀请\"查优惠小助手(语馨)\"加入了群聊","room_wxid":"24444455370@chatroom","timestamp":1585398781,"to_wxid":"24444455370@chatroom","wx_type":10000},"type":11058}
if (data != null && data.ContainsKey("raw_msg"))
{
var socketClient = EasySoc.GetSocket();
var raw_msg = data["raw_msg"].ToString();
var room_wxid = data["room_wxid"].ToString();
var from_wxid = data["from_wxid"].ToString();
//新人入群
if (!string.IsNullOrWhiteSpace(room_wxid) && room_wxid.Contains("@chatroom"))
{
//var reg1 = Regex.Match(raw_msg, @"""(?<邀请人昵称>.*)""邀请""(?<新人昵称>.*)""加入了群聊");
//var reg2 = Regex.Match(raw_msg, @"你邀请""(?<新人昵称>.*)""加入了群聊");
//var reg3 = Regex.Match(raw_msg, @"""(?<新人昵称>.*)""通过扫描""(?<邀请人昵称>.*)""分享的二维码加入群聊");
//var reg4 = Regex.Match(raw_msg, @"""(?<新人昵称>.*)""通过扫描你分享的二维码加入群聊");
//if (reg1.Success || reg2.Success || reg3.Success || reg4.Success)
//{
// var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
// if (user == null)
// return;
// WechatNewMemer newMember = new WechatNewMemer();
// newMember.Cmd = PCRobotCMD.newMember;
// newMember.RobotType = RobotType.客户端微信;
// newMember.RobotUsername = user.Wxid;
// newMember.RobotUsernick = user.Nickname;
// if (reg1.Success)
// {
// newMember.SourceNick = reg1.Groups["邀请人昵称"].Value;
// newMember.MemberNick = reg1.Groups["新人昵称"].Value;
// }
// else if (reg2.Success)
// {
// newMember.SourceNick = newMember.RobotUsernick;
// newMember.MemberNick = reg2.Groups["新人昵称"].Value;
// }
// else if (reg3.Success)
// {
// newMember.SourceNick = reg3.Groups["邀请人昵称"].Value;
// newMember.MemberNick = reg3.Groups["新人昵称"].Value;
// }
// else if (reg4.Success)
// {
// newMember.SourceNick = newMember.RobotUsernick;
// newMember.MemberNick = reg4.Groups["新人昵称"].Value;
// }
// if (room_wxid.Contains("@chatroom"))
// {
// newMember.GroupId = room_wxid;
// newMember.GroupNick = string.Empty;
// }
// socketClient.Send(newMember);
//}
}
else//新增好友
{
//#region 添加好友成功
//var reg1 = Regex.Match(raw_msg, "^你已添加了(.*?),现在可以开始聊天了。$");
//var reg2 = Regex.Match(raw_msg, "^(.*?)刚刚把你添加到通讯录,现在可以开始聊天了。$");
//if (reg1.Success || reg2.Success)
//{
// var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
// if (user == null)
// return;
// WechatNewFriend msg = new WechatNewFriend();
// msg.Cmd = PCRobotCMD.newfriend;
// msg.RobotUsername = user.Wxid;
// msg.RobotUsernick = user.Nickname;
// msg.RobotType = RobotType.客户端微信;
// msg.FromUserName = from_wxid;
// msg.FromUserNick = reg1.Success ? reg1.Groups[1].Value : reg2.Groups[1].Value;
// socketClient.Send(msg);
//}
//#endregion
#region
//{"data":{"from_wxid":"wujiahua0876","is_pc":0,"msgid":"3624674612069828076","raw_msg":"先森吳开启了朋友验证,你还不是他(她)朋友。请先发送朋友验证请求,对方验证通过后,才能聊天。<a href=\"weixin://findfriend/verifycontact\">发送朋友验证</a>","room_wxid":"","timestamp":1585125257,"to_wxid":"wxid_lzssz365bwl222","wx_type":10000},"type":11058}
//{"data":{"from_wxid":"wxid_89qxkbyaxrok22","is_pc":0,"msgid":"7401397021380323657","raw_msg":"消息已发出,但被对方拒收了。","room_wxid":"","timestamp":1603436524,"to_wxid":"wujiahua0876","wx_type":10000},"type":11058}
if (raw_msg.Contains("开启了朋友验证") || raw_msg.Contains("但被对方拒收了"))//这里说明是僵尸粉
{
LogHelper.GetSingleObj().Debug("调试清粉", $"{JsonConvert.SerializeObject(data)}");
var wxid = data["from_wxid"].ToString();
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
var firend = user.Friends.FirstOrDefault(f => f.wxid == wxid);
if (firend == null) return;
if (raw_msg.Contains("但被对方拒收了"))
firend.is_zombie = 2;//拉黑了
else
firend.is_zombie = 1;//单向好友
//var socketClient = EasySoc.GetSocket();
WechatContact msg = new WechatContact();
msg.RobotUsername = user.Wxid;
msg.RobotUsernick = user.Nickname;
msg.RobotType = RobotType.;
msg.Cmd = PCRobotCMD.rcvContactList;
msg.Message = HttpHelper.ObjectToJson(new Dictionary<string, List<FriendInfo>>() { { "data", new List<FriendInfo>() { firend } } });
socketClient.Send(msg);
}
//{"data":{"from_wxid":"wxid_2ufntuf4purl22","is_pc":0,"msgid":"1580248074267233434","raw_msg":"由于名片类型或场景原因,暂不支持转发该名片。","room_wxid":"","timestamp":1585125880,"to_wxid":"wxid_lzssz365bwl222","wx_type":10000},"type":11058}
else if (raw_msg.Contains("暂不支持转发该名片"))//这里说明是好友
{
LogHelper.GetSingleObj().Debug("调试清粉_", $"{JsonConvert.SerializeObject(data)}");
var wxid = data["from_wxid"].ToString();
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
var firend = user.Friends.FirstOrDefault(f => f.wxid == wxid);
if (firend == null) return;
firend.is_zombie = 0;
}
else
{
}
#endregion
}
}
}
break;
case MsgType.MT_RECV_REVOKE_MSG:
{
//私聊用户撤回消息
//{"data":{"from_wxid":"wujiahua0876","is_pc":0,"msgid":"3768878978337666344","raw_msg":"<sysmsg type=\"revokemsg\">\n\t<revokemsg>\n\t\t<session>wujiahua0876</session>\n\t\t<msgid>1097101643</msgid>\n\t\t<newmsgid>5572791720720581005</newmsgid>\n\t\t<replacemsg><![CDATA[\"用户备注的昵称\" 撤回了一条消息]]></replacemsg>\n\t</revokemsg>\n</sysmsg>\n","room_wxid":"","timestamp":1586758499,"to_wxid":"wxid_lzssz365bwl222","wx_type":10002},"type":11059}
//私聊用户机器人自己撤回消息
//{"data":{"from_wxid":"wxid_lzssz365bwl222","is_pc":0,"msgid":"1526645333654331593","raw_msg":"<sysmsg type=\"revokemsg\"><revokemsg><session>wujiahua0876</session><msgid>1716323650</msgid><newmsgid>5998900618590839539</newmsgid><replacemsg><![CDATA[你撤回了一条消息]]></replacemsg></revokemsg></sysmsg>","room_wxid":"","timestamp":1586758971,"to_wxid":"wujiahua0876","wx_type":10002},"type":11059}
var from_wxid = string.Empty;
if (data.ContainsKey("from_wxid"))
from_wxid = data["from_wxid"]?.ToString();
var raw_msg = string.Empty;
if (data.ContainsKey("raw_msg"))
{
raw_msg = data["raw_msg"]?.ToString();
}
var to_wxid = string.Empty;
if (data.ContainsKey("to_wxid"))
to_wxid = data["to_wxid"]?.ToString();
}
break;
case MsgType.MT_RECV_OTHER_MSG:
break;
case MsgType.MT_RECV_OTHER_APP_MSG:
case MsgType.MT_RECV_MINIAPP_MSG:
{
//if (WechatClient.IsDebug)
// LogHelper.GetSingleObj().Debug("调试收到小程序消息", $"{dwClientid} -> {recvData}");
if (data == null) return;
var wx_type = data["wx_type"]?.ToString();//微信原始类型,值为 49
if (wx_type == "49")
{
var wx_sub_type = data["wx_sub_type"]?.ToString();//微信原始应用子类型,值为 36
if (wx_sub_type == "1" || wx_sub_type == "36" || wx_sub_type == "33" || wx_sub_type == "3" || wx_sub_type == "19")
{
var from_wxid = data["from_wxid"]?.ToString();//发送者的wxid
if (Common.IsGzh(from_wxid, WechatClient.IsGzh)) return;
var is_pc = data["is_pc"]?.ToString();
var raw_msg = data["raw_msg"]?.ToString();
var msgid = data["msgid"]?.ToString();// 接收到的消息id
var room_wxid = data["room_wxid"]?.ToString();//群聊的wxid
var to_wxid = data["to_wxid"]?.ToString();//接收者的wxid
var socketClient = EasySoc.GetSocket();
if (!WechatClient.IsAuxiliaryInput(from_wxid, to_wxid, raw_msg))
{
Console.WriteLine("此消息被过滤,因为是机器人自己发送的:" + raw_msg);
return;
}
var ass = WechatClient.IsAssistance(from_wxid, to_wxid, dwClientid);
if (ass.type == WechatClient.AssistanceType.) return;
//if (!string.IsNullOrWhiteSpace(raw_msg))
//{
// var reg = Regex.Match(raw_msg, @"<publisherId>(?<链接>.*)</publisherId>");
// if (reg.Success)
// raw_msg = reg.Groups["链接"].Value;
//}
WechatReceiveMsg wmsg = new WechatReceiveMsg();
wmsg.Cmd = PCRobotCMD.rcvTxt;
wmsg.IsSend = ass.type == WechatClient.AssistanceType.;
wmsg.RobotUsername = ass.robotName;
wmsg.RobotUsernick = ass.robotNick;
wmsg.RobotType = RobotType.;
wmsg.FromMessageType = WechatMsgType.;
if (room_wxid.Contains("@chatroom"))
{
wmsg.FromGroupid = room_wxid;
wmsg.FromUsername = from_wxid;
wmsg.FromUsernick = from_wxid == ass.robotName ? ass.robotNick : string.Empty;
}
else
{
wmsg.FromUsername = ass.fromName;
wmsg.FromUsernick = ass.fromNick;
}
wmsg.FromMessage = raw_msg;
socketClient.Send(wmsg);
}
}
}
break;
case MsgType.MT_CHECK_URL_STATUS_MSG:
{
//if (CheckUrlCache.Count > 500) CheckUrlCache.Clear();
//{"data":{"status":-2005,"url":"https://ycs9d.kuaizhan.com/?id=07E4060844959"},"type":11123}
if (data["status"] != null)
{
var url = data["url"]?.ToString();
if (!string.IsNullOrWhiteSpace(url))
{
//CheckUrlCache.Add(url.Trim(), int.Parse(data["status"].ToString()));
Cache cache = HttpRuntime.Cache;
//查找 md5 的缓存,不存在则返回null
object item = cache[url.Trim()];
cache.Insert(url.Trim(), int.Parse(data["status"].ToString()), null, DateTime.Now.AddSeconds(8), Cache.NoSlidingExpiration);
}
}
}
break;
//case MsgType.MT_CHECK_URL_STATUS2_MSG:
// {
// if (data.ContainsKey("baseResponse"))
// {
// var baseResponse = data["baseResponse"] as Dictionary<string, object>;
// if (baseResponse.ContainsKey("ret"))
// {
// var ret = baseResponse["ret"].ToString();
// Cache cache = HttpRuntime.Cache;
// //查找 md5 的缓存,不存在则返回null
// object item = cache[url.Trim()];
// cache.Insert(url.Trim(), int.Parse(ret), null, DateTime.Now.AddSeconds(8), Cache.NoSlidingExpiration);
// }
// }
// }
// break;
case MsgType.MT_ROOM_ADD_MEMBER_NOTIFY_MSG://群成员新增通知
{
//{"data":{"avatar":"","is_manager":1,"manager_wxid":"wxid_tnizkijej5uq22","member_list":[{"avatar":"http://wx.qlogo.cn/mmhead/ver_1/MpicosfFj1KMvlSPoxWHjUfT2KGqJvEKrDkDCUiaQp4ryYkv3NMdsYofXUVvgalGx0ylia2swn2MMNWwiaWWEUl4QvQayM2Y28pAaxShUZUH5ms/132","invite_by":"wujiahua0876","nickname":"A083赚钱鸭💯葫芦娃","wxid":"wxid_5fn1vpyjpfj022"}],"nickname":"111111","room_wxid":"24466267291@chatroom","total_member":5},"type":11098}
if (data == null) return;
var socketClient = EasySoc.GetSocket();
var avatar = data["avatar"].ToString();//头像
var is_manager = data["is_manager"].ToString();//
var manager_wxid = data["manager_wxid"].ToString();//管理账号
var room_nick = data["nickname"].ToString();//群昵称
var room_wxid = data["room_wxid"].ToString();//群账号
var total_member = int.Parse(data["total_member"].ToString());//群人数
var member_list = data["member_list"] as ArrayList;
if (member_list != null && member_list.Count != 0)
{
var member = member_list[0] as Dictionary<string, object>;
var avatar_user = member["avatar"].ToString();//头像
var invite_by = member["invite_by"].ToString();//邀请者wxid
var nickname = member["nickname"].ToString();//新用户昵称
var wxid = member["wxid"].ToString();//新用户账号
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
if (user == null)
return;
WechatNewMemer newMember = new WechatNewMemer();
newMember.Cmd = PCRobotCMD.newMember;
newMember.RobotType = RobotType.;
newMember.RobotUsername = user.Wxid;
newMember.RobotUsernick = user.Nickname;
//if (reg1.Success)
//{
// newMember.SourceNick = reg1.Groups["邀请人昵称"].Value;
// newMember.MemberNick = reg1.Groups["新人昵称"].Value;
//}
//else if (reg2.Success)
//{
// newMember.SourceNick = newMember.RobotUsernick;
// newMember.MemberNick = reg2.Groups["新人昵称"].Value;
//}
//else if (reg3.Success)
//{
// newMember.SourceNick = reg3.Groups["邀请人昵称"].Value;
// newMember.MemberNick = reg3.Groups["新人昵称"].Value;
//}
//else if (reg4.Success)
//{
// newMember.SourceNick = newMember.RobotUsernick;
// newMember.MemberNick = reg4.Groups["新人昵称"].Value;
//}
newMember.SourceNick = string.Empty;
newMember.SourceName = (string.IsNullOrWhiteSpace(invite_by) || invite_by == user.Wxid) ? string.Empty : invite_by;
newMember.MemberNick = nickname;
newMember.MemberName = wxid;
newMember.GroupId = room_wxid;
newMember.GroupNick = room_nick;
newMember.TotalMember = total_member;
socketClient.Send(newMember);
}
}
break;
case MsgType.MT_ROOM_DEL_MEMBER_NOTIFY_MSG://群成员删除/退出通知
{
}
break;
case MsgType.MT_ROOM_CREATE_NOTIFY_MSG://通过接口创建群聊的通知
{
//{"data":{"avatar":"http://wx.qlogo.cn/mmcrhead/MvMkWKHbPUVricNicF781PXeuPMW2vHEywf6lkuMfLgHN4IlRAyPiaDX8AG9d9XEa1ibiaMXBr83ibDVmgCT70qkHXPN9SFn5iaHC7y/0","is_manager":1,"manager_wxid":"wxid_tnizkijej5uq22","member_list":[{"avatar":"http://wx.qlogo.cn/mmhead/ver_1/CVGILsl6SCMBjjCuyxUOZXNRgeiaPx4EwT1WMqCDz9qp3XcuzuVm3SHuPuial3wOMVUSbbJujBtUqPkB3Uz1ruTVzibqZ74FTnBKibNCq67qBcE/132","invite_by":"wxid_tnizkijej5uq22","nickname":"小张晚安","wxid":"wxid_uwbxwbt4ihjd22"},{"avatar":"http://wx.qlogo.cn/mmhead/ver_1/cstPo5zCEb794wfD44BbnoQicfDOeOzkB3BficFYticVmQy7umm4SArThiaia6f6ZJFriaewskJ3foyuxrEVYic7NicwXQ/132","invite_by":"wxid_tnizkijej5uq22","nickname":"先森吳","wxid":"wujiahua0876"},{"avatar":"http://wx.qlogo.cn/mmhead/ver_1/tbfVwxp5B5WkAx7KxDCTia8kzWgMIj3bqA1QaoHxXvQTwS5aRw6h9WjTQMWBhD6fkt4XjUxURDDGF5aBek8xSnY4kqPIQ9T4oweMyaKLSwnM/132","invite_by":"","nickname":"Coco","wxid":"wxid_tnizkijej5uq22"}],"nickname":"","room_wxid":"24652183014@chatroom","total_member":3},"type":11100}
if (data == null) return;
var wxids = new List<string>();
var member_list = data["member_list"] as ArrayList;
for (int i = 0; i < member_list.Count; i++)
{
//{"avatar":"http://wx.qlogo.cn/mmhead/ver_1/CVGILsl6SCMBjjCuyxUOZXNRgeiaPx4EwT1WMqCDz9qp3XcuzuVm3SHuPuial3wOMVUSbbJujBtUqPkB3Uz1ruTVzibqZ74FTnBKibNCq67qBcE/132","invite_by":"wxid_tnizkijej5uq22","nickname":"小安","wxid":"wxid_uwbxwbt4ihjd22"}
var m = member_list[i] as Dictionary<string, object>;
if (m == null) continue;
wxids.Add(m["wxid"]?.ToString());
}
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
if (user == null)
return;
var client = WechatClient.GetApi(user);
wxids.Sort(StringComparer.CurrentCulture);
var md5Text = Common.GetMD5(string.Join(",", wxids));
Cache cache = HttpRuntime.Cache;
//查找 md5 的缓存,不存在则返回null
object item = cache[md5Text];
cache.Insert(md5Text, data["room_wxid"].ToString(), null, DateTime.Now.AddSeconds(8), Cache.NoSlidingExpiration);
}
break;
case MsgType.MT_ROOM_DEL_NOTIFY_MSG://群成员删除通知
{
}
break;
case MsgType.MT_CONTACT_ADD_NOITFY_MSG://好友新增通知
{
//{"data":{"account":"dx21101","avatar":"http://wx.qlogo.cn/mmhead/ver_1/we0fG4Y8r0NjN7GUSHFXCu0qicqZf2KKHBeRKIByBNAvvJ8KcgeaomwSju0AqUicJztS6oiaEzDVJiblnZmrJQTibDdPyk7fwzwPbS5JxwibS6POI/0","city":"","country":"","nickname":"秒单客-小张","remark":"","sex":1,"wxid":"wxid_g9r17s6hdb6w22"},"type":11102}
var socketClient = EasySoc.GetSocket();
//var account = data["account"].ToString();//新用户账号
//var avatar = data["avatar"].ToString();//新用户头像
var nickname = data["nickname"].ToString();//新用户昵称
//var sex = int.Parse(data["sex"].ToString());//性别
var wxid = data["wxid"].ToString();//新用户微信id
#region
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
if (user == null)
return;
var msg = new WechatNewFriend();
msg.Cmd = PCRobotCMD.newfriend;
msg.RobotUsername = user.Wxid;
msg.RobotUsernick = user.Nickname;
msg.RobotType = RobotType.;
msg.FromUserName = wxid;
msg.FromUserNick = nickname;
socketClient.Send(msg);
#endregion
}
break;
case MsgType.MT_CONTACT_DEL_NOTIFY_MSG://群成员删除通知
{
}
break;
case MsgType.MT_SNS_TIMELINE_MSG://获取朋友圈首页
{
#region
//{"data":{"advertiseCount":1,"advertiseList":[{"adInfo":{"string":"<?xml version='1.0' encoding='utf-8' ?>\n<ADInfo>\n\t<viewid>51Hky7pHhu%2BI0D6z6NGPpR15cypIpKvA%2B/WmCm0cjdoElUITIAFetWDTQN4vCIoS6ghxwuN0AHfz/Dd5uv0MOe0BAnqUde7RfcpcLvnU4pKwzvPOf09bD57/YLjKvDkkbHks%2BFQ8yTrjpqCQtrqKXVDJrR%2B/6t2%2BIcLfsbPDz%2B6jDc8gjbkn6ADHUW7tOArlAowZ3aNCjtfk5fBHzow8vwBuatiNIeQQySyetV69UB2exOBcR42IFoB%2BgD0ygOTBlYMnaiQtzS0upkBl4NSPHN9xen3lITxROz3Bj6ZRkqrlzrEJjj%2B%2BX0NTbO/ZduF8Fnsq47hKzFn3RzMmrMiMmRT%2BiJpTD3Tz/rwtYsS3tGTCmbneafTW0o%2B9uinX5C2QK45tKlFSDlAlYqEtepY51N2mrvp5aK8wd1A1dotcSJdRCv%2Bibez/B8KZud5p9NbSvb9U/x10HSpgNsWnqqfBc6UOyLTOR6sULIq3RYG3hO4ttiHsTqJ19OXmIJ18uKdRAwm0W%2B1UgpgsirdFgbeE7i22IexOonX0eoikpovBL67pm9Ry5rKfmdqujuKJIrqR7yAiM9QkVyqfLisGkW2BGdifn1WRZE2eZtz1TIwtr5RIz4fr%2BzWthJ%2B8b4mUiIvRnrvbxY2kLOMTQyaDsIwWCrVVcQmRZEtem7CV9y12Npy2t0P5SYgr9G%2B5LOMNBx0okUHnjJOesdHfVxBOI3ioGMEqURMdxzGKUPEh9cdQZT13OIB60lApJboBtPiusgt2pGeKIWX2go19ctm1ASL/nffmXkqCH/XmhdQh01bx83nD%2BNuVWBsGt7Z9yUJAhgfU2HILNweMjSHCmbneafTW0pglqgouP3YMJyDHsaOablYrOJ7sA5PLjhGJilyjGpsHWO0hq0fn1/6LGFYxykl1OjPcIHGFfpCHLlbaL5ZjZUhhz/C8BOcXNC6vq3hZ1wVbOWBOpKjp0CGTuQXg3A4f0G8kXEJdvrlDsxGnYDSTXSrxeCw34BZX0wRD99w7JmukOIQEjoOL%2BMDlCU9gndnYr00zc1cEpTNCjhbE8KAYJBZdF2AjSLljq1308TAxRKbRrFcgG%2BJiF686OhCWD1v6PpvXQtcAwKCuVWFqytU8Snl/XGkfveCEdkXHGR%2B5wQVpN8L6zzMEG%2BrGdae643cmQb9QbyClCgocIhr5xdxaJXPYn59VkWRNnrbPaWePalQctVk7VbyIJUOzQwHaGlZwKOw/ReHEmsuRdunnXbmrEQRK31EdpPUtw%2BrkaExxbpeSMYgHQ4BoIWvqWUJyOKxwPFyEo3Cvbyx3zs8YEIDR6RYMyvLMeZ593lX52lJXIuf7ZRO6kWIOBbYENyusw81Q0PWttkAUANcUYTIqQmpJ%2Bl18qm66d0POojRw0yPqMI/iLYxfYPjGjxhb1M2zfU9m6L39x5/vp8yN12xfT20Zd3eyVauOFxOb9E3aTDebYH0%2BxbxNh/vbG4SZj9HCaNr0679ITrLZHYXBMDckEiDLDwR8Kw37v7qSMMW8TYf72xuEmY/Rwmja9Ou/SE6y2R2FwX8i5x5zY5Tl5uNpEpeEFoAqMk%2BZ6vqgE02GIVVhiy4hc5/GHP79qRrm42kSl4QWgCoyT5nq%2BqATdoRifFt8u0d30DLV9rACLenS8pBrppyFKjJPmer6oBPjILouBe1NDxY74ukW5A91YGOCIYWrgLdFGxIyh6vP7RAgb9YYpXW87wJPd786IpFTQpa3wkYMP8KZud5p9NbSAzTjUvENRy8XeTjKE1qKCzYwKm%2BvgnNWRTCLfefMjKvCmbneafTW0gM041LxDUcvxxDLN%2BQh1dSf3TphpbYWRLoHQm6WpwmDgyX2IiPt3jiN3ZxN%2BdG6zHs8QtlMdETD2u/GbqAmsR47GXT6%2Bd9vzfByhJ%2BosnjffLJWXJQXjVhUDTGN5mqOpQk1YhZbSJ7Gl3YPDnKBt%2BrT/HSDJ%2Bl2Rgf0drS1gCA4TsUAXLNhv0/py7JV78weUyrsXfLMLC3iynBrDlriy8KB/M/vFXqo7T6zykyz/ykKHC9fpUczj0/%2BiYQb3B2u4h%2B9QlK5J0kaYbM9DtGs1EUIRKIqCLzwHz3wEe%2BlG/jvSp462KvE8TSFOCswenppPI1a65q11Y%2BlO8ydxJ0yKldx4NgHf19YAWnJZAl%2BTTbsgLcaCUPrWS5lz1ndLvPYPcbyJmoyss54YkoMCaTa42hTuW08DkxX84NfS0ImGwrDzyMDV8pAyc7VLiJ3BxfADIWMj9C3nfYHWkD5oDTvOHbrCS0oVJZ1y61s4g4lI3FyoWh1%2Bszkttr3tqOGmeY5mCk2pNpt19zSXB4%2B2Et6MfY5rX9USLkHs0PPXGYe6wXuyT4Luymi/Txdbmkt1cP7P6F2o6H5ahvnzLtULV02HVfYj7vBsaMStTPgp8Bsmt1Dyphn5nqGAASmhUDfXW24V7WKihAkyAHELyMNe%2BsOg6bsTHBBKNGKPGzR5p2LY9gYFVY5/qmRA5d8MkAWlZENvXpAfbBdhejCJLU4lQBGZ0eDGmGOZuaA%2BQ6RMJncv%2BR%2BTAP9TvkNsP5x7Yko/BM2IAtCWoMdFGbhobUaNtVkkvCOc%2BwkwlIOXrrn2yrxTx37JNMsN7RFYiEZJNViWH7dXQlLiz9MOANT8H5t5HmgKEctOb1WDmztxkdBkLAejjMY20ZfUiVjwKSEkrrfw03HXk/sbeLtUsrb7nfeb7wpBi2sU7b8X6/dzpHX9DXDm2i1pOR5s/Ng0yeD/6qROyXiFZLD66XRp7//JznTqFw2TWYDkazuFWAyB7ElWqOVd/DOs%2BCAoORBxxiRhbApMiOYRyTumUb%2B%2B6Zl4qOepsczZ29vS6uVWWJ0p0rEOI2RhVZ7btZ%2Ba3lZVRIf/hRMwBoyRlWyRWLyfEmArfOGNYSa4BdrmxeeV0tdIpmLBesqH%2BfzlDeIDk7mYMk0FEAe2cpwAcbBhbqspuYIxkrOTmw00bthKfiRChNDe%2BQee7ugp8pqvuhoz7xLRUD1lTtlqG/NViTumUb%2B%2B6Zl2S6T12VBePmOOxGKAf3beJ%2BnBqYMHgKRlN2Tkq4GQ/YgJNrT9CcDRl8GQ1XD0o6U3YyDCdZIJrEUeI/uSzP6ju5XimNM1qfeiTty4z6jWFh99u%2BfIUuDvxOIp4XGKpLpJ07p9SXuh1Zy%2Bo/31T9J1fWVO2Wob81W5KyA3Dyc2bO1jtlhgW9eAI47EYoB/dt4FQiAo2J5oyUX0qTwlZ90N6Lln5bTToih/GwuFeIuyfUpNqTabdfc0rQ0s06SldO6V93k1aTZhOJHm3uL1CBBMvhQgjxSWRtrp3DKjyMPfVpYPVWi5Ngj3Y5aIpCQuZXtqruCuUkaNnhqKrfImYGgGKmrjkQD2h3urPY6VezxI9OHcs%2BXYnYPN4PKT1x7h8SO2qEn264xwBl1V6YUdN1FXoZsAsPrnFzWcz5uqxEiT0sch%2BHvj9RxWk0HOHHe5NbmAMHuVM8G7t4hl1NT6tf4sD/1uHZDwAxdwJtX0l2GsaAX7It4cWddtlJ5lscfXYNcmftrlkis981E5N9H4zW918IEMg6uvzSz4T8Zay2P9sMQsCF%2Ba3w6VCY0ZuwxbJqN1QaGDzVOAqmJCgwXZe3RYp2/gyNcSjjkQtBUKhqP42BdVQgg%2BXSnthkM2BlKHdHbibjVedFgMtLy4jXQ0jD%2BwHpBztRpAg5ko9PX7d2z/pJt8YzG3w6JRH3V0XrfkwE0SMU46R%2BTSPmgMgjWPkNxa/m2uLgcrsVBMP%2BUoqGYb3MkzDDj01vctVPDoYnTPiyDmvPETC4UzEm8QE4WG1lCfhu527VjTlnq5vxoaY1zSczQop6cs4IaeerPjfv89hzROCUFTWY7AHyfUqeJVK%2BiPZ0ftd7A5I84adtGjRGgLam9vDrIGEgOytifn1WRZE2e7RfKdpxHe8YH986M%2BW1VEiSf6o6x3ZW13hrLgQASU4k2M2CmUcOsa56My716C8yACOene86zrRIbOKlmWY/LpTTFFDj2FS/wRUBIA92e/K3PY4bY3rnNirArVpfolQpqUdeELefv5t1ECPZk5I8tozTqrC6wrFRARf3dlHL0WpRZQzOkMnGblx51W2kSUpSu2/Hd91eDSEOBXvE/kanskVWtaO29jtIzaXdOdbo2JtGAJYzJ7QD93xQpz87qAUQXCBXuJQSB/bEiwpxez/q1U6KDkxquq0XUF9zkWsYKUjFogJilTpoYvjDtoQVtApmBOA2f7el/VIHnxuCNmQlqQFxZQwbWI4tu5EfUvvFSANAk4jag8a4HYuF8%2B8esOKs2PSsBnhQzc%2BY22OtuD3yCNeLZ5n1B5za16svARkdgiGtPGEKwhyvAcMPUfhiL7RxZprDKae8MX1PVHECjLItG2MDR7ZczhqZvA9CHH0GAbafIYSkOszxrBPPpNff7dYiB/j%2BMzZCgR4yfQ7CoDU3lRIFM7BEAf4od%2B3kzeNkAy7ZaAGZftgda2Ih%2BPdTIb6Hv5zgI2didIUjziKQ0Glppdv14mXUNSx8Osti8pEcBeFN3//o3aeh8wYx6bDo/zqIDhFnZE/QS%2BoLSkKdNBK1wPJao/BgEj8GEjOIqWUvm8R5dhNriF5xeYZcXmxbjnwREWQWbbbrLMFFLc7NK/Ol0iNdgpgmBjesJ%2BsrXt0d88f9txZDbMh0kQhWdc/B2bqPntbxWBM3n63FNQKwW6Ch81DpIHjAOJ9YxiEO6FohEbrgLoWfT/TU1eJfHWjklbn6GnbsY4E7mMRoJV7VKXV/GuPP7un5EV%2BwrNpNp0v%2BSybnvKAAEqdQL5cZuKVZMfIOOtopdZisTxabiDXUYViRIoVzvUrdfVGeQVdKAmHLZYjaWnzKUIgF8oyIi091o1BkDsWY8sbUptYLfqFIQR4BMl3xYuum%2BKt3/56SzrDXXPYI7Gb%2BAbdrUFEVeL/LdryKoWtq7jM1hSu5MhS5SOEuoFMbt5EuW5vdTKNlfgWJWsvkZsZNg2uPG%2Bt2HCI3m2MTqvavmupGW%2BmkwK7pwPy56I/8unXh6QMpuq9ifhaOLpfBQK/BLOuTqjqKOZ8yeTW/pJR30DlpUK8Pb1t0/oVUCHbFxhM2uqKlaHAGgTp817xa1p9a9sWAD9g==</viewid>\n\t<ad_sns_pos>4</ad_sns_pos>\n\t<noExposureExpireTime>720</noExposureExpireTime>\n\t<exposureNoActionExpireTime>720</exposureNoActionExpireTime>\n\t<uxInfo>3547325421|wx0tld43lkkrodqq|3547325421|1|1626955012|0|2|6041365717172948||AgIylt4GK8nVeUcuI+4pKmMsArrIRywgjntIrbYMoUfG0o+2+yULEOc9S+J+Wk6PLDoh6IKmSjk=|3400866612|21</uxInfo>\n\t<adDupSnsIdDel>1</adDupSnsIdDel>\n\t<adActionLink>https://as.weixin.qq.com/cgi-bin/redirect?tid=3400866612&amp;token=e8d51e642ec1fa8166c546c1f303cf95&amp;wx_aid=3547325421&amp;wx_traceid=wx0tld43lkkrodqq00&amp;wx_uid=19681428</adActionLink>\n\t<adActionType>4</adActionType>\n\t<adActionExt>\n\t\t<adChainStrengthen>\n\t\t\t<WordingType>0</WordingType>\n\t\t\t<Wording>最近有719人购买</Wording>\n\t\t\t<WordingRepIOS>最近有719人购买</WordingRepIOS>\n\t\t\t<WordingRepAndroid>最近有719人购买</WordingRepAndroid>\n\t\t</adChainStrengthen>\n\t\t<adChainType>1</adChainType>\n\t\t<adChainTypeExpireTime>1800</adChainTypeExpireTime>\n\t\t<adActionExtWeApp>\n\t\t\t<appUserName>gh_85ea230f6b61@app</appUserName>\n\t\t\t<relativePagePath>/pages/shop/index.html?storeId=2393731723</relativePagePath>\n\t\t\t<appVersion/>\n\t\t\t<miniProgramType>1</miniProgramType>\n\t\t</adActionExtWeApp>\n\t</adActionExt>\n\t<session_data>\n\t\t<trace_id>wx0tld43lkkrodqq</trace_id>\n\t\t<aid>3547325421</aid>\n\t</session_data>\n</ADInfo>\n\n"},"snsAdObject":{"adXml":{"string":"<adxml><newFeedback>1</newFeedback><nickname>AlphaDog阿尔法机器狗</nickname><adUid>19681428</adUid><headClickType>0</headClickType><videoPlayInStreamingMode>1</videoPlayInStreamingMode><adContentStyle>1</adContentStyle><adCardInfo><title>平价阿尔法机器狗来喽</title><description>时代的风景AI相伴</description><adCardButton><btnTitle>立即购买</btnTitle><clickActionType>4</clickActionType><weappUserName>gh_85ea230f6b61@app</weappUserName><weappPath>/pages/shop/index.html?storeId=2393731723</weappPath><miniProgramType>1</miniProgramType></adCardButton><adRatingCardInfo><tagList><tag>新品推荐</tag><tag>限量抢购</tag><tag>IP联名活动</tag></tagList></adRatingCardInfo></adCardInfo><adActionLinkHidden>1</adActionLinkHidden><adActionLinkName/><adActionLink>https://as.weixin.qq.com/cgi-bin/redirect?tid=3400866612&amp;token=e8d51e642ec1fa8166c546c1f303cf95</adActionLink><webviewRightBarShow>1</webviewRightBarShow><attachShareLinkIsHidden>0</attachShareLinkIsHidden><expandOutsideTitle><zh>广告</zh><tw>廣告</tw><en>Ad</en></expandOutsideTitle><expandInsideTitle><zh>赞助商提供的广告信息</zh><tw>贊助商提供的廣告信息</tw><en>Sponsored story</en></expandInsideTitle><adArgs><arg><key>classify_zh_CN</key><value>zh_CN</value></arg><arg><key>classify_zh_TW</key><value>zh_TW</value></arg><arg><key>classify_en</key><value>en_US</value></arg><arg><key>nickname_zh_CN</key><value>nickname_zh_CN</value></arg><arg><key>nickname_zh_TW</key><value>nickname_zh_TW</value></arg><arg><key>nickname_en</key><value>nickname_en</value></arg></adArgs><feedbackInfo><feedbackList><item><url>https://mp.weixin.qq.com/promotion/res/htmledition/mobile/html/feedback.html</url><Wording><zh>投诉</zh><tw>投訴</tw><en>Report</en></Wording></item></feedbackList></feedbackInfo><compatible><clientVersion><androidMin>654315520</androidMin><iosMin>385879808</iosMin></clientVersion><jumpUrl>https://wxa.wxs.qq.com/canvas-luodiye/h5/wxupdate.html</jumpUrl></compatible></adxml>"},"snsObject":{"blackListCount":0,"commentCount":0,"commentUserListCount":0,"createTime":1621049336,"deleteFlag":0,"extFlag":1,"groupCount":0,"groupUserCount":0,"id":13598347436105209699,"isNotRichText":1,"likeCount":0,"likeFlag":0,"likeUserListCount":0,"nickname":"","noChange":0,"objectDesc":{"buffer":"PFRpbWVsaW5lT2JqZWN0PjxpZD4xMzU5ODM0NzQzNjEwNTIwOTY5OTwvaWQ+PGNyZWF0ZVRpbWU+MTYyMTA0OTMzNjwvY3JlYXRlVGltZT48dXNlcm5hbWU+Z2hfMWNmYmQ1NjAzNzliPC91c2VybmFtZT48Y29udGVudERlc2M+5pe25Luj55qE6aOO5pmv77yMQUnnm7jkvLQ8L2NvbnRlbnREZXNjPjxjb250ZW50RGVzY1Nob3dUeXBlPjA8L2NvbnRlbnREZXNjU2hvd1R5cGU+PGNvbnRlbnREZXNjU2NlbmU+MzwvY29udGVudERlc2NTY2VuZT48cHJpdmF0ZT4wPC9wcml2YXRlPjxDb250ZW50T2JqZWN0Pjx0aXRsZT48L3RpdGxlPjxkZXNjcmlwdGlvbj48L2Rlc2NyaXB0aW9uPjxjb250ZW50VXJsPjwvY29udGVudFVybD48Y29udGVudFN0eWxlPjE8L2NvbnRlbnRTdHlsZT48bWVkaWFMaXN0PjxtZWRpYT48aWQ+MTM1OTkwODQ4MTQ2ODQ0NjA5NDA8L2lkPjxwcml2YXRlPjA8L3ByaXZhdGU+PHR5cGU+MjwvdHlwZT48c3ViVHlwZT4wPC9zdWJUeXBlPjx0aXRsZT48L3RpdGxlPjxkZXNjcmlwdGlvbj48L2Rlc2NyaXB0aW9uPjx1c2VyRGF0YT48L3VzZXJEYXRhPjxsb3dCYW5kVXJsIHR5cGU9IjEiPjwvbG93QmFuZFVybD48dXJsIHR5cGU9IjEiPmh0dHA6Ly93eHNuc2R5dGh1bWIud3hzLnFxLmNvbS8xNDEvMjAyMDQvc25zY29zZG93bmxvYWQvU0gvcmVzZXJ2ZWQvNjA5ZjNlOTQwMDBjOTk1ZDAwMDAwMDAwOWEyMDlkMDkwMDAwMDA4ZDAwMDA0ZWVjP209NzA3YzBiMmVjNDY1OTNiZDQ3NjJlZjRkYWY0MmE4OGYmYW1wO2NrPTcwN2MwYjJlYzQ2NTkzYmQ0NzYyZWY0ZGFmNDJhODhmPC91cmw+PHRodW1iIHR5cGU9IjEiPmh0dHA6Ly93eHNuc2R5dGh1bWIud3hzLnFxLmNvbS8xNDEvMjAyMDQvc25zY29zZG93bmxvYWQvU0gvcmVzZXJ2ZWQvNjA5ZjNlOTQwMDBjOTk1ZDAwMDAwMDAwOWEyMDlkMDkwMDAwMDA4ZDAwMDA0ZWVjP209NzA3YzBiMmVjNDY1OTNiZDQ3NjJlZjRkYWY0MmE4OGYmYW1wO2NrPTcwN2MwYjJlYzQ2NTkzYmQ0NzYyZWY0ZGFmNDJhODhmPC90aHVtYj48c2l6ZSBoZWlnaHQ9IjQ1MCIgd2lkdGg9IjgwMCIgdG90YWxTaXplPSI2NTEzMCI+PC9zaXplPjwvbWVkaWE+PC9tZWRpYUxpc3Q+PGNvbnRlbnRTdWJTdHlsZT44PC9jb250ZW50U3ViU3R5bGU+PC9Db250ZW50T2JqZWN0PjwvVGltZWxpbmVPYmplY3Q+","iLen":1152},"objectOperations":{"buffer":"CAI=","iLen":2},"preDownloadInfo":{"noPreDownloadRange":"","preDownloadNetType":0,"preDownloadPercent":0},"referId":0,"referUsername":"","snsRedEnvelops":{"reportId":0,"reportKey":0,"resourceId":0,"rewardCount":0},"username":"gh_1cfbd560379b","weAppInfo":{"appId":0,"mapPoiId":"","redirectUrl":"","score":0,"showType":0,"userName":""},"withUserCount":0,"withUserListCount":0}}}],"baseResponse":{"ret":0},"controlFlag":2,"delAdvertiseCount":0,"firstPageMd5":"6935ad04c4ed4552","max_id":"13647311131165143274","newRequestTime":1626954952,"objectCount":10,"objectCountForSameMd5":10,"objectList":[{"blackListCount":0,"commentCount":0,"commentUserListCount":0,"createTime":1626886264,"deleteFlag":0,"extFlag":1,"groupCount":0,"groupUserCount":0,"id":13647311131165143274,"isNotRichText":1,"likeCount":0,"likeFlag":0,"likeUserListCount":0,"nickname":"为美好的世界献上祝福","noChange":0,"objectDesc":{"buffer":"PFRpbWVsaW5lT2JqZWN0PjxpZD48IVtDREFUQVsxMzY0NzMxMTEzMTE2NTE0MzI3NF1dPjwvaWQ+PHVzZXJuYW1lPjwhW0NEQVRBW3d4aWRfbWp6ZWg0cWo5aGlvMjJdXT48L3VzZXJuYW1lPjxjcmVhdGVUaW1lPjwhW0NEQVRBWzE2MjY4ODYyNjRdXT48L2NyZWF0ZVRpbWU+PGNvbnRlbnREZXNjU2hvd1R5cGU+MDwvY29udGVudERlc2NTaG93VHlwZT48Y29udGVudERlc2NTY2VuZT4wPC9jb250ZW50RGVzY1NjZW5lPjxwcml2YXRlPjwhW0NEQVRBWzBdXT48L3ByaXZhdGU+PGFwcEluZm8+PGlkPjwhW0NEQVRBW3d4YWI5YjcxYWQyYjkwZmYzNF1dPjwvaWQ+PHZlcnNpb24+MjY8L3ZlcnNpb24+PGFwcE5hbWU+PCFbQ0RBVEFb5b6u5L+h6K+75LmmXV0+PC9hcHBOYW1lPjxpbnN0YWxsVXJsPjwvaW5zdGFsbFVybD48ZnJvbVVybD48L2Zyb21Vcmw+PGNsaWNrYWJsZT4wPC9jbGlja2FibGU+PC9hcHBJbmZvPjxjb250ZW50RGVzYz48L2NvbnRlbnREZXNjPjxjb250ZW50YXR0cj48IVtDREFUQVswXV0+PC9jb250ZW50YXR0cj48c291cmNlVXNlck5hbWU+PC9zb3VyY2VVc2VyTmFtZT48c291cmNlTmlja05hbWU+PC9zb3VyY2VOaWNrTmFtZT48c3RhdGlzdGljc0RhdGE+PC9zdGF0aXN0aWNzRGF0YT48d2VhcHBJbmZvPjxhcHBVc2VyTmFtZT48L2FwcFVzZXJOYW1lPjxwYWdlUGF0aD48L3BhZ2VQYXRoPjx2ZXJzaW9uPjwhW0NEQVRBWzBdXT48L3ZlcnNpb24+PGRlYnVnTW9kZT48IVtDREFUQVswXV0+PC9kZWJ1Z01vZGU+PHNoYXJlQWN0aW9uSWQ+PC9zaGFyZUFjdGlvbklkPjxpc0dhbWU+PCFbQ0RBVEFbMF1dPjwvaXNHYW1lPjxtZXNzYWdlRXh0cmFEYXRhPjwvbWVzc2FnZUV4dHJhRGF0YT48c3ViVHlwZT48IVtDREFUQVswXV0+PC9zdWJUeXBlPjxwcmVsb2FkUmVzb3VyY2VzPjwvcHJlbG9hZFJlc291cmNlcz48L3dlYXBwSW5mbz48Y2FudmFzSW5mb1htbD48L2NhbnZhc0luZm9YbWw+PENvbnRlbnRPYmplY3Q+PGNvbnRlbnRTdHlsZT48IVtDREFUQVsxXV0+PC9jb250ZW50U3R5bGU+PGNvbnRlbnRTdWJTdHlsZT48IVtDREFUQVswXV0+PC9jb250ZW50U3ViU3R5bGU+PHRpdGxlPjwvdGl0bGU+PGRlc2NyaXB0aW9uPjwvZGVzY3JpcHRpb24+PGNvbnRlbnRVcmw+PC9jb250ZW50VXJsPjxtZWRpYUxpc3Q+PG1lZGlhPjxpZD48IVtDREFUQVsxMzY0NzMxMTEzMTczNDA2MTI3N11dPjwvaWQ+PHR5cGU+PCFbQ0RBVEFbMl1dPjwvdHlwZT48dGl0bGU+PC90aXRsZT48ZGVzY3JpcHRpb24+PC9kZXNjcmlwdGlvbj48cHJpdmF0ZT48IVtDREFUQVswXV0+PC9wcml2YXRlPjx1cmwgdHlwZT0iMSIgbWQ1PSJmMjhmNTgyNjE4NmU2ZTZmMWY4NTVjYzAxMjU4MDIzYiI+PCFbQ0RBVEFbaHR0cDovL3N6bW1zbnMucXBpYy5jbi9tbXNucy9hRnJXNFBWVjRwS1NuU3ExcURRVWMxWExOTUNpY2pnaWNhbTdwTlVoN1AyanUxZFJheDdIaWJROHV2YlRvdDRYeHk0UVhmR1RMSFZvbFEvMF1dPjwvdXJsPjx0aHVtYiB0eXBlPSIxIj48IVtDREFUQVtodHRwOi8vc3ptbXNucy5xcGljLmNuL21tc25zL2FGclc0UFZWNHBLU25TcTFxRFFVYzFYTE5NQ2ljamdpY2FtN3BOVWg3UDJqdTFkUmF4N0hpYlE4dXZiVG90NFh4eTRRWGZHVExIVm9sUS8xNTBdXT48L3RodW1iPjx2aWRlb0R1cmF0aW9uPjwhW0NEQVRBWzAuMF1dPjwvdmlkZW9EdXJhdGlvbj48c2l6ZSB0b3RhbFNpemU9IjY1Mjg5LjAiIHdpZHRoPSIxMDgwLjAiIGhlaWdodD0iMTY0OC4wIj48L3NpemU+PC9tZWRpYT48L21lZGlhTGlzdD48L0NvbnRlbnRPYmplY3Q+PGFjdGlvbkluZm8+PGFwcE1zZz48bWVkaWFUYWdOYW1lPjwvbWVkaWFUYWdOYW1lPjxtZXNzYWdlRXh0PjwvbWVzc2FnZUV4dD48bWVzc2FnZUFjdGlvbj48L21lc3NhZ2VBY3Rpb24+PGFwcGlkPnd4YWI5YjcxYWQyYjkwZmYzNDwvYXBwaWQ+PC9hcHBNc2c+PHNjZW5lPjA8L3NjZW5lPjx0eXBlPjA8L3R5cGU+PHVybD48L3VybD48bmV3V29yZGluZ0tleT48L25ld1dvcmRpbmdLZXk+PG5ld3R5cGU+MDwvbmV3dHlwZT48aW5zdGFsbGVkV29yZGluZz48L2luc3RhbGxlZFdvcmRpbmc+PHVuaW5zdGFsbGVkV29yZGluZz48L3VuaW5zdGFsbGVkV29yZGluZz48L2FjdGlvbkluZm8+PHN0YXRFeHRTdHI+PCFbQ0RBVEFbR2hRS0VuZDRZV0k1WWpjeFlXUXlZamt3Wm1Zek5BPT1dXT48L3N0YXRFeHRTdHI+PGxvY2F0aW9uIHBvaUNsYXNzaWZ5SWQ9IiIgcG9pTmFtZT0iIiBwb2lBZGRyZXNzPSIiIHBvaUNsYXNzaWZ5VHlwZT0iMCIgY2l0eT0iIj48L2xvY2F0aW9uPjxwdWJsaWNVc2VyTmFtZT48L3B1YmxpY1VzZXJOYW1lPjxzdHJlYW12aWRlbz48c3RyZWFtdmlkZW91cmw+PC9zdHJlYW12aWRlb3VybD48c3RyZWFtdmlkZW90aHVtYnVybD48L3N0cmVhbXZpZGVvdGh1bWJ1cmw+PHN0cmVhbXZpZGVvd2VidXJsPjwvc3RyZWFtdmlkZW93ZWJ1cmw+PC9zdHJlYW12aWRlbz48L1RpbWVsaW5lT2JqZWN0Pg==","iLen":2449},"objectOperations":{"buffer":"CAA=","iLen":2},"preDownloadInfo":{"noPreDownloadRange":"","preDownloadNetType":0,"preDownloadPercent":0},"referId":0,"referUsername":"","snsRedEnvelops":{"reportId":0,"reportKey":0,"resourceId":0,"rewardCount":0},"username":"wxid_mjzeh4qj9hio22","weAppInfo":{"appId":0,"mapPoiId":"","redirectUrl":"","score":0,"showType":0,"userName":""},"withUserCount":0,"withUserListCount":0},{"blackListCount":0,"commentCount":0,"commentUserListCount":0,"createTime":1626788321,"deleteFlag":0,"extFlag":1,"groupCount":0,"groupUserCount":0,"id":13646489531181052217,"isNotRichText":1,"likeCount":0,"likeFlag":0,"likeUserListCount":0,"nickname":"小张晚安","noChange":0,"objectDesc":{"buffer":"PFRpbWVsaW5lT2JqZWN0PjxpZD48IVtDREFUQVsxMzY0NjQ4OTUzMTE4MTA1MjIxN11dPjwvaWQ+PHVzZXJuYW1lPjwhW0NEQVRBW3d4aWRfdXdieHdidDRpaGpkMjJdXT48L3VzZXJuYW1lPjxjcmVhdGVUaW1lPjwhW0NEQVRBWzE2MjY3ODgzMjFdXT48L2NyZWF0ZVRpbWU+PGNvbnRlbnREZXNjU2hvd1R5cGU+MDwvY29udGVudERlc2NTaG93VHlwZT48Y29udGVudERlc2NTY2VuZT4wPC9jb250ZW50RGVzY1NjZW5lPjxwcml2YXRlPjwhW0NEQVRBWzBdXT48L3ByaXZhdGU+PGNvbnRlbnREZXNjPjwhW0NEQVRBW+WPr+S4jeaYr+WYm++8jOWPiOeqgeeEtuS6huS4gOS4i+S4i1vml7rmn7RdW+aXuuaftF1dXT48L2NvbnRlbnREZXNjPjxjb250ZW50YXR0cj48IVtDREFUQVswXV0+PC9jb250ZW50YXR0cj48c291cmNlVXNlck5hbWU+PC9zb3VyY2VVc2VyTmFtZT48c291cmNlTmlja05hbWU+PC9zb3VyY2VOaWNrTmFtZT48c3RhdGlzdGljc0RhdGE+PC9zdGF0aXN0aWNzRGF0YT48d2VhcHBJbmZvPjxhcHBVc2VyTmFtZT48L2FwcFVzZXJOYW1lPjxwYWdlUGF0aD48L3BhZ2VQYXRoPjx2ZXJzaW9uPjwhW0NEQVRBWzBdXT48L3ZlcnNpb24+PGRlYnVnTW9kZT48IVtDREFUQVswXV0+PC9kZWJ1Z01vZGU+PHNoYXJlQWN0aW9uSWQ+PC9zaGFyZUFjdGlvbklkPjxpc0dhbWU+PCFbQ0RBVEFbMF1dPjwvaXNHYW1lPjxtZXNzYWdlRXh0cmFEYXRhPjwvbWVzc2FnZUV4dHJhRGF0YT48c3ViVHlwZT48IVtDREFUQVswXV0+PC9zdWJUeXBlPjxwcmVsb2FkUmVzb3VyY2VzPjwvcHJlbG9hZFJlc291cmNlcz48L3dlYXBwSW5mbz48Y2FudmFzSW5mb1htbD48L2NhbnZhc0luZm9YbWw+PENvbnRlbnRPYmplY3Q+PGNvbnRlbnRTdHlsZT48IVtDREFUQVsxXV0+PC9jb250ZW50U3R5bGU+PGNvbnRlbnRTdWJTdHlsZT48IVtDREFUQVswXV0+PC9jb250ZW50U3ViU3R5bGU+PHRpdGxlPjwvdGl0bGU+PGRlc2NyaXB0aW9uPjwvZGVzY3JpcHRpb24+PGNvbnRlbnRVcmw+PC9jb250ZW50VXJsPjxtZWRpYUxpc3Q+PG1lZGlhPjxpZD48IVtDREFUQVsxMzY0NjQ4OTUzMTgxNjk0ODAyNl1dPjwvaWQ+PHR5cGU+PCFbQ0RBVEFbMl1dPjwvdHlwZT48dGl0bGU+PC90aXRsZT48ZGVzY3JpcHRpb24+PC9kZXNjcmlwdGlvbj48cHJpdmF0ZT48IVtDREFUQVswXV0+PC9wcml2YXRlPjx1cmwgdHlwZT0iMSIgbWQ1PSJkNTBkOWM5M2Q1NTk5NjkzMjQ2ZTBiZTc1NDZlMmM5OSI+PCFbQ0RBVEFbaHR0cDovL3N6bW1zbnMucXBpYy5jbi9tbXNucy9WRWRvamliZXZqUlBDdjlNM0FuSFM4NGI5d21MZDhSRG5yTjhqWlRqNnVYdHF0aWNyWUl2REFMQXBqZ0g0WWZES0JnampUVkh6WDdPVS8wXV0+PC91cmw+PHRodW1iIHR5cGU9IjEiPjwhW0NEQVRBW2h0dHA6Ly9zem1tc25zLnFwaWMuY24vbW1zbnMvVkVkb2ppYmV2alJQQ3Y5TTNBbkhTODRiOXdtTGQ4UkRuck44alpUajZ1WHRxdGljcllJdkRBTEFwamdINFlmREtCZ2pqVFZIelg3T1UvMTUwXV0+PC90aHVtYj48dmlkZW9EdXJhdGlvbj48IVtDREFUQVswLjBdXT48L3ZpZGVvRHVyYXRpb24+PHNpemUgdG90YWxTaXplPSI0NDUzOC4wIiB3aWR0aD0iMTA4MC4wIiBoZWlnaHQ9IjIzNDAuMCI+PC9zaXplPjwvbWVkaWE+PC9tZWRpYUxpc3Q+PC9Db250ZW50T2JqZWN0PjxhY3Rpb25JbmZvPjxhcHBNc2c+PG1lZGlhVGFnTmFtZT48L21lZGlhVGFnTmFtZT48bWVzc2FnZUV4dD48L21lc3NhZ2VFeHQ+PG1lc3NhZ2VBY3Rpb24+PC9tZXNzYWdlQWN0aW9uPjwvYXBwTXNnPjwvYWN0aW9uSW5mbz48YXBwSW5mbz48aWQ+PC9pZD48L2FwcEluZm8+PGxvY2F0aW9uIHBvaUNsYXNzaWZ5SWQ9IiIgcG9pTmFtZT0iIiBwb2lBZGRyZXNzPSIiIHBvaUNsYXNzaWZ5VHlwZT0iMCIgY2l0eT0iIj48L2xvY2F0aW9uPjxwdWJsaWNVc2VyTmFtZT48L3B1YmxpY1VzZXJOYW1lPjxzdHJlYW12aWRlbz48c3RyZWFtdmlkZW91cmw+PC9zdHJlYW12aWRlb3VybD48c3RyZWFtdmlkZW90aHVtYnVybD48L3N0cmVhbXZpZGVvdGh1bWJ1cmw+PHN0cmVhbXZpZGVvd2VidXJsPjwvc3RyZWFtdmlkZW93ZWJ1cmw+PC9zdHJlYW12aWRlbz48L1RpbWVsaW5lT2JqZWN0Pg==","iLen":2077},"objectOperations":{"buffer":"CAA=","iLen":2},"preDownloadInfo":{"noPreDownloadRange":"","preDownloadNetType":0,"preDownloadPercent":0},"referId":0,"referUsername":"","snsRedEnvelops":{"reportId":0,"reportKey":0,"resourceId":0,"rewardCount":0},"username":"wxid_uwbxwbt4ihjd22","weAppInfo":{"appId":0,"mapPoiId":"","redirectUrl":"","score":0,"showType":0,"userName":""},"withUserCount":0,"withUserListCount":0},{"blackListCount":0,"commentCount":0,"commentUserListCount":0,"createTime":1626542926,"deleteFlag":0,"extFlag":1,"groupCount":0,"groupUserCount":0,"id":13644431003338420534,"isNotRichText":1,"likeCount":0,"likeFlag":0,"likeUserListCount":0,"nickname":"小张晚安","noChange":0,"objectDesc":{"buffer":"PFRpbWVsaW5lT2JqZWN0PjxpZD48IVtDREFUQVsxMzY0NDQzMTAwMzMzODQyMDUzNF1dPjwvaWQ+PHVzZXJuYW1lPjwhW0NEQVRBW3d4aWRfdXdieHdidDRpaGpkMjJdXT48L3VzZXJuYW1lPjxjcmVhdGVUaW1lPjwhW0NEQVRBWzE2MjY1NDI5MjZdXT48L2NyZWF0ZVRpbWU+PGNvbnRlbnREZXNjU2hvd1R5cGU+MDwvY29udGVudERlc2NTaG93VHlwZT48Y29udGVudERlc2NTY2VuZT4wPC9jb250ZW50RGVzY1NjZW5lPjxwcml2YXRlPjwhW0NEQVRBWzBdXT48L3ByaXZhdGU+PGNvbnRlbnREZXNjPjwhW0NEQVRBW+aYr+WTquS4quS6uua4o+WcqOWPkeiqk++8jOaQnuW+l+S7iuaZmuWPiOaYr+aatOmbqO+8jOWPiOaYr+aJk+mbt+eahFvml7rmn7RdW+aXuuaftF1dXT48L2NvbnRlbnREZXNjPjxjb250ZW50YXR0cj48IVtDREFUQVswXV0+PC9jb250ZW50YXR0cj48c291cmNlVXNlck5hbWU+PC9zb3VyY2VVc2VyTmFtZT48c291cmNlTmlja05hbWU+PC9zb3VyY2VOaWNrTmFtZT48c3RhdGlzdGljc0RhdGE+PC9zdGF0aXN0aWNzRGF0YT48d2VhcHBJbmZvPjxhcHBVc2VyTmFtZT48L2FwcFVzZXJOYW1lPjxwYWdlUGF0aD48L3BhZ2VQYXRoPjx2ZXJzaW9uPjwhW0NEQVRBWzBdXT48L3ZlcnNpb24+PGRlYnVnTW9kZT48IVtDREFUQVswXV0+PC9kZWJ1Z01vZGU+PHNoYXJlQWN0aW9uSWQ+PC9zaGFyZUFjdGlvbklkPjxpc0dhbWU+PCFbQ0RBVEFbMF1dPjwvaXNHYW1lPjxtZXNzYWdlRXh0cmFEYXRhPjwvbWVzc2FnZUV4dHJhRGF0YT48c3ViVHlwZT48IVtDREFUQVswXV0+PC9zdWJUeXBlPjxwcmVsb2FkUmVzb3VyY2VzPjwvcHJlbG9hZFJlc291cmNlcz48L3dlYXBwSW5mbz48Y2FudmFzSW5mb1htbD48L2NhbnZhc0luZm9YbWw+PENvbnRlbnRPYmplY3Q+PGNvbnRlbnRTdHlsZT48IVtDREFUQVsyXV0+PC9jb250ZW50U3R5bGU+PGNvbnRlbnRTdWJTdHlsZT48IVtDREFUQVswXV0+PC9jb250ZW50U3ViU3R5bGU+PHRpdGxlPjwvdGl0bGU+PGRlc2NyaXB0aW9uPjwvZGVzY3JpcHRpb24+PGNvbnRlbnRVcmw+PC9jb250ZW50VXJsPjwvQ29udGVudE9iamVjdD48YWN0aW9uSW5mbz48YXBwTXNnPjxtZWRpYVRhZ05hbWU+PC9tZWRpYVRhZ05hbWU+PG1lc3NhZ2VFeHQ+PC9tZXNzYWdlRXh0PjxtZXNzYWdlQWN0aW9uPjwvbWVzc2FnZUFjdGlvbj48L2FwcE1zZz48L2FjdGlvbkluZm8+PGFwcEluZm8+PGlkPjwvaWQ+PC9hcHBJbmZvPjxsb2NhdGlvbiBwb2lDbGFzc2lmeUlkPSIiIHBvaU5hbWU9IiIgcG9pQWRkcmVzcz0iIiBwb2lDbGFzc2lmeVR5cGU9IjAiIGNpdHk9IiI+PC9sb2NhdGlvbj48cHVibGljVXNlck5hbWU+PC9wdWJsaWNVc2VyTmFtZT48c3RyZWFtdmlkZW8+PHN0cmVhbXZpZGVvdXJsPjwvc3RyZWFtdmlkZW91cmw+PHN0cmVhbXZpZGVvdGh1bWJ1cmw+PC9zdHJlYW12aWRlb3RodW1idXJsPjxzdHJlYW12aWRlb3dlYnVybD48L3N0cmVhbXZpZGVvd2VidXJsPjwvc3RyZWFtdmlkZW8+PC9UaW1lbGluZU9iamVjdD4=","iLen":1496},"objectOperations":{"buffer":"CAA=","iLen":2},"preDownloadInfo":{"noPreDownloadRange":"","preDownloadNetType":0,"preDownloadPercent":0},"referId":0,"referUsername":"","snsRedEnvelops":{"reportId":0,"reportKey":0,"resourceId":0,"rewardCount":0},"username":"wxid_uwbxwbt4ihjd22","weAppInfo":{"appId":0,"mapPoiId":"","redirectUrl":"","score":0,"showType":0,"userName":""},"withUserCount":0,"withUserListCount":0},{"blackListCount":0,"commentCount":0,"commentUserListCount":0,"createTime":1626442781,"deleteFlag":0,"extFlag":1,"groupCount":0,"groupUserCount":0,"id":13643590928611357004,"isNotRichText":1,"likeCount":0,"likeFlag":0,"likeUserListCount":0,"nickname":"小张晚安","noChange":0,"objectDesc":{"buffer":"PFRpbWVsaW5lT2JqZWN0PjxpZD48IVtDREFUQVsxMzY0MzU5MDkyODYxMTM1NzAwNF1dPjwvaWQ+PHVzZXJuYW1lPjwhW0NEQVRBW3d4aWRfdXdieHdidDRpaGpkMjJdXT48L3VzZXJuYW1lPjxjcmVhdGVUaW1lPjwhW0NEQVRBWzE2MjY0NDI3ODFdXT48L2NyZWF0ZVRpbWU+PGNvbnRlbnREZXNjU2hvd1R5cGU+MDwvY29udGVudERlc2NTaG93VHlwZT48Y29udGVudERlc2NTY2VuZT4wPC9jb250ZW50RGVzY1NjZW5lPjxwcml2YXRlPjwhW0NEQVRBWzBdXT48L3ByaXZhdGU+PGNvbnRlbnREZXNjPjwhW0NEQVRBW+S7iuaZmuaciOS6rvCfjJkg5b6I5byv77yM5Lq65rKh5byv5bCx5aW9W+aXuuaftF1b5pe65p+0XV1dPjwvY29udGVudERlc2M+PGNvbnRlbnRhdHRyPjwhW0NEQVRBWzBdXT48L2NvbnRlbnRhdHRyPjxzb3VyY2VVc2VyTmFtZT48L3NvdXJjZVVzZXJOYW1lPjxzb3VyY2VOaWNrTmFtZT48L3NvdXJjZU5pY2tOYW1lPjxzdGF0aXN0aWNzRGF0YT48L3N0YXRpc3RpY3NEYXRhPjx3ZWFwcEluZm8+PGFwcFVzZXJOYW1lPjwvYXBwVXNlck5hbWU+PHBhZ2VQYXRoPjwvcGFnZVBhdGg+PHZlcnNpb24+PCFbQ0RBVEFbMF1dPjwvdmVyc2lvbj48ZGVidWdNb2RlPjwhW0NEQVRBWzBdXT48L2RlYnVnTW9kZT48c2hhcmVBY3Rpb25JZD48L3NoYXJlQWN0aW9uSWQ+PGlzR2FtZT48IVtDREFUQVswXV0+PC9pc0dhbWU+PG1lc3NhZ2VFeHRyYURhdGE+PC9tZXNzYWdlRXh0cmFEYXRhPjxzdWJUeXBlPjwhW0NEQVRBWzBdXT48L3N1YlR5cGU+PHByZWxvYWRSZXNvdXJjZXM+PC9wcmVsb2FkUmVzb3VyY2VzPjwvd2VhcHBJbmZvPjxjYW52YXNJbmZvWG1sPjwvY2FudmFzSW5mb1htbD48Q29udGVudE9iamVjdD48Y29udGVudFN0eWxlPjwhW0NEQVRBWzFdXT48L2NvbnRlbnRTdHlsZT48Y29udGVudFN1YlN0eWxlPjwhW0NEQVRBWzBdXT48L2NvbnRlbnRTdWJTdHlsZT48dGl0bGU+PC90aXRsZT48ZGVzY3JpcHRpb24+PC9kZXNjcmlwdGlvbj48Y29udGVudFVybD48L2NvbnRlbnRVcmw+PG1lZGlhTGlzdD48bWVkaWE+PGlkPjwhW0NEQVRBWzEzNjQzNTkwOTI5MjEzMjM5NjQxXV0+PC9pZD48dHlwZT48IVtDREFUQVsyXV0+PC90eXBlPjx0aXRsZT48L3RpdGxlPjxkZXNjcmlwdGlvbj48L2Rlc2NyaXB0aW9uPjxwcml2YXRlPjwhW0NEQVRBWzBdXT48L3ByaXZhdGU+PHVybCB0eXBlPSIxIiBtZDU9ImEwYzA1NTljMTE3MDUwOTIxM2YyNGMwNWMwMmVjODRkIj48IVtDREFUQVtodHRwOi8vc3ptbXNucy5xcGljLmNuL21tc25zL1ZFZG9qaWJldmpSUEN2OU0zQW5IUzh3UFEzaWJKZGRHRXI4SThOYU9WNnJFWHhtNmtLeG9Ob0xjdTVIMVZBN3hpY3BpYTZCZDJORHFNQ2svMF1dPjwvdXJsPjx0aHVtYiB0eXBlPSIxIj48IVtDREFUQVtodHRwOi8vc3ptbXNucy5xcGljLmNuL21tc25zL1ZFZG9qaWJldmpSUEN2OU0zQW5IUzh3UFEzaWJKZGRHRXI4SThOYU9WNnJFWHhtNmtLeG9Ob0xjdTVIMVZBN3hpY3BpYTZCZDJORHFNQ2svMTUwXV0+PC90aHVtYj48dmlkZW9EdXJhdGlvbj48IVtDREFUQVswLjBdXT48L3ZpZGVvRHVyYXRpb24+PHNpemUgdG90YWxTaXplPSI3MTYzNy4wIiB3aWR0aD0iOTc4LjAiIGhlaWdodD0iMTE2NC4wIj48L3NpemU+PC9tZWRpYT48L21lZGlhTGlzdD48L0NvbnRlbnRPYmplY3Q+PGFjdGlvbkluZm8+PGFwcE1zZz48bWVkaWFUYWdOYW1lPjwvbWVkaWFUYWdOYW1lPjxtZXNzYWdlRXh0PjwvbWVzc2FnZUV4dD48bWVzc2FnZUFjdGlvbj48L21lc3NhZ2VBY3Rpb24+PC9hcHBNc2c+PC9hY3Rpb25JbmZvPjxhcHBJbmZvPjxpZD48L2lkPjwvYXBwSW5mbz48bG9jYXRpb24gcG9pQ2xhc3NpZnlJZD0iIiBwb2lOYW1lPSIiIHBvaUFkZHJlc3M9IiIgcG9pQ2xhc3NpZnlUeXBlPSIwIiBjaXR5PSIiPjwvbG9jYXRpb24+PHB1YmxpY1VzZXJOYW1lPjwvcHVibGljVXNlck5hbWU+PHN0cmVhbXZpZGVvPjxzdHJlYW12aWRlb3VybD48L3N0cmVhbXZpZGVvdXJsPjxzdHJlYW12aWRlb3RodW1idXJsPjwvc3RyZWFtdmlkZW90aHVtYnVybD48c3RyZWFtdmlkZW93ZWJ1cmw+PC9zdHJlYW12aWRlb3dlYnVybD48L3N0cmVhbXZpZGVvPjwvVGltZWxpbmVPYmplY3Q+","iLen":2085},"objectOperations":{"buffer":"CAA=","iLen":2},"preDownloadInfo":{"noPreDownloadRange":"","preDownloadNetType":0,"preDownloadPercent":0},"referId":0,"referUsername":"","snsRedEnvelops":{"reportId":0,"reportKey":0,"resourceId":0,"rewardCount":0},"username":"wxid_uwbxwbt4ihjd22","weAppInfo":{"appId":0,"mapPoiId":"","redirectUrl":"","score":0,"showType":0,"userName":""},"withUserCount":0,"withUserListCount":0},{"blackListCount":0,"commentCount":0,"commentUserListCount":0,"createTime":1626348290,"deleteFlag":0,"extFlag":1,"groupCount":0,"groupUserCount":0,"id":13642798280310927692,"isNotRichText":1,"likeCount":1,"likeFlag":0,"likeUserList":[{"commentFlag":0,"commentId":0,"commentId2":0,"content":"","createTime":1626351692,"deleteFlag":0,"isNotRichText":0,"nickname":"Mr.Y","replyCommentId":0,"replyCommentId2":0,"replyUsername":"","source":0,"type":1,"username":"wxid_ocmmotiznvw122"}],"likeUserListCount":1,"nickname":"小张晚安","noChange":0,"objectDesc":{"buffer":"PFRpbWVsaW5lT2JqZWN0PjxpZD48IVtDREFUQVsxMzY0Mjc5ODI4MDMxMDkyNzY5Ml1dPjwvaWQ+PHVzZXJuYW1lPjwhW0NEQVRBW3d4aWRfdXdieHdidDRpaGpkMjJdXT48L3VzZXJuYW1lPjxjcmVhdGVUaW1lPjwhW0NEQVRBWzE2MjYzNDgyOTBdXT48L2NyZWF0ZVRpbWU+PGNvbnRlbnREZXNjU2hvd1R5cGU+MDwvY29udGVudERlc2NTaG93VHlwZT48Y29udGVudERlc2NTY2VuZT4wPC9jb250ZW50RGVzY1NjZW5lPjxwcml2YXRlPjwhW0NEQVRBWzBdXT48L3ByaXZhdGU+PGNvbnRlbnREZXNjPjwhW0NEQVRBW+imgeW+l+eRn+W+l+eRn++8jOWHj+S4gOWNiuebruagh+S6hlvml7rmn7RdW+aXuuaftF1dXT48L2NvbnRlbnREZXNjPjxjb250ZW50YXR0cj48IVtDREFUQVswXV0+PC9jb250ZW50YXR0cj48c291cmNlVXNlck5hbWU+PC9zb3VyY2VVc2VyTmFtZT48c291cmNlTmlja05hbWU+PC9zb3VyY2VOaWNrTmFtZT48c3RhdGlzdGljc0RhdGE+PC9zdGF0aXN0aWNzRGF0YT48d2VhcHBJbmZvPjxhcHBVc2VyTmFtZT48L2FwcFVzZXJOYW1lPjxwYWdlUGF0aD48L3BhZ2VQYXRoPjx2ZXJzaW9uPjwhW0NEQVRBWzBdXT48L3ZlcnNpb24+PGRlYnVnTW9kZT48IVtDREFUQVswXV0+PC9kZWJ1Z01vZGU+PHNoYXJlQWN0aW9uSWQ+PC9zaGFyZUFjdGlvbklkPjxpc0dhbWU+PCFbQ0RBVEFbMF1dPjwvaXNHYW1lPjxtZXNzYWdlRXh0cmFEYXRhPjwvbWVzc2FnZUV4dHJhRGF0YT48c3ViVHlwZT48IVtDREFUQVswXV0+PC9zdWJUeXBlPjxwcmVsb2FkUmVzb3VyY2VzPjwvcHJlbG9hZFJlc291cmNlcz48L3dlYXBwSW5mbz48Y2FudmFzSW5mb1htbD48L2NhbnZhc0luZm9YbWw+PENvbnRlbnRPYmplY3Q+PGNvbnRlbnRTdHlsZT48IVtDREFUQVsxXV0+PC9jb250ZW50U3R5bGU+PGNvbnRlbnRTdWJTdHlsZT48IVtDREFUQVswXV0+PC9jb250ZW50U3ViU3R5bGU+PHRpdGxlPjwvdGl0bGU+PGRlc2NyaXB0aW9uPjwvZGVzY3JpcHRpb24+PGNvbnRlbnRVcmw+PC9jb250ZW50VXJsPjxtZWRpYUxpc3Q+PG1lZGlhPjxpZD48IVtDREFUQVsxMzY0Mjc5ODI4MTAzODMxMTc2Ml1dPjwvaWQ+PHR5cGU+PCFbQ0RBVEFbMl1dPjwvdHlwZT48dGl0bGU+PC90aXRsZT48ZGVzY3JpcHRpb24+PC9kZXNjcmlwdGlvbj48cHJpdmF0ZT48IVtDREFUQVswXV0+PC9wcml2YXRlPjx1cmwgdHlwZT0iMSIgbWQ1PSI0NmE0OGE0YzgzOTNhMDA0NWZjZTUzZGU4ZmEzODg0OSI+PCFbQ0RBVEFbaHR0cDovL3N6bW1zbnMucXBpYy5jbi9tbXNucy9WRWRvamliZXZqUlBDdjlNM0FuSFM4OFRoT0dJczEwSGdDMEtLUDRidUJIQnh1eUhXa3BBT0VudnpvSmtyZElEbkJ3N2JRNjVSZ0VnLzBdXT48L3VybD48dGh1bWIgdHlwZT0iMSI+PCFbQ0RBVEFbaHR0cDovL3N6bW1zbnMucXBpYy5jbi9tbXNucy9WRWRvamliZXZqUlBDdjlNM0FuSFM4OFRoT0dJczEwSGdDMEtLUDRidUJIQnh1eUhXa3BBT0VudnpvSmtyZElEbkJ3N2JRNjVSZ0VnLzE1MF1dPjwvdGh1bWI+PHZpZGVvRHVyYXRpb24+PCFbQ0RBVEFbMC4wXV0+PC92aWRlb0R1cmF0aW9uPjxzaXplIHRvdGFsU2l6ZT0iOTM3MzEuMCIgd2lkdGg9IjE0NDAuMCIgaGVpZ2h0PSIxMDgwLjAiPjwvc2l6ZT48L21lZGlhPjwvbWVkaWFMaXN0PjwvQ29udGVudE9iamVjdD48YWN0aW9uSW5mbz48YXBwTXNnPjxtZWRpYVRhZ05hbWU+PC9tZWRpYVRhZ05hbWU+PG1lc3NhZ2VFeHQ+PC9tZXNzYWdlRXh0PjxtZXNzYWdlQWN0aW9uPjwvbWVzc2FnZUFjdGlvbj48L2FwcE1zZz48L2FjdGlvbkluZm8+PGFwcEluZm8+PGlkPjwvaWQ+PC9hcHBJbmZvPjxsb2NhdGlvbiBwb2lDbGFzc2lmeUlkPSIiIHBvaU5hbWU9IiIgcG9pQWRkcmVzcz0iIiBwb2lDbGFzc2lmeVR5cGU9IjAiIGNpdHk9IiI+PC9sb2NhdGlvbj48cHVibGljVXNlck5hbWU+PC9wdWJsaWNVc2VyTmFtZT48c3RyZWFtdmlkZW8+PHN0cmVhbXZpZGVvdXJsPjwvc3RyZWFtdmlkZW91cmw+PHN0cmVhbXZpZGVvdGh1bWJ1cmw+PC9zdHJlYW12aWRlb3RodW1idXJsPjxzdHJlYW12aWRlb3dlYnVybD48L3N0cmVhbXZpZGVvd2VidXJsPjwvc3RyZWFtdmlkZW8+PC9UaW1lbGluZU9iamVjdD4=","iLen":2075},"objectOperations":{"buffer":"CAA=","iLen":2},"preDownloadInfo":{"noPreDownloadRange":"","preDownloadNetType":0,"preDownloadPercent":0},"referId":0,"referUsername":"","snsRedEnvelops":{"reportId":0,"reportKey":0,"resourceId":0,"rewardCount":0},"username":"wxid_uwbxwbt4ihjd22","weAppInfo":{"appId":0,"mapPoiId":"","redirectUrl":"","score":0,"showType":0,"userName":""},"withUserCount":0,"withUserListCount":0},{"blackListCount":0,"commentCount":0,"commentUserListCount":0,"createTime":1626277124,"deleteFlag":0,"extFlag":1,"groupCount":0,"groupUserCount":0,"id":13642201292100546882,"isNotRichText":1,"likeCount":1,"likeFlag":0,"likeUserList":[{"commentFlag":0,"commentId":0,"commentId2":0,"content":"","createTime":1626277179,"deleteFlag":0,"isNotRichText":0,"nickname":"为美好的世界献上祝福","replyCommentId":0,"replyCommentId2":0,"replyUsername":"","source":0,"type":1,"username":"wxid_mjzeh4qj9hio22"}],"likeUserListCount":1,"nickname":"小张晚安","noChange":0,"objectDesc":{"buffer":"PFRpbWVsaW5lT2JqZWN0PjxpZD48IVtDREFUQVsxMzY0MjIwMTI5MjEwMDU0Njg4Ml1dPjwvaWQ+PHVzZXJuYW1lPjwhW0NEQVRBW3d4aWRfdXdieHdidDRpaGpkMjJdXT48L3VzZXJuYW1lPjxjcmVhdGVUaW1lPjwhW0NEQVRBWzE2MjYyNzcxMjRdXT48L2NyZWF0ZVRpbWU+PGNvbnRlbnREZXNjU2hvd1R5cGU+MDwvY29udGVudERlc2NTaG93VHlwZT48Y29udGVudERlc2NTY2VuZT4wPC9jb250ZW50RGVzY1NjZW5lPjxwcml2YXRlPjwhW0NEQVRBWzBdXT48L3ByaXZhdGU+PGNvbnRlbnREZXNjPjwhW0NEQVRBW+WNp+anve+8jOaUtuWIsOS6humihOitpuitpuWRilvmg4rmgZBdW+aDiuaBkF1dXT48L2NvbnRlbnREZXNjPjxjb250ZW50YXR0cj48IVtDREFUQVswXV0+PC9jb250ZW50YXR0cj48c291cmNlVXNlck5hbWU+PC9zb3VyY2VVc2VyTmFtZT48c291cmNlTmlja05hbWU+PC9zb3VyY2VOaWNrTmFtZT48c3RhdGlzdGljc0RhdGE+PC9zdGF0aXN0aWNzRGF0YT48d2VhcHBJbmZvPjxhcHBVc2VyTmFtZT48L2FwcFVzZXJOYW1lPjxwYWdlUGF0aD48L3BhZ2VQYXRoPjx2ZXJzaW9uPjwhW0NEQVRBWzBdXT48L3ZlcnNpb24+PGRlYnVnTW9kZT48IVtDREFUQVswXV0+PC9kZWJ1Z01vZGU+PHNoYXJlQWN0aW9uSWQ+PC9zaGFyZUFjdGlvbklkPjxpc0dhbWU+PCFbQ0RBVEFbMF1dPjwvaXNHYW1lPjxtZXNzYWdlRXh0cmFEYXRhPjwvbWVzc2FnZUV4dHJhRGF0YT48c3ViVHlwZT48IVtDREFUQVswXV0+PC9zdWJUeXBlPjxwcmVsb2FkUmVzb3VyY2VzPjwvcHJlbG9hZFJlc291cmNlcz48L3dlYXBwSW5mbz48Y2FudmFzSW5mb1htbD48L2NhbnZhc0luZm9YbWw+PENvbnRlbnRPYmplY3Q+PGNvbnRlbnRTdHlsZT48IVtDREFUQVsyXV0+PC9jb250ZW50U3R5bGU+PGNvbnRlbnRTdWJTdHlsZT48IVtDREFUQVswXV0+PC9jb250ZW50U3ViU3R5bGU+PHRpdGxlPjwvdGl0bGU+PGRlc2NyaXB0aW9uPjwvZGVzY3JpcHRpb24+PGNvbnRlbnRVcmw+PC9jb250ZW50VXJsPjwvQ29udGVudE9iamVjdD48YWN0aW9uSW5mbz48YXBwTXNnPjxtZWRpYVRhZ05hbWU+PC9tZWRpYVRhZ05hbWU+PG1lc3NhZ2VFeHQ+PC9tZXNzYWdlRXh0PjxtZXNzYWdlQWN0aW9uPjwvbWVzc2FnZUFjdGlvbj48L2FwcE1zZz48L2FjdGlvbkluZm8+PGFwcEluZm8+PGlkPjwvaWQ+PC9hcHBJbmZvPjxsb2NhdGlvbiBwb2lDbGFzc2lmeUlkPSIiIHBvaU5hbWU9IiIgcG9pQWRkcmVzcz0iIiBwb2lDbGFzc2lmeVR5cGU9IjAiIGNpdHk9IiI+PC9sb2NhdGlvbj48cHVibGljVXNlck5hbWU+PC9wdWJsaWNVc2VyTmFtZT48c3RyZWFtdmlkZW8+PHN0cmVhbXZpZGVvdXJsPjwvc3RyZWFtdmlkZW91cmw+PHN0cmVhbXZpZGVvdGh1bWJ1cmw+PC9zdHJlYW12aWRlb3RodW1idXJsPjxzdHJlYW12aWRlb3dlYnVybD48L3N0cmVhbXZpZGVvd2VidXJsPjwvc3RyZWFtdmlkZW8+PC9UaW1lbGluZU9iamVjdD4=","iLen":1457},"objectOperations":{"buffer":"CAA=","iLen":2},"preDownloadInfo":{"noPreDownloadRange":"","preDownloadNetType":0,"preDownloadPercent":0},"referId":0,"referUsername":"","snsRedEnvelops":{"reportId":0,"reportKey":0,"resourceId":0,"rewardCount":0},"username":"wxid_uwbxwbt4ihjd22","weAppInfo":{"appId":0,"mapPoiId":"","redirectUrl":"","score":0,"showType":0,"userName":""},"withUserCount":0,"withUserListCount":0},{"blackListCount":0,"commentCount":0,"commentUserListCount":0,"createTime":1626099336,"deleteFlag":0,"extFlag":1,"groupCount":0,"groupUserCount":0,"id":13640709903944790348,"isNotRichText":1,"likeCount":1,"likeFlag":0,"likeUserList":[{"commentFlag":0,"commentId":0,"commentId2":0,"content":"","createTime":1626134130,"deleteFlag":0,"isNotRichText":0,"nickname":"Mr.Y","replyCommentId":0,"replyCommentId2":0,"replyUsername":"","source":0,"type":1,"username":"wxid_ocmmotiznvw122"}],"likeUserListCount":1,"nickname":"小张晚安","noChange":0,"objectDesc":{"buffer":"PFRpbWVsaW5lT2JqZWN0PjxpZD48IVtDREFUQVsxMzY0MDcwOTkwMzk0NDc5MDM0OF1dPjwvaWQ+PHVzZXJuYW1lPjwhW0NEQVRBW3d4aWRfdXdieHdidDRpaGpkMjJdXT48L3VzZXJuYW1lPjxjcmVhdGVUaW1lPjwhW0NEQVRBWzE2MjYwOTkzMzZdXT48L2NyZWF0ZVRpbWU+PGNvbnRlbnREZXNjU2hvd1R5cGU+MDwvY29udGVudERlc2NTaG93VHlwZT48Y29udGVudERlc2NTY2VuZT4wPC9jb250ZW50RGVzY1NjZW5lPjxwcml2YXRlPjwhW0NEQVRBWzBdXT48L3ByaXZhdGU+PGNvbnRlbnREZXNjPjwhW0NEQVRBW+S5n+eul+aYr+S4izcw5LqGW+aXuuaftF1b5pe65p+0XV1dPjwvY29udGVudERlc2M+PGNvbnRlbnRhdHRyPjwhW0NEQVRBWzBdXT48L2NvbnRlbnRhdHRyPjxzb3VyY2VVc2VyTmFtZT48L3NvdXJjZVVzZXJOYW1lPjxzb3VyY2VOaWNrTmFtZT48L3NvdXJjZU5pY2tOYW1lPjxzdGF0aXN0aWNzRGF0YT48L3N0YXRpc3RpY3NEYXRhPjx3ZWFwcEluZm8+PGFwcFVzZXJOYW1lPjwvYXBwVXNlck5hbWU+PHBhZ2VQYXRoPjwvcGFnZVBhdGg+PHZlcnNpb24+PCFbQ0RBVEFbMF1dPjwvdmVyc2lvbj48ZGVidWdNb2RlPjwhW0NEQVRBWzBdXT48L2RlYnVnTW9kZT48c2hhcmVBY3Rpb25JZD48L3NoYXJlQWN0aW9uSWQ+PGlzR2FtZT48IVtDREFUQVswXV0+PC9pc0dhbWU+PG1lc3NhZ2VFeHRyYURhdGE+PC9tZXNzYWdlRXh0cmFEYXRhPjxzdWJUeXBlPjwhW0NEQVRBWzBdXT48L3N1YlR5cGU+PHByZWxvYWRSZXNvdXJjZXM+PC9wcmVsb2FkUmVzb3VyY2VzPjwvd2VhcHBJbmZvPjxjYW52YXNJbmZvWG1sPjwvY2FudmFzSW5mb1htbD48Q29udGVudE9iamVjdD48Y29udGVudFN0eWxlPjwhW0NEQVRBWzFdXT48L2NvbnRlbnRTdHlsZT48Y29udGVudFN1YlN0eWxlPjwhW0NEQVRBWzBdXT48L2NvbnRlbnRTdWJTdHlsZT48dGl0bGU+PC90aXRsZT48ZGVzY3JpcHRpb24+PC9kZXNjcmlwdGlvbj48Y29udGVudFVybD48L2NvbnRlbnRVcmw+PG1lZGlhTGlzdD48bWVkaWE+PGlkPjwhW0NEQVRBWzEzNjQwNzA5OTA0NjgyODU2Nzc0XV0+PC9pZD48dHlwZT48IVtDREFUQVsyXV0+PC90eXBlPjx0aXRsZT48L3RpdGxlPjxkZXNjcmlwdGlvbj48L2Rlc2NyaXB0aW9uPjxwcml2YXRlPjwhW0NEQVRBWzBdXT48L3ByaXZhdGU+PHVybCB0eXBlPSIxIiBtZDU9IjQzNjdkOTU4Yzc1MjJkY2E3NWZiNmM4MzY2ODYxZGQzIj48IVtDREFUQVtodHRwOi8vc3ptbXNucy5xcGljLmNuL21tc25zL1ZFZG9qaWJldmpST056ajFQdTJtSTB2QmNPVzkzTnRVUDU4UWtONFM4d2VTa3RIS2lhdzM1YUFPUjNObGV2Z2hBYndTRU43ZTY3ZVljLzBdXT48L3VybD48dGh1bWIgdHlwZT0iMSI+PCFbQ0RBVEFbaHR0cDovL3N6bW1zbnMucXBpYy5jbi9tbXNucy9WRWRvamliZXZqUk9OemoxUHUybUkwdkJjT1c5M050VVA1OFFrTjRTOHdlU2t0SEtpYXczNWFBT1IzTmxldmdoQWJ3U0VON2U2N2VZYy8xNTBdXT48L3RodW1iPjx2aWRlb0R1cmF0aW9uPjwhW0NEQVRBWzAuMF1dPjwvdmlkZW9EdXJhdGlvbj48c2l6ZSB0b3RhbFNpemU9IjE2OTMxLjAiIHdpZHRoPSI3MjYuMCIgaGVpZ2h0PSIyOTkuMCI+PC9zaXplPjwvbWVkaWE+PC9tZWRpYUxpc3Q+PC9Db250ZW50T2JqZWN0PjxhY3Rpb25JbmZvPjxhcHBNc2c+PG1lZGlhVGFnTmFtZT48L21lZGlhVGFnTmFtZT48bWVzc2FnZUV4dD48L21lc3NhZ2VFeHQ+PG1lc3NhZ2VBY3Rpb24+PC9tZXNzYWdlQWN0aW9uPjwvYXBwTXNnPjwvYWN0aW9uSW5mbz48YXBwSW5mbz48aWQ+PC9pZD48L2FwcEluZm8+PGxvY2F0aW9uIHBvaUNsYXNzaWZ5SWQ9IiIgcG9pTmFtZT0iIiBwb2lBZGRyZXNzPSIiIHBvaUNsYXNzaWZ5VHlwZT0iMCIgY2l0eT0iIj48L2xvY2F0aW9uPjxwdWJsaWNVc2VyTmFtZT48L3B1YmxpY1VzZXJOYW1lPjxzdHJlYW12aWRlbz48c3RyZWFtdmlkZW91cmw+PC9zdHJlYW12aWRlb3VybD48c3RyZWFtdmlkZW90aHVtYnVybD48L3N0cmVhbXZpZGVvdGh1bWJ1cmw+PHN0cmVhbXZpZGVvd2VidXJsPjwvc3RyZWFtdmlkZW93ZWJ1cmw+PC9zdHJlYW12aWRlbz48L1RpbWVsaW5lT2JqZWN0Pg==","iLen":2056},"objectOperations":{"buffer":"CAA=","iLen":2},"preDownloadInfo":{"noPreDownloadRange":"","preDownloadNetType":0,"preDownloadPercent":0},"referId":0,"referUsername":"","snsRedEnvelops":{"reportId":0,"reportKey":0,"resourceId":0,"rewardCount":0},"username":"wxid_uwbxwbt4ihjd22","weAppInfo":{"appId":0,"mapPoiId":"","redirectUrl":"","score":0,"showType":0,"userName":""},"withUserCount":0,"withUserListCount":0},{"blackListCount":0,"commentCount":0,"commentUserListCount":0,"createTime":1626020250,"deleteFlag":0,"extFlag":1,"groupCount":0,"groupUserCount":0,"id":13640046480797544764,"isNotRichText":1,"likeCount":0,"likeFlag":0,"likeUserListCount":0,"nickname":"小张晚安","noChange":0,"objectDesc":{"buffer":"PFRpbWVsaW5lT2JqZWN0PjxpZD48IVtDREFUQVsxMzY0MDA0NjQ4MDc5NzU0NDc2NF1dPjwvaWQ+PHVzZXJuYW1lPjwhW0NEQVRBW3d4aWRfdXdieHdidDRpaGpkMjJdXT48L3VzZXJuYW1lPjxjcmVhdGVUaW1lPjwhW0NEQVRBWzE2MjYwMjAyNTBdXT48L2NyZWF0ZVRpbWU+PGNvbnRlbnREZXNjU2hvd1R5cGU+MDwvY29udGVudERlc2NTaG93VHlwZT48Y29udGVudERlc2NTY2VuZT4wPC9jb250ZW50RGVzY1NjZW5lPjxwcml2YXRlPjwhW0NEQVRBWzBdXT48L3ByaXZhdGU+PGNvbnRlbnREZXNjPjwhW0NEQVRBW+S9oOiLpeacquWHuueOsO+8jOa4uOaIj+S4jeWNuOi9ve+8gV1dPjwvY29udGVudERlc2M+PGNvbnRlbnRhdHRyPjwhW0NEQVRBWzBdXT48L2NvbnRlbnRhdHRyPjxzb3VyY2VVc2VyTmFtZT48L3NvdXJjZVVzZXJOYW1lPjxzb3VyY2VOaWNrTmFtZT48L3NvdXJjZU5pY2tOYW1lPjxzdGF0aXN0aWNzRGF0YT48L3N0YXRpc3RpY3NEYXRhPjx3ZWFwcEluZm8+PGFwcFVzZXJOYW1lPjwvYXBwVXNlck5hbWU+PHBhZ2VQYXRoPjwvcGFnZVBhdGg+PHZlcnNpb24+PCFbQ0RBVEFbMF1dPjwvdmVyc2lvbj48ZGVidWdNb2RlPjwhW0NEQVRBWzBdXT48L2RlYnVnTW9kZT48c2hhcmVBY3Rpb25JZD48L3NoYXJlQWN0aW9uSWQ+PGlzR2FtZT48IVtDREFUQVswXV0+PC9pc0dhbWU+PG1lc3NhZ2VFeHRyYURhdGE+PC9tZXNzYWdlRXh0cmFEYXRhPjxzdWJUeXBlPjwhW0NEQVRBWzBdXT48L3N1YlR5cGU+PHByZWxvYWRSZXNvdXJjZXM+PC9wcmVsb2FkUmVzb3VyY2VzPjwvd2VhcHBJbmZvPjxjYW52YXNJbmZvWG1sPjwvY2FudmFzSW5mb1htbD48Q29udGVudE9iamVjdD48Y29udGVudFN0eWxlPjwhW0NEQVRBWzFdXT48L2NvbnRlbnRTdHlsZT48Y29udGVudFN1YlN0eWxlPjwhW0NEQVRBWzBdXT48L2NvbnRlbnRTdWJTdHlsZT48dGl0bGU+PC90aXRsZT48ZGVzY3JpcHRpb24+PC9kZXNjcmlwdGlvbj48Y29udGVudFVybD48L2NvbnRlbnRVcmw+PG1lZGlhTGlzdD48bWVkaWE+PGlkPjwhW0NEQVRBWzEzNjQwMDQ2NDgxNTA3OTU0OTk1XV0+PC9pZD48dHlwZT48IVtDREFUQVsyXV0+PC90eXBlPjx0aXRsZT48L3RpdGxlPjxkZXNjcmlwdGlvbj48L2Rlc2NyaXB0aW9uPjxwcml2YXRlPjwhW0NEQVRBWzBdXT48L3ByaXZhdGU+PHVybCB0eXBlPSIxIiBtZDU9Ijg4NDJkMGU0YjU2ZWZjMzhkZjVhMTlkMjgxMzA2OTYyIj48IVtDREFUQVtodHRwOi8vc3ptbXNucy5xcGljLmNuL21tc25zL1ZFZG9qaWJldmpST056ajFQdTJtSTBqYmliM292bmlieG8xcTJpYm9taWNCbnZhU2dNRjRuRmtpYWZCYWJ0RlEyaEJYbGZCTUxnMmliZjg1VmsvMF1dPjwvdXJsPjx0aHVtYiB0eXBlPSIxIj48IVtDREFUQVtodHRwOi8vc3ptbXNucy5xcGljLmNuL21tc25zL1ZFZG9qaWJldmpST056ajFQdTJtSTBqYmliM292bmlieG8xcTJpYm9taWNCbnZhU2dNRjRuRmtpYWZCYWJ0RlEyaEJYbGZCTUxnMmliZjg1VmsvMTUwXV0+PC90aHVtYj48dmlkZW9EdXJhdGlvbj48IVtDREFUQVswLjBdXT48L3ZpZGVvRHVyYXRpb24+PHNpemUgdG90YWxTaXplPSIxMDk5Ny4wIiB3aWR0aD0iMjM0LjAiIGhlaWdodD0iNDQwLjAiPjwvc2l6ZT48L21lZGlhPjwvbWVkaWFMaXN0PjwvQ29udGVudE9iamVjdD48YWN0aW9uSW5mbz48YXBwTXNnPjxtZWRpYVRhZ05hbWU+PC9tZWRpYVRhZ05hbWU+PG1lc3NhZ2VFeHQ+PC9tZXNzYWdlRXh0PjxtZXNzYWdlQWN0aW9uPjwvbWVzc2FnZUFjdGlvbj48L2FwcE1zZz48L2FjdGlvbkluZm8+PGFwcEluZm8+PGlkPjwvaWQ+PC9hcHBJbmZvPjxsb2NhdGlvbiBwb2lDbGFzc2lmeUlkPSIiIHBvaU5hbWU9IiIgcG9pQWRkcmVzcz0iIiBwb2lDbGFzc2lmeVR5cGU9IjAiIGNpdHk9IiI+PC9sb2NhdGlvbj48cHVibGljVXNlck5hbWU+PC9wdWJsaWNVc2VyTmFtZT48c3RyZWFtdmlkZW8+PHN0cmVhbXZpZGVvdXJsPjwvc3RyZWFtdmlkZW91cmw+PHN0cmVhbXZpZGVvdGh1bWJ1cmw+PC9zdHJlYW12aWRlb3RodW1idXJsPjxzdHJlYW12aWRlb3dlYnVybD48L3N0cmVhbXZpZGVvd2VidXJsPjwvc3RyZWFtdmlkZW8+PC9UaW1lbGluZU9iamVjdD4=","iLen":2069},"objectOperations":{"buffer":"CAA=","iLen":2},"preDownloadInfo":{"noPreDownloadRange":"","preDownloadNetType":0,"preDownloadPercent":0},"referId":0,"referUsername":"","snsRedEnvelops":{"reportId":0,"reportKey":0,"resourceId":0,"rewardCount":0},"username":"wxid_uwbxwbt4ihjd22","weAppInfo":{"appId":0,"mapPoiId":"","redirectUrl":"","score":0,"showType":0,"userName":""},"withUserCount":0,"withUserListCount":0},{"blackListCount":0,"commentCount":0,"commentUserListCount":0,"createTime":1625753812,"deleteFlag":0,"extFlag":1,"groupCount":0,"groupUserCount":0,"id":13637811438959997245,"isNotRichText":1,"likeCount":0,"likeFlag":0,"likeUserListCount":0,"nickname":"小张晚安","noChange":0,"objectDesc":{"buffer":"PFRpbWVsaW5lT2JqZWN0PjxpZD48IVtDREFUQVsxMzYzNzgxMTQzODk1OTk5NzI0NV1dPjwvaWQ+PHVzZXJuYW1lPjwhW0NEQVRBW3d4aWRfdXdieHdidDRpaGpkMjJdXT48L3VzZXJuYW1lPjxjcmVhdGVUaW1lPjwhW0NEQVRBWzE2MjU3NTM4MTJdXT48L2NyZWF0ZVRpbWU+PGNvbnRlbnREZXNjU2hvd1R5cGU+MDwvY29udGVudERlc2NTaG93VHlwZT48Y29udGVudERlc2NTY2VuZT4wPC9jb250ZW50RGVzY1NjZW5lPjxwcml2YXRlPjwhW0NEQVRBWzBdXT48L3ByaXZhdGU+PGNvbnRlbnREZXNjPjwhW0NEQVRBW+ivpeatu++8jOi3keS6huW/q+S4pOWFrOmHjOiuoeatpeWZqOaJjeW8gOWni+iuoeaVsO+8jOaIkeivtOaAjuS5iOi3keS6humCo+S5iOS5he+8jOi/mOayoeS4gOWFrOmHjOWSqVvoi6bmtqldW+iLpua2qV3vvIzmi7/lh7rmiYvmnLrkuIDnnIvvvIzmsqHorqHmraXvvIzmraPluLjmg4XlhrXml6nkupTlhazph4zkuoZb5pOm5rGXXVvmk6bmsZddXV0+PC9jb250ZW50RGVzYz48Y29udGVudGF0dHI+PCFbQ0RBVEFbMF1dPjwvY29udGVudGF0dHI+PHNvdXJjZVVzZXJOYW1lPjwvc291cmNlVXNlck5hbWU+PHNvdXJjZU5pY2tOYW1lPjwvc291cmNlTmlja05hbWU+PHN0YXRpc3RpY3NEYXRhPjwvc3RhdGlzdGljc0RhdGE+PHdlYXBwSW5mbz48YXBwVXNlck5hbWU+PC9hcHBVc2VyTmFtZT48cGFnZVBhdGg+PC9wYWdlUGF0aD48dmVyc2lvbj48IVtDREFUQVswXV0+PC92ZXJzaW9uPjxkZWJ1Z01vZGU+PCFbQ0RBVEFbMF1dPjwvZGVidWdNb2RlPjxzaGFyZUFjdGlvbklkPjwvc2hhcmVBY3Rpb25JZD48aXNHYW1lPjwhW0NEQVRBWzBdXT48L2lzR2FtZT48bWVzc2FnZUV4dHJhRGF0YT48L21lc3NhZ2VFeHRyYURhdGE+PHN1YlR5cGU+PCFbQ0RBVEFbMF1dPjwvc3ViVHlwZT48cHJlbG9hZFJlc291cmNlcz48L3ByZWxvYWRSZXNvdXJjZXM+PC93ZWFwcEluZm8+PGNhbnZhc0luZm9YbWw+PC9jYW52YXNJbmZvWG1sPjxDb250ZW50T2JqZWN0Pjxjb250ZW50U3R5bGU+PCFbQ0RBVEFbMV1dPjwvY29udGVudFN0eWxlPjxjb250ZW50U3ViU3R5bGU+PCFbQ0RBVEFbMF1dPjwvY29udGVudFN1YlN0eWxlPjx0aXRsZT48L3RpdGxlPjxkZXNjcmlwdGlvbj48L2Rlc2NyaXB0aW9uPjxjb250ZW50VXJsPjwvY29udGVudFVybD48bWVkaWFMaXN0PjxtZWRpYT48aWQ+PCFbQ0RBVEFbMTM2Mzc4MTE0Mzk0MzkwNjU0MjhdXT48L2lkPjx0eXBlPjwhW0NEQVRBWzJdXT48L3R5cGU+PHRpdGxlPjwvdGl0bGU+PGRlc2NyaXB0aW9uPjwvZGVzY3JpcHRpb24+PHByaXZhdGU+PCFbQ0RBVEFbMF1dPjwvcHJpdmF0ZT48dXJsIHR5cGU9IjEiIG1kNT0iMGFkNGZmNWNjZDBhOWU1ODYxMjE3ODk1N2MwMmIzZTQiPjwhW0NEQVRBW2h0dHA6Ly9zem1tc25zLnFwaWMuY24vbW1zbnMvVkVkb2ppYmV2alJQQ3Y5TTNBbkhTODhuQTRTVTB4VWROMkhSbllqdGlhOEFVUGROR0EyMEQxS0FDd0JNN0VZNjlrT2g2MUZZQ0l2bWcvMF1dPjwvdXJsPjx0aHVtYiB0eXBlPSIxIj48IVtDREFUQVtodHRwOi8vc3ptbXNucy5xcGljLmNuL21tc25zL1ZFZG9qaWJldmpSUEN2OU0zQW5IUzg4bkE0U1UweFVkTjJIUm5ZanRpYThBVVBkTkdBMjBEMUtBQ3dCTTdFWTY5a09oNjFGWUNJdm1nLzE1MF1dPjwvdGh1bWI+PHZpZGVvRHVyYXRpb24+PCFbQ0RBVEFbMC4wXV0+PC92aWRlb0R1cmF0aW9uPjxzaXplIHRvdGFsU2l6ZT0iNzUxODEuMCIgd2lkdGg9Ijk3OC4wIiBoZWlnaHQ9IjExNjQuMCI+PC9zaXplPjwvbWVkaWE+PC9tZWRpYUxpc3Q+PC9Db250ZW50T2JqZWN0PjxhY3Rpb25JbmZvPjxhcHBNc2c+PG1lZGlhVGFnTmFtZT48L21lZGlhVGFnTmFtZT48bWVzc2FnZUV4dD48L21lc3NhZ2VFeHQ+PG1lc3NhZ2VBY3Rpb24+PC9tZXNzYWdlQWN0aW9uPjwvYXBwTXNnPjwvYWN0aW9uSW5mbz48YXBwSW5mbz48aWQ+PC9pZD48L2FwcEluZm8+PGxvY2F0aW9uIHBvaUNsYXNzaWZ5SWQ9IiIgcG9pTmFtZT0iIiBwb2lBZGRyZXNzPSIiIHBvaUNsYXNzaWZ5VHlwZT0iMCIgY2l0eT0iIj48L2xvY2F0aW9uPjxwdWJsaWNVc2VyTmFtZT48L3B1YmxpY1VzZXJOYW1lPjxzdHJlYW12aWRlbz48c3RyZWFtdmlkZW91cmw+PC9zdHJlYW12aWRlb3VybD48c3RyZWFtdmlkZW90aHVtYnVybD48L3N0cmVhbXZpZGVvdGh1bWJ1cmw+PHN0cmVhbXZpZGVvd2VidXJsPjwvc3RyZWFtdmlkZW93ZWJ1cmw+PC9zdHJlYW12aWRlbz48L1RpbWVsaW5lT2JqZWN0Pg==","iLen":2221},"objectOperations":{"buffer":"CAA=","iLen":2},"preDownloadInfo":{"noPreDownloadRange":"","preDownloadNetType":0,"preDownloadPercent":0},"referId":0,"referUsername":"","snsRedEnvelops":{"reportId":0,"reportKey":0,"resourceId":0,"rewardCount":0},"username":"wxid_uwbxwbt4ihjd22","weAppInfo":{"appId":0,"mapPoiId":"","redirectUrl":"","score":0,"showType":0,"userName":""},"withUserCount":0,"withUserListCount":0},{"blackListCount":0,"commentCount":0,"commentUserListCount":0,"createTime":1625569697,"deleteFlag":0,"extFlag":1,"groupCount":0,"groupUserCount":0,"id":13636266972566990992,"isNotRichText":1,"likeCount":0,"likeFlag":0,"likeUserListCount":0,"nickname":"#A02选购助手","noChange":0,"objectDesc":{"buffer":"PFRpbWVsaW5lT2JqZWN0PjxpZD48IVtDREFUQVsxMzYzNjI2Njk3MjU2Njk5MDk5Ml1dPjwvaWQ+PHVzZXJuYW1lPjwhW0NEQVRBW3d4aWRfMHV3YnpnaWxmbWg4MjJdXT48L3VzZXJuYW1lPjxjcmVhdGVUaW1lPjwhW0NEQVRBWzE2MjU1Njk2OTddXT48L2NyZWF0ZVRpbWU+PGNvbnRlbnREZXNjU2hvd1R5cGU+MDwvY29udGVudERlc2NTaG93VHlwZT48Y29udGVudERlc2NTY2VuZT4wPC9jb250ZW50RGVzY1NjZW5lPjxwcml2YXRlPjwhW0NEQVRBWzBdXT48L3ByaXZhdGU+PGNvbnRlbnREZXNjPjwhW0NEQVRBWzQ3LjXlhYU1MOivnei0uSAgOTXlhYUxMDDor53otLlb5pe65p+0XSAK4pSB4pSB5omr56CB5YWF5YC84pSB4pSBCiAgICDkuInnvZHpg73lj6/ku6XvvIzliLDotKblv6tdXT48L2NvbnRlbnREZXNjPjxjb250ZW50YXR0cj48IVtDREFUQVswXV0+PC9jb250ZW50YXR0cj48c291cmNlVXNlck5hbWU+PC9zb3VyY2VVc2VyTmFtZT48c291cmNlTmlja05hbWU+PC9zb3VyY2VOaWNrTmFtZT48c3RhdGlzdGljc0RhdGE+PC9zdGF0aXN0aWNzRGF0YT48d2VhcHBJbmZvPjxhcHBVc2VyTmFtZT48L2FwcFVzZXJOYW1lPjxwYWdlUGF0aD48L3BhZ2VQYXRoPjx2ZXJzaW9uPjwhW0NEQVRBWzBdXT48L3ZlcnNpb24+PGRlYnVnTW9kZT48IVtDREFUQVswXV0+PC9kZWJ1Z01vZGU+PHNoYXJlQWN0aW9uSWQ+PC9zaGFyZUFjdGlvbklkPjxpc0dhbWU+PCFbQ0RBVEFbMF1dPjwvaXNHYW1lPjxtZXNzYWdlRXh0cmFEYXRhPjwvbWVzc2FnZUV4dHJhRGF0YT48c3ViVHlwZT48IVtDREFUQVswXV0+PC9zdWJUeXBlPjxwcmVsb2FkUmVzb3VyY2VzPjwvcHJlbG9hZFJlc291cmNlcz48L3dlYXBwSW5mbz48Y2FudmFzSW5mb1htbD48L2NhbnZhc0luZm9YbWw+PENvbnRlbnRPYmplY3Q+PGNvbnRlbnRTdHlsZT48IVtDREFUQVsxXV0+PC9jb250ZW50U3R5bGU+PGNvbnRlbnRTdWJTdHlsZT48IVtDREFUQVswXV0+PC9jb250ZW50U3ViU3R5bGU+PHRpdGxlPjwvdGl0bGU+PGRlc2NyaXB0aW9uPjwvZGVzY3JpcHRpb24+PGNvbnRlbnRVcmw+PC9jb250ZW50VXJsPjxtZWRpYUxpc3Q+PG1lZGlhPjxpZD48IVtDREFUQVsxMzYzNjI2Njk3MzA0NjEyNDY3OF1dPjwvaWQ+PHR5cGU+PCFbQ0RBVEFbMl1dPjwvdHlwZT48dGl0bGU+PC90aXRsZT48ZGVzY3JpcHRpb24+PC9kZXNjcmlwdGlvbj48cHJpdmF0ZT48IVtDREFUQVswXV0+PC9wcml2YXRlPjx1cmwgbWQ1PSJiNzFjZjEyNDAzNzZlYjc4YzQwNjY0NmQ2NmZiYzY5MiIgdHlwZT0iMSI+PCFbQ0RBVEFbaHR0cDovL3NobW1zbnMucXBpYy5jbi9tbXNucy9qaExkS0Jvb1VIOVdNZW5RRGhXeDZlRmpNMHh4SlhVZW91a2VpY01QTWtrMzl2RjNYaE9SNDRZd1JGUWljTkE1NDZpYWdOU3BIaWM2YzNFLzBdXT48L3VybD48dGh1bWIgdHlwZT0iMSI+PCFbQ0RBVEFbaHR0cDovL3NobW1zbnMucXBpYy5jbi9tbXNucy9qaExkS0Jvb1VIOVdNZW5RRGhXeDZlRmpNMHh4SlhVZW91a2VpY01QTWtrMzl2RjNYaE9SNDRZd1JGUWljTkE1NDZpYWdOU3BIaWM2YzNFLzE1MF1dPjwvdGh1bWI+PHZpZGVvRHVyYXRpb24+PCFbQ0RBVEFbMC4wXV0+PC92aWRlb0R1cmF0aW9uPjxzaXplIGhlaWdodD0iMTkyMC4wIiB3aWR0aD0iMTA4MC4wIiB0b3RhbFNpemU9IjUxMzc0LjAiPjwvc2l6ZT48L21lZGlhPjxtZWRpYT48aWQ+PCFbQ0RBVEFbMTM2MzYyNjY5NzMwNDY2NDg5NjNdXT48L2lkPjx0eXBlPjwhW0NEQVRBWzJdXT48L3R5cGU+PHRpdGxlPjwvdGl0bGU+PGRlc2NyaXB0aW9uPjwvZGVzY3JpcHRpb24+PHByaXZhdGU+PCFbQ0RBVEFbMF1dPjwvcHJpdmF0ZT48dXJsIG1kNT0iNzIxZTY5MzdiMzBiOGUxYmY2MjBmNzY0ZWI4ZDgyYWQiIHR5cGU9IjEiPjwhW0NEQVRBW2h0dHA6Ly9zaG1tc25zLnFwaWMuY24vbW1zbnMvamhMZEtCb29VSDlXTWVuUURoV3g2ZUZqTTB4eEpYVWVEUkRHU2R0TWRVVTRpYkZ3NUpVN3QzaE1EYTlDdEFXQ3lFZWljS1JtMlVrbXcvMF1dPjwvdXJsPjx0aHVtYiB0eXBlPSIxIj48IVtDREFUQVtodHRwOi8vc2htbXNucy5xcGljLmNuL21tc25zL2poTGRLQm9vVUg5V01lblFEaFd4NmVGak0weHhKWFVlRFJER1NkdE1kVVU0aWJGdzVKVTd0M2hNRGE5Q3RBV0N5RWVpY0tSbTJVa213LzE1MF1dPjwvdGh1bWI+PHZpZGVvRHVyYXRpb24+PCFbQ0RBVEFbMC4wXV0+PC92aWRlb0R1cmF0aW9uPjxzaXplIGhlaWdodD0iMjM0MC4wIiB3aWR0aD0iMTA4MC4wIiB0b3RhbFNpemU9Ijc2Mzc4LjAiPjwvc2l6ZT48L21lZGlhPjwvbWVkaWFMaXN0PjwvQ29udGVudE9iamVjdD48YWN0aW9uSW5mbz48YXBwTXNnPjxtZWRpYVRhZ05hbWU+PC9tZWRpYVRhZ05hbWU+PG1lc3NhZ2VFeHQ+PC9tZXNzYWdlRXh0PjxtZXNzYWdlQWN0aW9uPjwvbWVzc2FnZUFjdGlvbj48L2FwcE1zZz48L2FjdGlvbkluZm8+PGFwcEluZm8+PGlkPjwvaWQ+PC9hcHBJbmZvPjxsb2NhdGlvbiBwb2lDbGFzc2lmeUlkPSIiIHBvaU5hbWU9IiIgcG9pQWRkcmVzcz0iIiBwb2lDbGFzc2lmeVR5cGU9IjAiIGNpdHk9IiI+PC9sb2NhdGlvbj48cHVibGljVXNlck5hbWU+PC9wdWJsaWNVc2VyTmFtZT48c3RyZWFtdmlkZW8+PHN0cmVhbXZpZGVvdXJsPjwvc3RyZWFtdmlkZW91cmw+PHN0cmVhbXZpZGVvdGh1bWJ1cmw+PC9zdHJlYW12aWRlb3RodW1idXJsPjxzdHJlYW12aWRlb3dlYnVybD48L3N0cmVhbXZpZGVvd2VidXJsPjwvc3RyZWFtdmlkZW8+PC9UaW1lbGluZU9iamVjdD4=","iLen":2717},"objectOperations":{"buffer":"CAA=","iLen":2},"preDownloadInfo":{"noPreDownloadRange":"","preDownloadNetType":0,"preDownloadPercent":0},"referId":0,"referUsername":"","snsRedEnvelops":{"reportId":0,"reportKey":0,"resourceId":0,"rewardCount":0},"username":"wxid_0uwbzgilfmh822","weAppInfo":{"appId":0,"mapPoiId":"","redirectUrl":"","score":0,"showType":0,"userName":""},"withUserCount":0,"withUserListCount":0}],"recCount":0,"serverConfig":{"copyAndPasteWordLimit":100,"postMentionLimit":10},"session":{"buffer":"CIS65YcGEAEY6uHUgq2lv7K9ASDq4dSCraW/sr0BMIS65YcGSk8I/rLN8KwvEAoYhLrlhwYiIgjjrpTrop7C27wBEAQYBCDq4dSCraW/sr0BKIS65YcGMAEqGgjq4dSCraW/sr0BEJDh/JGEkvCevQEYCiABUIS65YcGYIS65YcG","iLen":129}},"type":11145}
#endregion
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
if (user == null)
return;
var client = WechatClient.GetApi(user) as Wechat_Xiaoxie;
if (!user.IsGetCircle) return;
try
{
//var _data = json.ContainsKey("data") ? json["data"] as Dictionary<string, object> : null;
//if (_data == null) return;
//foreach (KeyValuePair<string, object> item in _data)
//{
// var wxid = item["wxid"]?.ToString();
//}
//for (int i = 0; i < _data.Count; i++)
//{
// var item = _data[i] as Dictionary<string, object>;
// var wxid = item["wxid"]?.ToString();
//}
user.CircleData = recvData;
}
catch (Exception ex)
{ }
finally
{
user.IsGetCircle = false;
}
}
break;
case MsgType.MT_SNS_AUTO_AUTH_MINIAPP_LOGIN://小程序自动授权登录
{
//{"data":{"appid":"wxde8ac0a21135c07d","code":"051QFNkl2pCwt748wlol2XID1B4QFNk8"},"type":11136}
var appid = data["appid"].ToString();
var code = data["code"].ToString();
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
if (user == null)
return;
if (user.AutoAuthLoginMiNiApps.ContainsKey(appid))
user.AutoAuthLoginMiNiApps.Remove(appid);
user.AutoAuthLoginMiNiApps.Add(appid, code);
}
break;
case MsgType.MT_SNS_POST_MSG://发送朋友圈
{
#region
/*
{"data":{"baseResponse":{"ret":0},"snsObject":{"blackListCount":0,"commentCount":0,"commentUserListCount":0,"createTime":1627522835,"deleteFlag":0,"extFlag":1,"groupCount":0,"groupUserCount":0,"id":13652651078544265545,"isNotRichText":0,"likeCount":0,"likeFlag":0,"likeUserListCount":0,"nickname":"、","noChange":0,"objectDesc":{"buffer":"PFRpbWVsaW5lT2JqZWN0PjxpZD4xMzY1MjY1MTA3ODU0NDI2NTU0NTwvaWQ+PHVzZXJuYW1lPnd4aWRfdnY3cmV2N2E0eHBqMjI8L3VzZXJuYW1lPjxjcmVhdGVUaW1lPjE2Mjc1MjI4MzU8L2NyZWF0ZVRpbWU+PGNvbnRlbnREZXNjU2hvd1R5cGU+MDwvY29udGVudERlc2NTaG93VHlwZT48Y29udGVudERlc2NTY2VuZT4zPC9jb250ZW50RGVzY1NjZW5lPjxwcml2YXRlPjA8L3ByaXZhdGU+PGNvbnRlbnREZXNjPui/meS4quS9oOiCr+WumuS4jeefpemBk+aIkeeOsOWcqOaDs+eahEE8L2NvbnRlbnREZXNjPjxzaWdodEZvbGRlZD4wPC9zaWdodEZvbGRlZD48c2hvd0ZsYWc+MDwvc2hvd0ZsYWc+PGFwcEluZm8+PGlkPjwvaWQ+PHZlcnNpb24+PC92ZXJzaW9uPjxhcHBOYW1lPjwvYXBwTmFtZT48aW5zdGFsbFVybD48L2luc3RhbGxVcmw+PGZyb21Vcmw+PC9mcm9tVXJsPjxpc0ZvcmNlVXBkYXRlPjA8L2lzRm9yY2VVcGRhdGU+PC9hcHBJbmZvPjxzb3VyY2VVc2VyTmFtZT48L3NvdXJjZVVzZXJOYW1lPjxzb3VyY2VOaWNrTmFtZT48L3NvdXJjZU5pY2tOYW1lPjxzdGF0aXN0aWNzRGF0YT48L3N0YXRpc3RpY3NEYXRhPjxzdGF0RXh0U3RyPjwvc3RhdEV4dFN0cj48Q29udGVudE9iamVjdD48Y29udGVudFN0eWxlPjI8L2NvbnRlbnRTdHlsZT48dGl0bGU+PC90aXRsZT48ZGVzY3JpcHRpb24+PC9kZXNjcmlwdGlvbj48bWVkaWFMaXN0PjwvbWVkaWFMaXN0Pjxjb250ZW50VXJsPjwvY29udGVudFVybD48L0NvbnRlbnRPYmplY3Q+PGFjdGlvbkluZm8+PGFwcE1zZz48bWVzc2FnZUFjdGlvbj48L21lc3NhZ2VBY3Rpb24+PC9hcHBNc2c+PC9hY3Rpb25JbmZvPjxsb2NhdGlvbiBwb2lDbGFzc2lmeUlkPSIiIHBvaU5hbWU9IiIgcG9pQWRkcmVzcz0iIiBwb2lDbGFzc2lmeVR5cGU9IjAiIGNpdHk9IiI+PC9sb2NhdGlvbj48cHVibGljVXNlck5hbWU+PC9wdWJsaWNVc2VyTmFtZT48c3RyZWFtdmlkZW8+PHN0cmVhbXZpZGVvdXJsPjwvc3RyZWFtdmlkZW91cmw+PHN0cmVhbXZpZGVvdGh1bWJ1cmw+PC9zdHJlYW12aWRlb3RodW1idXJsPjxzdHJlYW12aWRlb3dlYnVybD48L3N0cmVhbXZpZGVvd2VidXJsPjwvc3RyZWFtdmlkZW8+PC9UaW1lbGluZU9iamVjdD4=","iLen":1112},"objectOperations":{"buffer":"","iLen":0},"preDownloadInfo":{"noPreDownloadRange":"","preDownloadNetType":0,"preDownloadPercent":0},"referId":0,"referUsername":"","snsRedEnvelops":{"reportId":0,"reportKey":0,"resourceId":0,"rewardCount":0},"username":"wxid_vv7rev7a4xpj22","weAppInfo":{"appId":0,"mapPoiId":"","redirectUrl":"","score":0,"showType":0,"userName":""},"withUserCount":0,"withUserListCount":0},"spamTips":""},"type":11148}
*/
#endregion
if (data.ContainsKey("snsObject"))
{
var snsObject = data["snsObject"] as Dictionary<string, object>;
if (snsObject.ContainsKey("id"))
{
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
if (user == null)
return;
user.SendCircleId = snsObject["id"].ToString();
}
}
}
break;
case MsgType.MT_SNS_COMMENT_MSG://朋友圈评论
{
}
break;
case MsgType.MT_SNS_LIKE_MSG://朋友圈点赞
{
}
break;
case MsgType.MT_SNS_UPLOAD_IMAGE_MSG://朋友圈上传图片
{
//{"data":{"baseResponse":{"ret":0},"bufferUrl":{"type":1,"url":"http://mmsns.qpic.cn/mmsns/PiajxSqBRaELvAyQVFmJhGxEyianCKF1vsqwWh9GicmTGYkibHF8s3Pu0RAQNicdgRVsn/0"},"clientId":"wxid_vv7rev7a4xpj22_1627486860","id":0,"path":"D:\\PCRobot\\bin\\Debug\\Cache\\0728114016639.png","startPos":16627,"thumbUrlCount":1,"thumbUrls":[{"type":1,"url":"http://mmsns.qpic.cn/mmsns/PiajxSqBRaELvAyQVFmJhGxEyianCKF1vsqwWh9GicmTGYkibHF8s3Pu0RAQNicdgRVsn/150"}],"totalLen":16627,"type":2},"type":11149}
//{"data":{"baseResponse":{"ret":0},"bufferUrl":{"type":1,"url":"http://mmsns.qpic.cn/mmsns/PiajxSqBRaELvAyQVFmJhGxEyianCKF1vsqwWh9GicmTGa9quIRWhDvpnuvgkSLwxaz/0"},"clientId":"wxid_vv7rev7a4xpj22_1627491212","id":0,"path":"","startPos":59023,"thumbUrlCount":1,"thumbUrls":[{"type":1,"url":"http://mmsns.qpic.cn/mmsns/PiajxSqBRaELvAyQVFmJhGxEyianCKF1vsqwWh9GicmTGa9quIRWhDvpnuvgkSLwxaz/150"}],"totalLen":59023,"type":2},"type":11149}
//{"data":{"baseResponse":{"ret":0},"bufferUrl":{"type":1,"url":"http://mmsns.qpic.cn/mmsns/PiajxSqBRaELvAyQVFmJhGytHnYnRDfnZ3JnOPBfd4kopkfT9Kic2vlQibkXia04Zweib/0"},"clientId":"wxid_vv7rev7a4xpj22_1627523859","id":0,"path":"D:\\公司项目\\fl_system\\PCRobot\\bin\\Debug\\Cache\\0729095735481.jpg","startPos":47326,"thumbUrlCount":1,"thumbUrls":[{"type":1,"url":"http://mmsns.qpic.cn/mmsns/PiajxSqBRaELvAyQVFmJhGytHnYnRDfnZ3JnOPBfd4kopkfT9Kic2vlQibkXia04Zweib/150"}],"totalLen":47326,"type":2},"type":11149}
LogHelper.GetSingleObj().Info(new StackTrace().GetFrame(0).GetMethod().Name, $"正在上传朋友圈图片:" + recvData);
var upLoadImage = JsonConvert.DeserializeObject<UpLoadImage>(recvData);
if (upLoadImage != null)
{
if (upLoadImage.data.startPos == upLoadImage.data.totalLen)
{
var path = upLoadImage.data.path;
var url = upLoadImage.data.bufferUrl.url;
if (!string.IsNullOrWhiteSpace(path) && !string.IsNullOrWhiteSpace(url))
{
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
if (user == null)
return;
if (user.UpLoadImages.ContainsKey(path))
user.UpLoadImages.Remove(path);
user.UpLoadImages.Add(path, url);
}
else
{
}
}
}
}
break;
case MsgType.MT_SNS_TIMELINE_USER_MSG://获取指定用户的朋友圈
{
#region
/*
{"data":{"baseResponse":{"ret":207},"continueId":0,"firstPageMd5":"b7e1f61580104448","limitedId":0,"newRequestTime":1627613128,"objectCount":1,"objectCountForSameMd5":1,"objectList":[{"blackListCount":0,"commentCount":0,"commentUserListCount":0,"createTime":1627612789,"deleteFlag":0,"extFlag":1,"groupCount":0,"groupUserCount":0,"id":13653405663930290388,"isNotRichText":1,"likeCount":0,"likeFlag":0,"likeUserListCount":0,"nickname":"先森吳","noChange":0,"objectDesc":{"buffer":"PFRpbWVsaW5lT2JqZWN0PjxpZD48IVtDREFUQVsxMzY1MzQwNTY2MzkzMDI5MDM4OF1dPjwvaWQ+PHVzZXJuYW1lPjwhW0NEQVRBW3d1amlhaHVhMDg3Nl1dPjwvdXNlcm5hbWU+PGNyZWF0ZVRpbWU+PCFbQ0RBVEFbMTYyNzYxMjc4OV1dPjwvY3JlYXRlVGltZT48Y29udGVudERlc2NTaG93VHlwZT4wPC9jb250ZW50RGVzY1Nob3dUeXBlPjxjb250ZW50RGVzY1NjZW5lPjA8L2NvbnRlbnREZXNjU2NlbmU+PHByaXZhdGU+PCFbQ0RBVEFbMF1dPjwvcHJpdmF0ZT48Y29udGVudERlc2M+PCFbQ0RBVEFb5L2g6IKv5a6a5LiN55+l6YGT5oiR546w5Zyo5oOz6KGo6L6+5LuA5LmIXV0+PC9jb250ZW50RGVzYz48Y29udGVudGF0dHI+PCFbQ0RBVEFbMF1dPjwvY29udGVudGF0dHI+PHNvdXJjZVVzZXJOYW1lPjwvc291cmNlVXNlck5hbWU+PHNvdXJjZU5pY2tOYW1lPjwvc291cmNlTmlja05hbWU+PHN0YXRpc3RpY3NEYXRhPjwvc3RhdGlzdGljc0RhdGE+PHdlYXBwSW5mbz48YXBwVXNlck5hbWU+PC9hcHBVc2VyTmFtZT48cGFnZVBhdGg+PC9wYWdlUGF0aD48dmVyc2lvbj48IVtDREFUQVswXV0+PC92ZXJzaW9uPjxkZWJ1Z01vZGU+PCFbQ0RBVEFbMF1dPjwvZGVidWdNb2RlPjxzaGFyZUFjdGlvbklkPjwvc2hhcmVBY3Rpb25JZD48aXNHYW1lPjwhW0NEQVRBWzBdXT48L2lzR2FtZT48bWVzc2FnZUV4dHJhRGF0YT48L21lc3NhZ2VFeHRyYURhdGE+PHN1YlR5cGU+PCFbQ0RBVEFbMF1dPjwvc3ViVHlwZT48cHJlbG9hZFJlc291cmNlcz48L3ByZWxvYWRSZXNvdXJjZXM+PC93ZWFwcEluZm8+PGNhbnZhc0luZm9YbWw+PC9jYW52YXNJbmZvWG1sPjxDb250ZW50T2JqZWN0Pjxjb250ZW50U3R5bGU+PCFbQ0RBVEFbMV1dPjwvY29udGVudFN0eWxlPjxjb250ZW50U3ViU3R5bGU+PCFbQ0RBVEFbMF1dPjwvY29udGVudFN1YlN0eWxlPjx0aXRsZT48L3RpdGxlPjxkZXNjcmlwdGlvbj48L2Rlc2NyaXB0aW9uPjxjb250ZW50VXJsPjwvY29udGVudFVybD48bWVkaWFMaXN0PjxtZWRpYT48aWQ+PCFbQ0RBVEFbMTM2NTM0MDU2NjQ1NTkyMzkzODZdXT48L2lkPjx0eXBlPjwhW0NEQVRBWzJdXT48L3R5cGU+PHRpdGxlPjwvdGl0bGU+PGRlc2NyaXB0aW9uPjwvZGVzY3JpcHRpb24+PHByaXZhdGU+PCFbQ0RBVEFbMF1dPjwvcHJpdmF0ZT48dXJsIHR5cGU9IjEiIG1kNT0iNDI1YTRiODEyNjQ2NzQwY2Y3MzlmYWI4Y2E2ZGIyNWUiPjwhW0NEQVRBW2h0dHA6Ly9zaG1tc25zLnFwaWMuY24vbW1zbnMvaWNySERtdkRpYjB4bUhUbkFPODJKSVVjaDFUVmUySWFtbDdYWHdaSlVuUWpZU3dsSjVNa09iQXlYRkpUbVNTbk5DZmNITFgyNE9RUncvMF1dPjwvdXJsPjx0aHVtYiB0eXBlPSIxIj48IVtDREFUQVtodHRwOi8vc2htbXNucy5xcGljLmNuL21tc25zL2ljckhEbXZEaWIweG1IVG5BTzgySklVY2gxVFZlMklhbWw3WFh3WkpVblFqWVN3bEo1TWtPYkF5WEZKVG1TU25OQ2ZjSExYMjRPUVJ3LzE1MF1dPjwvdGh1bWI+PHZpZGVvRHVyYXRpb24+PCFbQ0RBVEFbMC4wXV0+PC92aWRlb0R1cmF0aW9uPjxzaXplIHRvdGFsU2l6ZT0iMTAxOTIuMCIgd2lkdGg9IjEwODAuMCIgaGVpZ2h0PSIyMzQwLjAiPjwvc2l6ZT48L21lZGlhPjwvbWVkaWFMaXN0PjwvQ29udGVudE9iamVjdD48YWN0aW9uSW5mbz48YXBwTXNnPjxtZWRpYVRhZ05hbWU+PC9tZWRpYVRhZ05hbWU+PG1lc3NhZ2VFeHQ+PC9tZXNzYWdlRXh0PjxtZXNzYWdlQWN0aW9uPjwvbWVzc2FnZUFjdGlvbj48L2FwcE1zZz48L2FjdGlvbkluZm8+PGFwcEluZm8+PGlkPjwvaWQ+PC9hcHBJbmZvPjxsb2NhdGlvbiBwb2lDbGFzc2lmeUlkPSIiIHBvaU5hbWU9IiIgcG9pQWRkcmVzcz0iIiBwb2lDbGFzc2lmeVR5cGU9IjAiIGNpdHk9IiI+PC9sb2NhdGlvbj48cHVibGljVXNlck5hbWU+PC9wdWJsaWNVc2VyTmFtZT48c3RyZWFtdmlkZW8+PHN0cmVhbXZpZGVvdXJsPjwvc3RyZWFtdmlkZW91cmw+PHN0cmVhbXZpZGVvdGh1bWJ1cmw+PC9zdHJlYW12aWRlb3RodW1idXJsPjxzdHJlYW12aWRlb3dlYnVybD48L3N0cmVhbXZpZGVvd2VidXJsPjwvc3RyZWFtdmlkZW8+PC9UaW1lbGluZU9iamVjdD4=","iLen":2060},"objectOperations":{"buffer":"CAA=","iLen":2},"preDownloadInfo":{"noPreDownloadRange":"","preDownloadNetType":0,"preDownloadPercent":0},"referId":0,"referUsername":"","snsRedEnvelops":{"reportId":0,"reportKey":0,"resourceId":0,"rewardCount":0},"username":"wujiahua0876","weAppInfo":{"appId":0,"mapPoiId":"","redirectUrl":"","score":0,"showType":0,"userName":""},"withUserCount":0,"withUserListCount":0}],"objectTotalCount":5,"retTips":"朋友仅展示最近一个月的朋友圈","serverConfig":{"copyAndPasteWordLimit":100,"postMentionLimit":10},"snsUserInfo":{"snsBgImgId":"http://szmmsns.qpic.cn/mmsns/icrHDmvDib0xnEAtnSHHGziac6GNMlhWZK61YORztv9pl7x3AeNWibkAcdJstckibqwBFVFcFO9ovscc/0","snsBgObjectId":13404086805597261983,"snsFlag":1,"snsFlagEx":6273}},"type":11150}
*/
#endregion
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
if (user == null)
return;
if (data.ContainsKey("objectList"))
{
var objectList = data["objectList"] as ArrayList;
if (objectList != null && objectList.Count != 0)
{
var result = objectList[0] as Dictionary<string, object>;
if (result != null)
{
if (result.ContainsKey("username"))
{
var uname = result["username"].ToString();
if (user.GetUserCircles.ContainsKey(uname))
user.GetUserCircles.Remove(uname);
user.GetUserCircles.Add(uname, recvData);
}
}
}
}
}
break;
default:
break;
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
});
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 本地解密dat图片
/// </summary>
/// <param name="FileName"></param>
/// <param name="XorKey"></param>
/// <returns></returns>
public static string DecodeImage(string FileName, byte XorKey, string DecodeImagePath)
{
var data = File.ReadAllBytes(FileName);
for (int i = 0; i < data.Length; i++)
data[i] = Convert.ToByte(data[i] ^ XorKey);
//var path = FileName.Replace(Path.GetFileName(FileName), Path.GetFileNameWithoutExtension(FileName) + ".jpg");
File.WriteAllBytes(DecodeImagePath, data);
return DecodeImagePath;
}
/// <summary>
/// 获取微信的uin的值
/// </summary>
/// <param name="pid"></param>
/// <returns></returns>
public static string GetUin(int pid)
{
try
{
Process[] processes = Process.GetProcesses();
foreach (Process process in processes)
{
if (process.Id == pid)
{
foreach (ProcessModule processModule in process.Modules)
{
if (processModule.ModuleName == "WeChatWin.dll")
{
//微信基址
var WeChatWinBaseAddress = processModule.BaseAddress;
//Console.WriteLine("微信基址:\t" + "0x" + ((int)(processModule.BaseAddress)).ToString("X8") + Environment.NewLine);
var WxNameAddress = WeChatWinBaseAddress + PcOffSet;
var uinStr = Common.GetString(process.Handle, WxNameAddress, 4);
Console.WriteLine($"uinStr = {uinStr}");
return uinStr;
}
}
break;
}
}
}
catch (Exception)
{ }
return string.Empty;
}
// 关闭回调
static void WxCloseCallback(uint dwClientId)
{
try
{
var v = WechatClient.Users.FirstOrDefault(f => f.Value.DwClientId == dwClientId && f.Value.Type == WechatType.Xiaoxie).Value;
if (v != null)
{
LogHelper.GetSingleObj().Info("系统", $"WxCloseCallback关闭回调,Uin:{v.Uin},微信:{v.Nickname}({v.Wxid})");
WechatClient.RemoveUser(v);
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
#endregion
public Wechat_Xiaoxie(WechatUser User) : base(User) { }
public override void SendMessage(string wxid, string message)
{
try
{
var json = string.Empty;
message = message.Replace("\r\n", "\n");
if (Common.isXML(message))
{
//var msgs = Regex.Matches(message, "(<.*?>)(.*?)(</.*?>)");
//foreach (Match item in msgs)
//{
// if (item.Success && !string.IsNullOrEmpty(item.Groups[2].Value) && !item.Groups[2].Value.StartsWith("<![CDATA["))
// {
// var temp = item.Groups[1].Value + "<![CDATA["+item.Groups[2]+"]]>" + item.Groups[3];
// message = message.Replace(item.Groups[1].Value,temp);
// }
//}
//<appid>wxfedd75bfcbbcd58c</appid>
//<appid>wx13e41a437b8a1d2e</appid>
//<pagepath>pages/index/index.html?orderid=[领取地址]</pagepath>
if (Regex.IsMatch(message, @"<appid>(?<appid>[^<]+)</appid>") || Regex.IsMatch(message, @"<pagepath>(.+?)</pagepath>"))
json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_XMLMSG, data = new { to_wxid = wxid, xml = Common.XMLDispose(message.Replace("&amp;", "&")) } });
else
{
message = message.Replace("&amp;", "&");
var title = string.Empty;
var desc = string.Empty;
var url = string.Empty;
var image_url = string.Empty;
var reg = Regex.Match(message, @"<title>(?<标题>[\w\W]+?)</title>");
if (reg.Success) title = reg.Groups["标题"].Value;
reg = Regex.Match(message, @"<des>(?<介绍>[\w\W]+?)</des>");
if (reg.Success) desc = reg.Groups["介绍"].Value;
reg = Regex.Match(message, @"<url>(?<链接>[\w\W]+?)</url>");
if (reg.Success) url = reg.Groups["链接"].Value;
reg = Regex.Match(message, @"<thumburl>(?<图片链接>[\w\W]+?)</thumburl>");
if (reg.Success) image_url = reg.Groups["图片链接"].Value;
json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_LINKMSG, data = new { to_wxid = wxid, title = $"{title.XMLReplace()}", desc = $"{desc.XMLReplace()}", url = url.XMLReplace(), image_url = image_url.XMLReplace() } });
}
}
else
{
var atUsername = new List<string>();
var regs = Regex.Matches(message, @"\[@([^\]]+?)\]");
var flag = true;
if (wxid.Contains("@chatroom"))
{
//[@wujiahua0876]你懂得,我只是测试一下
foreach (Match item in regs)
{
atUsername.Add(item.Groups[1].Value.Trim());
}
if (atUsername.Count != 0)
{
flag = false;
message = Regex.Replace(message, @"(\[@[^\]]+?\])", "{$@}");
json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_CHATROOM_ATMSG, data = new { to_wxid = wxid, content = message, at_list = atUsername.ToArray() } });
}
}
if (flag)
{
message = Regex.Replace(message, @"(\[@[^\]]+?\])", "");
json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_TEXTMSG, data = new { to_wxid = wxid, content = message } });
}
}
SendWeChatData(User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 获取朋友圈
/// </summary>
/// <param name="circleId"></param>
public override void FindCircles(string circleId, string username)
{
try
{
if (!string.IsNullOrWhiteSpace(username))
{
#region
try
{
if (!User.GetUserCircles.ContainsKey(username))
{
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SNS_TIMELINE_USER_MSG, data = new { username = username, first_page_md5 = "", max_id = circleId } });
SendWeChatData(User.DwClientId, json);
}
var result = Task.Factory.StartNew<string>(delegate ()
{
DateTime end_time = DateTime.Now.AddSeconds(30);
do
{
if (User.GetUserCircles.ContainsKey(username))
{
var res = User.GetUserCircles[username];
#region
var jsonDic = HttpExtend.JsonToDictionary(res);
var data = jsonDic["data"] as Dictionary<string, object>;
//var firstPageMd5 = data["firstPageMd5"].ToString();
//var data = new { FirFirstPageMd5 = firstPageMd5, SnsObjectsCount = long.Parse(HttpExtend.GetTimeStamp()), };
var cirCleInfoOriList = new List<CirCleInfoOri>();
if (data.ContainsKey("objectList"))
{
var objectList = data["objectList"] as ArrayList;
if (objectList != null && objectList.Count != 0)
{
for (int i = 0; i < objectList.Count; i++)
{
var obj = JsonConvert.SerializeObject(objectList[i]);
if (obj != null)
{
var cInfo = JsonConvert.DeserializeObject<CirCleInfoOri>(obj);
if (cInfo != null)
{
cirCleInfoOriList.Add(cInfo);
}
}
}
cirCleInfoOriList = cirCleInfoOriList.OrderByDescending(f => f.createTime).ToList();
List<Dictionary<string, object>> _objs = new List<Dictionary<string, object>>();
for (int i = 0; i < cirCleInfoOriList.Count; i++)
{
var tmp = HttpHelper.ObjectToJson(cirCleInfoOriList[i]);
var dic = HttpExtend.JsonToDictionary(tmp);
_objs.Add(dic);
}
}
}
#endregion
if (cirCleInfoOriList != null && cirCleInfoOriList.Count != 0)
return HttpHelper.ObjectToJson(new { data = new { objectList = new List<CirCleInfoOri>() { cirCleInfoOriList[0] } } });
return string.Empty;
}
Thread.Sleep(400);
} while (end_time > DateTime.Now);
return null;
}).Result;
var socketClient = EasySoc.GetSocket();
var msg = new CommonResult();
msg.RobotUsername = User.Wxid;
msg.RobotUsernick = User.Nickname;
msg.RobotType = RobotType.;
msg.MsgId = ServerMsgID;
msg.Cmd = PCRobotCMD.rcvCircleData;
msg.Data = result;
socketClient.Send(msg);
}
catch (Exception ex)
{
throw ex;
}
finally
{
User.GetUserCircles.Remove(username);
}
#endregion
}
else
{
#region
if (!User.IsGetCircle)
{
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SNS_TIMELINE_MSG, data = new { max_id = circleId } });
SendWeChatData(User.DwClientId, json);
User.IsGetCircle = true;
}
var result = Task.Factory.StartNew<string>(delegate ()
{
Thread.Sleep(1000);
DateTime end_time = DateTime.Now.AddSeconds(30);
do
{
if (!User.IsGetCircle)
{
return User.CircleData;
}
Thread.Sleep(200);
} while (end_time > DateTime.Now);
return null;
}).Result;
var socketClient = EasySoc.GetSocket();
var msg = new CommonResult();
msg.RobotUsername = User.Wxid;
msg.RobotUsernick = User.Nickname;
msg.RobotType = RobotType.;
msg.MsgId = ServerMsgID;
msg.Cmd = PCRobotCMD.rcvCircleData;
msg.Data = result;
socketClient.Send(msg);
#endregion
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 自动授权登录小程序
/// </summary>
/// <param name="appid"></param>
public override void AutoAuthMiniAPPLogin(string appid)
{
try
{
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SNS_AUTO_AUTH_MINIAPP_LOGIN, data = new { appid = appid } });
SendWeChatData(User.DwClientId, json);
var result = Task.Factory.StartNew<string>(delegate ()
{
DateTime end_time = DateTime.Now.AddSeconds(20);
do
{
if (User.AutoAuthLoginMiNiApps.ContainsKey(appid))
{
return User.AutoAuthLoginMiNiApps[appid];
}
Thread.Sleep(400);
} while (end_time > DateTime.Now);
return null;
}).Result;
var socketClient = EasySoc.GetSocket();
var msg = new CommonResult();
msg.RobotUsername = User.Wxid;
msg.RobotUsernick = User.Nickname;
msg.RobotType = RobotType.;
msg.MsgId = ServerMsgID;
msg.Cmd = PCRobotCMD.rcvMiniAppCode;
msg.Data = result;
socketClient.Send(msg);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 发送朋友圈
/// </summary>
/// <param name="xmlmsg"></param>
public override void SendCircle(string xmlmsg)
{
try
{
var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_SNS_POST_MSG, data = new { object_desc = xmlmsg } });
User.SendCircleId = string.Empty;
SendWeChatData(User.DwClientId, json);
var result = Task.Factory.StartNew<string>(delegate ()
{
DateTime end_time = DateTime.Now.AddSeconds(20);
do
{
if (!string.IsNullOrWhiteSpace(User.SendCircleId))
{
return User.SendCircleId;
}
Thread.Sleep(400);
} while (end_time > DateTime.Now);
return null;
}).Result;
var socketClient = EasySoc.GetSocket();
var msg = new CommonResult();
msg.RobotUsername = User.Wxid;
msg.RobotUsernick = User.Nickname;
msg.RobotType = RobotType.;
msg.MsgId = ServerMsgID;
msg.Cmd = PCRobotCMD.rcvCircleReturnId;
msg.Data = result;
socketClient.Send(msg);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
finally
{
User.SendCircleId = string.Empty;
}
}
/// <summary>
/// 发送朋友圈评论
/// </summary>
/// <param name="circleId"></param>
/// <param name="content"></param>
public override void SendCircleComment(string circleId, string content)
{
try
{
var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_SNS_COMMENT_MSG, data = new { object_id = circleId, content = content } });
SendWeChatData(User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 朋友圈点赞
/// </summary>
/// <param name="circleId">朋友圈的object_id</param>
public override void SendCirclePraise(string circleId)
{
try
{
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SNS_LIKE_MSG, data = new { object_id = circleId } });
SendWeChatData(User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 朋友圈上传本地图片,返回上传以后返回的地址
/// </summary>
/// <param name="path"></param>
public override void CircleUpLoadImage(string data)
{
try
{
var path = string.Empty;
Bitmap bitmap = null;
if (data.StartsWith("http", StringComparison.CurrentCultureIgnoreCase))
{
HttpHelper http = new HttpHelper();
var item = http.GetItem(data);
item.ResultType = CsharpHttpHelper.Enum.ResultType.Byte;
using (MemoryStream ms = new MemoryStream(http.GetHtml(item).ResultByte))
{
using (Image mImage = Image.FromStream(ms, true))
{
bitmap = new Bitmap(mImage);
path = HttpExtend.MapFile($@"{DateTime.Now.ToString("MMddhhmmssfff")}.{Common.GetImageExt(bitmap)}", @"Cache\IMAGE");
bitmap.Save(path);
bitmap.Dispose();
}
}
}
else
{
bitmap = Common.ConvertBase64ToImage(data);
using (MemoryStream stream = new MemoryStream())
{
bitmap.Save(stream, ImageFormat.Jpeg);
byte[] data1 = new byte[stream.Length];
stream.Seek(0, SeekOrigin.Begin);
stream.Read(data1, 0, Convert.ToInt32(stream.Length));
bitmap = Common.CompressionImage(new MemoryStream(data1), 25);
}
path = HttpExtend.MapFile($@"{DateTime.Now.ToString("MMddhhmmssfff")}.{Common.GetImageExt(bitmap)}", @"Cache\IMAGE");
bitmap.Save(path);
bitmap.Dispose();
}
if (!string.IsNullOrWhiteSpace(path) && File.Exists(path))
{
LogHelper.GetSingleObj().Info(new StackTrace().GetFrame(0).GetMethod().Name, $"开始上传朋友圈图片:" + path);
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SNS_UPLOAD_IMAGE_MSG, data = new { path = path } });
SendWeChatData(User.DwClientId, json);
var result = Task.Factory.StartNew<string>(delegate ()
{
DateTime end_time = DateTime.Now.AddSeconds(60);
do
{
if (User.UpLoadImages.ContainsKey(path))
{
return User.UpLoadImages[path];
}
Thread.Sleep(400);
} while (end_time > DateTime.Now);
return null;
}).Result;
var socketClient = EasySoc.GetSocket();
var msg = new CommonResult();
msg.RobotUsername = User.Wxid;
msg.RobotUsernick = User.Nickname;
msg.RobotType = RobotType.;
msg.MsgId = ServerMsgID;
msg.Cmd = PCRobotCMD.rcvCircleUploadImageUrl;
msg.Data = result;
socketClient.Send(msg);
}
else
{ }
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, $"上传朋友圈图片异常:{ex.Message},{ex.StackTrace}");
}
}
public override void SendFile(string wxid, string file)
{
try
{
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_FILEMSG, data = new { to_wxid = wxid, file = file } });
SendWeChatData(User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
public override void SendImage(string wxid, string file)
{
try
{
if (file.StartsWith("http", StringComparison.InvariantCultureIgnoreCase))
{
byte[] ImangByte = null;
string extension = Path.GetExtension(file);
extension = string.IsNullOrWhiteSpace(extension) ? ".jpg" : extension;
ImangByte = new System.Net.WebClient().DownloadData(file);
byte[] imageHash = new MD5CryptoServiceProvider().ComputeHash(ImangByte);
var path = Common.CacheFilePath(User.Wxid, wxid, "IMAGE", Guid.NewGuid().ToString("N"), extension);
if (!File.Exists(path))
{
File.WriteAllBytes(path, ImangByte);
}
if (File.Exists(path))
file = path;
}
else
{
if (!File.Exists(file))
{
if (Common.IsBase64(file))
{
var path = Common.CacheFilePath(User.Wxid, wxid, "IMAGE", Guid.NewGuid().ToString("N"), "jpg");
if (Common.Base64ToFileAndSave(file, path) && File.Exists(path))
{
file = path;
}
}
else
{ }
}
}
var json = string.Empty;
if (file.Trim().EndsWith(".gif", StringComparison.CurrentCultureIgnoreCase))
json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_GIFMSG, data = new { to_wxid = wxid, file = file } });
else
json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_IMGMSG, data = new { to_wxid = wxid, file = file } });
SendWeChatData(User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
public override void SendVideo(string wxid, string file)
{
try
{
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_VIDEOMSG, data = new { to_wxid = wxid, file = file } });
SendWeChatData(User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
public override void AgreeAddMe(string text)
{
try
{
var v1 = string.Empty;
var v2 = string.Empty;
var scene = 0;
var reg = Regex.Match(text, @"encryptusername=\\?""([^""]+?)\\?""");
if (reg.Success)
v1 = reg.Groups[1].Value;
reg = Regex.Match(text, @"ticket=\\?""([^""]+?)\\?""");
if (reg.Success)
v2 = reg.Groups[1].Value;
reg = Regex.Match(text, @"scene=\\?""([^""]+?)\\?""");
if (reg.Success)
scene = int.Parse(reg.Groups[1].Value);
LogHelper.GetSingleObj().Info("------", $"v1 = {v1} v2 = {v1} scene = {scene}");
var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_ACCEPT_FRIEND_MSG, data = new { v1 = v1, v2 = v2, scene = scene } });
//var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_ACCEPT_FRIEND_MSG, data = new { v1 = v1, v2 = v2 } });
SendWeChatData(User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
public override void SendCard(string to_wxid, string card_wxid)
{
try
{
var json = string.Empty;
if (card_wxid.Contains("@chatroom"))
//json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_INVITE_TO_ROOM_REQ_MSG, data = new { room_wxid = card_wxid, member_list = new string[] { to_wxid } } });
{
InviteMemberToRoom_40Up(card_wxid, to_wxid);
return;
}
else
json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_CARDMSG, data = new { to_wxid = to_wxid, card_wxid = card_wxid } });
SendWeChatData(User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 创建群
/// </summary>
/// <param name="wxidData"></param>
public override void CreateRoom(string wxidData)
{
try
{
if (string.IsNullOrWhiteSpace(wxidData)) return;
var wxids = wxidData.Trim().Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
if (wxids == null || wxids.Length == 0) return;
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_CREATE_ROOM_MSG, data = wxids });
SendWeChatData(User.DwClientId, json);
var wxidstmp = wxids.ToList();
wxidstmp.Add(User.Wxid);
wxidstmp.Sort(StringComparer.CurrentCulture);
var md5Text = Common.GetMD5(string.Join(",", wxidstmp));
var result = Task.Factory.StartNew<string>(delegate ()
{
var awaitTime = DateTime.Now.AddSeconds(15);
do
{
Thread.Sleep(200);
Cache cache = HttpRuntime.Cache;
object item = cache[md5Text];
if (item != null)
{
try
{
cache.Remove(md5Text);
}
catch (Exception ex)
{ }
return item.ToString();
}
} while (awaitTime >= DateTime.Now);
return string.Empty;
}).Result;
var socketClient = EasySoc.GetSocket();
var msg = new CreateRoom();
msg.RobotUsername = User.Wxid;
msg.RobotUsernick = User.Nickname;
msg.RobotType = RobotType.;
msg.MsgId = ServerMsgID;
msg.Cmd = PCRobotCMD.rcvCreateRoom;
msg.GroupId = result;
msg.MemberTotal = wxidstmp.Count - 1;
socketClient.Send(msg);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
public override void InviteMemberToRoom_40Up(string groupid, string wxidData)
{
try
{
if (string.IsNullOrWhiteSpace(wxidData)) return;
var wxids = wxidData.Trim().Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
if (wxids != null && wxids.Length != 0)
{
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_INVITE_TO_ROOM_REQ_MSG, data = new { room_wxid = groupid, member_list = wxids } });
SendWeChatData(User.DwClientId, json);
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
public override void InviteMemberToRoom_40Down(string groupid, string wxidData)
{
try
{
if (string.IsNullOrWhiteSpace(wxidData)) return;
var wxids = wxidData.Trim().Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
if (wxids != null && wxids.Length != 0)
{
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_INVITE_TO_ROOM_MSG, data = new { room_wxid = groupid, member_list = wxids } });
SendWeChatData(User.DwClientId, json);
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message + ".._.");
}
}
public override void DeleteRoomMember(string wxid, string room)
{
try
{
if (room.Contains("@chatroom") || room.Contains("@im.chatroom"))
{
var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_DEL_ROOM_MEMBER_MSG, data = new { room_wxid = room, member_list = new string[] { wxid } } });
SendWeChatData(User.DwClientId, json);
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
public override void DecryptImage(string src_file, string dest_file)
{
try
{
var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_DECRYPT_IMG_MSG, data = new { src_file = src_file, dest_file = dest_file } });
SendWeChatData(User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
public override void PayTransferConfirm(string data)
{
try
{
var transferid = string.Empty;
var dic = HttpExtend.JsonToDictionary(data);
if (dic.ContainsKey("Transferid"))
transferid = dic["Transferid"].ToString();
var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_ACCEPT_WCPAY_MSG, data = new { transferid = transferid } });
SendWeChatData(User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
public override void DeleteFriend(string wxid)
{
try
{
var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_DEL_FRIEND_MSG, data = new { wxid = wxid } });
SendWeChatData(User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
public override void EditCotacts(string wxid, string remark)
{
try
{
var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_MOD_FRIEND_REMARK_MSG, data = new { wxid = wxid, remark = remark } });
SendWeChatData(User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
public override void StateOpt(string wxid, bool status)
{
try
{
var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_MOD_CHAT_SESSION_TOP_MSG, data = new { wxid = wxid, status = status ? 1 : 0 } });
SendWeChatData(User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
private static bool IsZombizRun = false;
internal void GetZombiz()//这个方法临时用,以后修改 (不应该用休眠的)
{
if (IsZombizRun) return;
try
{
IsZombizRun = true;
GetContact();
var flag = Task.Factory.StartNew<bool>(delegate ()
{
DateTime end_time = DateTime.Now.AddSeconds(15);
do
{
if (!User.IsGetFriend)
return true;
Thread.Sleep(200);
} while (end_time > DateTime.Now);
return false;
}).Result;
var friends = User.Friends.Where(f => !f.wxid.Contains("@chatroom") && f.is_zombie == -1).ToList();
foreach (var item in friends)
{
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_CARD_XMLMSG, data = new { to_wxid = item.wxid, xml = @"<?xml version=""1.0""?> <msg bigheadimgurl="""" smallheadimgurl="""" username=""[wxid]"" nickname=""[name]"" fullpy=""chulian"" shortpy="""" alias="""" imagestatus=""0"" scene=""0"" province="""" city="""" sign="""" sex=""0"" certflag=""0"" certinfo="""" brandIconUrl="""" brandHomeUrl="""" brandSubscriptConfigUrl="""" brandFlags=""0"" regionCode="""" antispamticket=""[wxid]"" />".Replace("[wxid]", item.wxid).Replace("[name]", ".") } });
var u = User.Friends.FirstOrDefault(f => f.wxid == item.wxid);
if (u != null && u.is_zombie == -1)
{
SendWeChatData(User.DwClientId, json);
Thread.Sleep(800 + new Random().Next(100, 200));
}
}
//#region 发送xx
//var nmss = new List<List<FriendInfo>>();
//var mis = new List<FriendInfo>();
//var count = 30;
//var rem = friends.Count % count;
//var num = friends.Count / count;
//for (int i = 0; i < friends.Count; i++)
//{
// mis.Add(friends[i]);
// if (mis.Count >= count)
// {
// nmss.Add(mis);
// mis = new List<FriendInfo>();
// }
// else if (nmss.Count == num && mis.Count == rem)
// {
// nmss.Add(mis);
// }
//}
//var user = WechatClient.GetUser(User.DwClientId, WechatType.Xiaoxie);
//if (user == null) return;
//var socketClient = EasySoc.GetSocket();
//foreach (var item in nmss)
//{
// var msg = new WechatContact();
// msg.RobotUsername = user.Wxid;
// msg.RobotUsernick = user.Nickname;
// msg.RobotType = RobotType.客户端微信;
// msg.Cmd = PCRobotCMD.rcvContactList;
// msg.Message = HttpHelper.ObjectToJson(new Dictionary<string, List<FriendInfo>>() { { "data", item } });
// socketClient.Send(msg);
// Thread.Sleep(5);
//}
//#endregion
}
catch (Exception)
{ }
finally
{
IsZombizRun = false;
}
}
public override void GetContact()
{
try
{
//获取好友列表(数据库读取)
//var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_DATA_FRIENDS_MSG, data = new { } });
//SendWeChatData(User.DwClientId, json);
Task.Run(() =>
{
GetFriendInfos();
});
Thread.Sleep(1000);
//获取群列表(数据库读取)
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_DATA_CHATROOMS_MSG, data = new { } });
SendWeChatData(User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
public override void GetContact(bool isUpdate)
{
try
{
var result = GetFriendInfos(true);
var socketClient = EasySoc.GetSocket();
CommonResult msg = new CommonResult();
msg.RobotUsername = User.Wxid;
msg.RobotUsernick = User.Nickname;
msg.RobotType = RobotType.;
msg.MsgId = ServerMsgID;
msg.Cmd = PCRobotCMD.rcvFriendList;
msg.Data = result == null ? string.Empty : HttpHelper.ObjectToJson(result);
socketClient.Send(msg);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 获取好友列表
/// </summary>
/// <param name="flushGroupsCache">刷新缓存数据</param>
/// <returns></returns>
//public override List<FriendInfo> GetFriendInfos(bool flushGroupsCache = false)
public override string GetFriendInfos(bool flushGroupsCache = false)
{
List<FriendInfo> friends = null;
try
{
#region
friends = User.Friends.Where(f => !f.wxid.Contains("@chatroom")).ToList();
if (!flushGroupsCache && friends.Count != 0)
return JsonConvert.SerializeObject(friends);
#endregion
if (!User.IsGetFriend)
{
//获取好友列表(数据库读取)
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_DATA_FRIENDS_MSG, data = new { } });
SendWeChatData(User.DwClientId, json);
User.IsGetFriend = true;
}
var result_ = Task.Factory.StartNew<List<FriendInfo>>(delegate ()
{
DateTime end_time = DateTime.Now.AddSeconds(20);
do
{
if (!User.IsGetFriend)
{
friends = User.Friends.Where(f => !f.wxid.Contains("@chatroom")).ToList();
return friends;
}
Thread.Sleep(200);
} while (end_time > DateTime.Now);
return null;
}).Result;
return JsonConvert.SerializeObject(friends);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message + "#__#");
}
return string.Empty;
}
/// <summary>
/// 获取群列表
/// </summary>
public override void GetGroupsNotInMember()
{
try
{
//获取群列表(数据库读取)
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_DATA_CHATROOMS_MSG, data = new { } });
SendWeChatData(User.DwClientId, json);
var result = Task.Factory.StartNew<string>(delegate ()
{
Thread.Sleep(4000);
var groups = User.Friends.Where(f => f.wxid.Contains("@chatroom")).ToList();
return groups == null ? string.Empty : HttpHelper.ObjectToJson(new Dictionary<string, List<FriendInfo>>() { { "data", groups } });
}).Result;
if (result == null)
result = HttpHelper.ObjectToJson(new Dictionary<string, List<FriendInfo>>() { { "data", User.Friends.Where(f => f.wxid.Contains("@chatroom")).ToList() } });
var socketClient = EasySoc.GetSocket();
var msg = new WechatContact();
msg.RobotUsername = User.Wxid;
msg.RobotUsernick = User.Nickname;
msg.RobotType = RobotType.;
msg.MsgId = ServerMsgID;
msg.Cmd = PCRobotCMD.rcvContactList;
msg.Message = result;
socketClient.Send(msg);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 通过用户id查询用户
/// </summary>
/// <param name="wxid"></param>
public override void GetWxidInfo(string wxid)
{
try
{
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_DATA_WXID_MSG, data = new { wxid = wxid } });
var u = User.Friends.FirstOrDefault(f => f.wxid == wxid);
if (u == null)
{
SendWeChatData(User.DwClientId, json);
var friend = Task.Factory.StartNew<FriendInfo>(delegate ()
{
DateTime end_time = DateTime.Now.AddSeconds(15);
do
{
u = User.Friends.FirstOrDefault(f => f.wxid == wxid);
if (u != null) return u;
Thread.Sleep(200);
} while (end_time > DateTime.Now);
return null;
}).Result;
}
var socketClient = EasySoc.GetSocket();
WechatContact msg = new WechatContact();
msg.RobotUsername = User.Wxid;
msg.RobotUsernick = User.Nickname;
msg.RobotType = RobotType.;
msg.MsgId = ServerMsgID;
msg.Cmd = PCRobotCMD.rcvContact;
msg.Message = u == null ? string.Empty : HttpHelper.ObjectToJson(u);
socketClient.Send(msg);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 通过群号查询指定的用户
/// </summary>
/// <param name="groupId">要查询群号</param>
/// <param name="wxid">要查询的用户</param>
public override void GetGroupAndFriendInfo(string groupId, string wxid)
{
try
{
GroupInfo group = null;
FriendInfo u = null;
if (groupId.Contains("@chatroom") || groupId.Contains("@im.chatroom"))
{
var g = User.Groups.FirstOrDefault(f => f.wxid == groupId);
if (g != null)
{
u = g.friends.FirstOrDefault(f => f.wxid == wxid);
if (u != null)
group = new GroupInfo() { wxid = groupId, friends = new List<FriendInfo>() { u }, total_member = g.total_member };
}
if (group == null)
{
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_DATA_CHATROOM_MEMBERS_MSG, data = new { room_wxid = groupId } });
SendWeChatData(User.DwClientId, json);
var _group = Task.Factory.StartNew<GroupInfo>(delegate ()
{
DateTime end_time = DateTime.Now.AddSeconds(15);
do
{
g = User.Groups.FirstOrDefault(f => f.wxid == groupId);
if (g != null)
{
u = g.friends.FirstOrDefault(f => f.wxid == wxid);
if (u != null)
{
group = new GroupInfo() { wxid = groupId, friends = new List<FriendInfo>() { u }, total_member = g.total_member };
return group;
}
}
Thread.Sleep(200);
} while (end_time > DateTime.Now);
return null;
}).Result;
}
if (group == null) group = new GroupInfo() { wxid = groupId, friends = new List<FriendInfo>() { new FriendInfo() { wxid = wxid } }, total_member = 1 };
}
var socketClient = EasySoc.GetSocket();
var msg = new WechatContact();
msg.RobotUsername = User.Wxid;
msg.RobotUsernick = User.Nickname;
msg.RobotType = RobotType.;
msg.MsgId = ServerMsgID;
msg.Cmd = PCRobotCMD.rcvContact;
msg.Message = group == null ? string.Empty : HttpHelper.ObjectToJson(group);
socketClient.Send(msg);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 通过群号查询指定的用户
/// </summary>
/// <param name="groupId">要查询群号</param>
/// <param name="wxid">要查询的用户</param>
public override void GetGroupAndFriendInfo(string groupId, string wxid, bool flush = false)
{
try
{
GroupInfo group = null;
FriendInfo u = null;
if (groupId.Contains("@chatroom") || groupId.Contains("@im.chatroom"))
{
var g = User.Groups.FirstOrDefault(f => f.wxid == groupId);
if (g != null)
{
if (flush)
{
g.friends.Clear();
UpdateGroupInfo(groupId);
Thread.Sleep(100);
}
else
{
u = g.friends.FirstOrDefault(f => f.wxid == wxid);
if (u != null)
group = new GroupInfo() { wxid = groupId, friends = new List<FriendInfo>() { u }, total_member = g.total_member };
}
}
if (group == null)
{
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_DATA_CHATROOM_MEMBERS_MSG, data = new { room_wxid = groupId } });
SendWeChatData(User.DwClientId, json);
var _group = Task.Factory.StartNew<GroupInfo>(delegate ()
{
DateTime end_time = DateTime.Now.AddSeconds(15);
do
{
g = User.Groups.FirstOrDefault(f => f.wxid == groupId);
if (g != null)
{
u = g.friends.FirstOrDefault(f => f.wxid == wxid);
if (u != null)
{
group = new GroupInfo() { wxid = groupId, friends = new List<FriendInfo>() { u }, total_member = g.total_member };
return group;
}
}
Thread.Sleep(200);
} while (end_time > DateTime.Now);
return null;
}).Result;
}
if (group == null) group = new GroupInfo() { wxid = groupId, friends = new List<FriendInfo>() { new FriendInfo() { wxid = wxid } }, total_member = 1 };
}
var socketClient = EasySoc.GetSocket();
var msg = new WechatContact();
msg.RobotUsername = User.Wxid;
msg.RobotUsernick = User.Nickname;
msg.RobotType = RobotType.;
msg.MsgId = ServerMsgID;
msg.Cmd = PCRobotCMD.rcvContact;
msg.Message = group == null ? string.Empty : HttpHelper.ObjectToJson(group);
socketClient.Send(msg);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
public override void UpdateWxidInfo(string wxid)
{
try
{
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_UPDATE_WXID_MSG, data = new { wxid = wxid } });
SendWeChatData(User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
public override void UpdateGroupInfo(string groupId)
{
try
{
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_UPDATE_ROOM_MEMBER_MSG, data = new { wxid = groupId } });
SendWeChatData(User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
public override void GetFriend(string wxid)
{
try
{
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_DATA_WXID_MSG, data = new { wxid = wxid } });
SendWeChatData(this.User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 浏览器
/// </summary>
//public void MtOpenBrowserMsg(string url)
//{
// try
// {
// var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_OPEN_BROWSER_MSG, data = new { url = url } });
// SendWeChatData(this.User.DwClientId, json);
// }
// catch (Exception ex)
// {
// LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
// }
//}
public override void CloseWechat(string message)
{
try
{
var v = WechatClient.Users.FirstOrDefault(f => f.Value.DwClientId == User.DwClientId && f.Value.Type == WechatType.Xiaoxie).Value;
if (v != null)
{
LogHelper.GetSingleObj().Info("系统", $"CloseWechat事件退出,Uin:{v.Uin},微信:{v.Nickname}({v.Wxid})");
WechatClient.RemoveUser(v, true);
if (!string.IsNullOrWhiteSpace(message))
PCRobotForm.ErrorMessAction?.Invoke(message);
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 检测URL在微信中是否有效
/// </summary>
/// <param name="url">要检测的网址</param>
public override void CheckUrl(string url)
{
try
{
url = url.Trim();
if (!string.IsNullOrWhiteSpace(url))
{
//var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_CHECK_URL_STATUS_MSG, data = new { url = url } });
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_CHECK_URL_STATUS2_MSG, data = new { url = url } });
SendWeChatData(this.User.DwClientId, json);
}
var result = Task.Factory.StartNew<int>(delegate ()
{
var awaitTime = DateTime.Now.AddSeconds(10);
do
{
Thread.Sleep(200);
//if (CheckUrlCache.ContainsKey(url)) return CheckUrlCache[url];
Cache cache = HttpRuntime.Cache;
object item = cache[url];
if (item != null)
return int.Parse(item.ToString());
} while (awaitTime >= DateTime.Now);
return -1;
}).Result;
var socketClient = EasySoc.GetSocket();
var msg = new CheckUrl();
msg.RobotUsername = User.Wxid;
msg.RobotUsernick = User.Nickname;
msg.RobotType = RobotType.;
msg.MsgId = ServerMsgID;
msg.Cmd = PCRobotCMD.rcvCheckUrl;
msg.Status = result;
socketClient.Send(msg);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
public override void OpenUrl(string url)
{
try
{
url = url.Trim();
if (!string.IsNullOrWhiteSpace(url))
{
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_OPEN_BROWSER_MSG, data = new { url = url } });
SendWeChatData(this.User.DwClientId, json);
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 清理历史聊天记录
/// </summary>
/// <param name="url"></param>
public override void ClearChatHistoryMsg()
{
try
{
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_CLEAR_CHAT_HISTORY_MSG, data = new { } });
SendWeChatData(this.User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 设置会话已读
/// </summary>
/// <param name="url"></param>
public override void SetSessionReadedMsg(string wxid)
{
try
{
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SET_SESSION_READED_MSG, data = new { wxid = wxid } });
SendWeChatData(this.User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 修改群聊名称
/// </summary>
/// <param name="new_name">新的群名</param>
/// <param name="groupId">群id</param>
public override void SetRoomName(string new_name, string groupId)
{
try
{
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_MOD_ROOM_NAME_MSG, data = new { room_wxid = groupId, name = new_name } });
SendWeChatData(this.User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 修改群公告(可用于@全体)
/// </summary>
/// <param name="notice">新公告</param>
/// <param name="groupId">群聊wxid</param>
public override void SetRoomNotice(string notice, string groupId)
{
try
{
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_MOD_ROOM_NOTICE_MSG, data = new { room_wxid = groupId, notice = notice } });
SendWeChatData(this.User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 设置自己在群中昵称
/// </summary>
/// <param name="nickname">要设置的昵称</param>
/// <param name="groupId">需要设置的群id</param>
public override void ModRoomMyName(string nickname, string groupId)
{
try
{
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_MOD_ROOM_MEMBER_NAME_MSG, data = new { room_wxid = groupId, nickname = nickname } });
SendWeChatData(this.User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 设置是否显示群成员昵称
/// </summary>
/// <param name="status">true为开启</param>
/// <param name="groupId">要显示得到群</param>
public override void SetRoomShowMemeberName(bool status, string groupId)
{
try
{
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_MOD_ROOM_SHOW_NAME_MSG, data = new { room_wxid = groupId, status = status ? 1 : 0 } });
SendWeChatData(this.User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 修改群聊名称
/// </summary>
/// <param name="newnick">新名称</param>
/// <param name="groupId">群号</param>
public override void ModRoomName(string newnick, string groupId)
{
try
{
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_MOD_ROOM_NAME_MSG, data = new { room_wxid = groupId, name = newnick } });
SendWeChatData(this.User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 是否消息免打扰
/// </summary>
/// <param name="status">true为开启</param>
/// <param name="wxid">wxid</param>
public override void SetRecvNotify(bool status, string wxid)
{
try
{
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_MOD_RECV_NOTIFY_MSG, data = new { wxid = wxid, status = status ? 1 : 0 } });
SendWeChatData(this.User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 关注公众号
/// </summary>
/// <param name="wxid">公众号wxid</param>
public override void AddPublicUser(string wxid)
{
try
{
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_ADD_PUBLIC_USER_MSG, data = new { wxid = wxid } });
SendWeChatData(this.User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 开启/关闭防撤回功能
/// </summary>
/// <param name="status">1是开启防撤回0是关闭</param>
public override void SetDisableRevoke(bool status)
{
try
{
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_DISABLE_REVOKE_MSG, data = new { status = status ? 1 : 0 } });
SendWeChatData(this.User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
#region
public enum MsgType : ushort
{
/// <summary>
/// DEBUG消息
/// </summary>
MT_DEBUG_LOG = 11024,
/// <summary>
/// 登录消息
/// </summary>
MT_USER_LOGIN = 11025,
/// <summary>
/// 注销消息
/// </summary>
MT_USER_LOGOUT = 11026,
/// <summary>
/// 数据库查询消息
/// </summary>
MT_SQL_QUERY = 11027,
/// <summary>
/// 获取我的信息消息
/// </summary>
MT_DATA_OWNER_MSG = 11028,
/// <summary>
/// 获取单个好友消息
/// </summary>
MT_DATA_WXID_MSG = 11029,
/// <summary>
/// 获取好友列表消息
/// </summary>
MT_DATA_FRIENDS_MSG = 11030,
/// <summary>
/// 获取群聊列表消息
/// </summary>
MT_DATA_CHATROOMS_MSG = 11031,
/// <summary>
/// 获取群成员消息
/// </summary>
MT_DATA_CHATROOM_MEMBERS_MSG = 11032,
/// <summary>
/// 获取公众号消息
/// </summary>
MT_DATA_PUBLICS_MSG = 11033,
/// <summary>
/// 从网络更新单个好友信息消息
/// </summary>
MT_UPDATE_WXID_MSG = 11034,
/// <summary>
/// 从网络更新群成员信息消息
/// </summary>
MT_UPDATE_ROOM_MEMBER_MSG = 11035,
/// <summary>
/// 发送文本消息
/// </summary>
MT_SEND_TEXTMSG = 11036,
/// <summary>
/// 发送群@消息
/// </summary>
MT_SEND_CHATROOM_ATMSG = 11037,
/// <summary>
/// 发送名片消息
/// </summary>
MT_SEND_CARDMSG = 11038,
/// <summary>
/// 发送链接消息
/// </summary>
MT_SEND_LINKMSG = 11039,
/// <summary>
/// 发送图片消息
/// </summary>
MT_SEND_IMGMSG = 11040,
/// <summary>
/// 发送文件消息
/// </summary>
MT_SEND_FILEMSG = 11041,
/// <summary>
/// 发送视频消息
/// </summary>
MT_SEND_VIDEOMSG = 11042,
/// <summary>
/// 发送GIF消息
/// </summary>
MT_SEND_GIFMSG = 11043,
/// <summary>
/// 接收文本消息
/// </summary>
MT_RECV_TEXT_MSG = 11046,
/// <summary>
/// 接收图片消息
/// </summary>
MT_RECV_PICTURE_MSG = 11047,
/// <summary>
/// 接收语音消息
/// </summary>
MT_RECV_VOICE_MSG = 11048,
/// <summary>
/// 接收申请好友消息
/// </summary>
MT_RECV_FRIEND_MSG = 11049,
/// <summary>
/// 接收名片消息
/// </summary>
MT_RECV_CARD_MSG = 11050,
/// <summary>
/// 接收视频消息
/// </summary>
MT_RECV_VIDEO_MSG = 11051,
/// <summary>
/// 接收表情消息
/// </summary>
MT_RECV_EMOJI_MSG = 11052,
/// <summary>
/// 接收位置消息
/// </summary>
MT_RECV_LOCATION_MSG = 11053,
/// <summary>
/// 接收链接消息
/// </summary>
MT_RECV_LINK_MSG = 11054,
/// <summary>
/// 接收文件消息
/// </summary>
MT_RECV_FILE_MSG = 11055,
/// <summary>
/// 接收小程序消息
/// </summary>
MT_RECV_MINIAPP_MSG = 11056,
/// <summary>
/// 接收好友转账消息
/// </summary>
MT_RECV_WCPAY_MSG = 11057,
/// <summary>
/// 接收系统消息
/// </summary>
MT_RECV_SYSTEM_MSG = 11058,
/// <summary>
/// 接收撤回消息
/// </summary>
MT_RECV_REVOKE_MSG = 11059,
/// <summary>
/// 接收其他未知消息
/// </summary>
MT_RECV_OTHER_MSG = 11060,
/// <summary>
/// 接收应用类型未知消息
/// </summary>
MT_RECV_OTHER_APP_MSG = 11061,
/// <summary>
/// 发送加好友消息
/// </summary>
MT_ADD_FRIEND_MSG = 11062,
/// <summary>
/// 发送修改好友备注消息
/// </summary>
MT_MOD_FRIEND_REMARK_MSG = 11063,
/// <summary>
/// 发送删除好友消息
/// </summary>
MT_DEL_FRIEND_MSG = 11064,
/// <summary>
/// 发送同意加好友申请消息
/// </summary>
MT_ACCEPT_FRIEND_MSG = 11065,
/// <summary>
/// 发送接收好友转帐消息
/// </summary>
MT_ACCEPT_WCPAY_MSG = 11066,
/// <summary>
/// 发送同意进群邀请消息
/// </summary>
MT_ACCEPT_ROOM_MSG = 11067,
/// <summary>
/// 发送创建群聊消息
/// </summary>
MT_CREATE_ROOM_MSG = 11068,
/// <summary>
/// 发送邀请好友进群消息40人以下
/// </summary>
MT_INVITE_TO_ROOM_MSG = 11069,
/// <summary>
/// 发送邀请好友进群消息40人以上
/// </summary>
MT_INVITE_TO_ROOM_REQ_MSG = 11070,
/// <summary>
/// 发送删除群成员消息
/// </summary>
MT_DEL_ROOM_MEMBER_MSG = 11071,
/// <summary>
/// 发送修改群名称消息
/// </summary>
MT_MOD_ROOM_NAME_MSG = 11072,
/// <summary>
/// 发送修改群通知消息
/// </summary>
MT_MOD_ROOM_NOTICE_MSG = 11073,
/// <summary>
/// 发送修改我在本群的昵称消息
/// </summary>
MT_MOD_ROOM_MEMBER_NAME_MSG = 11074,
/// <summary>
/// 发送修改显示群昵称消息
/// </summary>
MT_MOD_ROOM_SHOW_NAME_MSG = 11075,
/// <summary>
/// 发送保存到联系人消息
/// </summary>
MT_SAVE_ROOM_TO_CONTACT_MSG = 11076,
/// <summary>
/// 发送退出并删除群消息
/// </summary>
MT_QUIT_DEL_ROOM_MSG = 11077,
/// <summary>
/// 发送消息免打扰消息
/// </summary>
MT_MOD_RECV_NOTIFY_MSG = 11078,
/// <summary>
/// 发送置顶消息
/// </summary>
MT_MOD_CHAT_SESSION_TOP_MSG = 11079,
/// <summary>
/// 发送无痕清粉消息
/// </summary>
MT_ZOMBIE_CHECK_MSG = 11080,
/// <summary>
/// 发送自动同意好友申请消息
/// </summary>
MT_AUTO_ACCEPT_FRIEND_MSG = 11081,
/// <summary>
/// 发送自动同意好友转帐消息
/// </summary>
MT_AUTO_ACCEPT_WCPAY_MSG = 11082,
/// <summary>
/// 发送自动进群邀请消息
/// </summary>
MT_AUTO_ACCEPT_ROOM_MSG = 11083,
/// <summary>
/// 发送自动加名片消息
/// </summary>
MT_AUTO_ACCPET_CARD_MSG = 11084,
/// <summary>
/// 发送解密图片消息
/// </summary>
MT_DECRYPT_IMG_MSG = 11085,
/// <summary>
/// 发送打开浏览器消息
/// </summary>
MT_OPEN_BROWSER_MSG = 11086,
/// <summary>
/// 获取用户登录二维码于2019年5月28日新增
/// </summary>
MT_RECV_QRCODE_MSG = 11087,
/// <summary>
/// 窗口变化通知消息
/// </summary>
MT_WX_WND_CHANGE_MSG = 11088,
/// <summary>
/// 发送和获取未读数量变动消息
/// </summary>
MT_UNREAD_MSG_COUNT_CHANGE_MSG = 11089,
/// <summary>
/// 与指定人聊天
/// </summary>
MT_TO_CHAT_MSG = 11090,
/// <summary>
/// 当前聊天对象改变
/// </summary>
MT_TALKER_CHANGE_MSG = 11091,
/// <summary>
/// 通过二维码进群
/// </summary>
MT_ACCEPT_QRCODE_ROOM_MSG = 11092,
/// <summary>
/// 单向加好友
/// </summary>
MT_ACCEPT_ONEWAY_FRIEND_MSG = 11093,
/// <summary>
/// 设置微信版本号
/// </summary>
MT_CUSTOM_WX_VERSION_MSG = 11094,
/// <summary>
/// 接收到二微码付款消息
/// </summary>
MT_RECV_QRCODE_WCPAY_MSG = 11095,
/// <summary>
/// 通过手机号/微信号/QQ号查询联系人
/// </summary>
MT_SEARCH_CONTACT_MSG = 11096,
/// <summary>
/// 添加通过手机号/微信号/QQ号查询的联系人
/// </summary>
MT_ADD_SEARCH_CONTACT_MSG = 11097,
/// <summary>
/// 群成员新增通知
/// </summary>
MT_ROOM_ADD_MEMBER_NOTIFY_MSG = 11098,
/// <summary>
/// 群成员删除通知
/// </summary>
MT_ROOM_DEL_MEMBER_NOTIFY_MSG = 11099,
/// <summary>
/// 通过接口创建群聊的通知
/// </summary>
MT_ROOM_CREATE_NOTIFY_MSG = 11100,
/// <summary>
/// 退群或被踢通知
/// </summary>
MT_ROOM_DEL_NOTIFY_MSG = 11101,
/// <summary>
/// 联系人新增通知
/// </summary>
MT_CONTACT_ADD_NOITFY_MSG = 11102,
/// <summary>
/// 联系人删除通知
/// </summary>
MT_CONTACT_DEL_NOTIFY_MSG = 11103,
/// <summary>
/// 注销登录
/// </summary>
MT_QUIT_LOGIN_MSG = 11104,
/// <summary>
/// 无需确认退出
/// </summary>
MT_QUIT_WECHAT_MSG = 11105,
/// <summary>
/// 当点击微信托盘图标和未读消息时消息
/// </summary>
MT_TRAYICON_SHOW_WINDOW_MSG = 11106,
/// <summary>
/// 退还朋友的转账
/// </summary>
MT_REFUSE_FRIEND_WCPAY_MSG = 11107,
/// <summary>
/// 清除聊天记录
/// </summary>
MT_CLEAR_CHAT_HISTORY_MSG = 11108,
/// <summary>
/// 获取收藏列表
/// </summary>
MT_DATA_FAVITEMS_MSG = 11109,
/// <summary>
/// 发送收藏
/// </summary>
MT_SEND_FAVITEM_MSG = 11110,
/// <summary>
/// 收藏指定消息
/// </summary>
MT_ADD_FAVITEM_FROM_MSG = 11111,
/// <summary>
/// 语音翻译
/// </summary>
MT_TRANS_VOICE_MSG = 11112,
/// <summary>
/// 发送XML消息
/// </summary>
MT_SEND_XMLMSG = 11113,
/// <summary>
/// 发送名版XML消息
/// </summary>
MT_SEND_CARD_XMLMSG = 11114,
/// <summary>
/// 关注公众号
/// </summary>
MT_ADD_PUBLIC_USER_MSG = 11115,
/// <summary>
/// 转发小程序
/// </summary>
MT_FORWARD_APP_MSG = 11118,
/// <summary>
/// 开启/关闭防撤回消息
/// </summary>
MT_DISABLE_REVOKE_MSG = 11121,
/// <summary>
/// 设置会话为已读
/// </summary>
MT_SET_SESSION_READED_MSG = 11122,
/// <summary>
/// 检测URL在微信中是否有效
/// </summary>
MT_CHECK_URL_STATUS_MSG = 11123,
/// <summary>
/// 检测URL在微信中是否有效2
/// </summary>
MT_CHECK_URL_STATUS2_MSG = 11135,
/// <summary>
/// 微信二维码识别
/// </summary>
//MT_SCAN_QRCODE_IMG_MSG = 11127,
/// <summary>
/// 自动授权登录小程序
/// </summary>
MT_SNS_AUTO_AUTH_MINIAPP_LOGIN = 11136,
/// <summary>
/// 获取朋友圈首页
/// </summary>
MT_SNS_TIMELINE_MSG = 11145,
/// <summary>
/// 评论
/// </summary>
MT_SNS_COMMENT_MSG = 11146,
/// <summary>
/// 点赞
/// </summary>
MT_SNS_LIKE_MSG = 11147,
/// <summary>
/// 发朋友圈
/// </summary>
MT_SNS_POST_MSG = 11148,
/// <summary>
/// 朋友圈上传图片
/// </summary>
MT_SNS_UPLOAD_IMAGE_MSG = 11149,
/// <summary>
/// 获取指定用户的朋友圈
/// </summary>
MT_SNS_TIMELINE_USER_MSG = 11150,
}
enum _EnRawMsgType
{
/// <summary>
/// 0x1 文本
/// </summary>
WX_MSG_TEXT = 1,
/// <summary>
/// 0x3 图片
/// </summary>
WX_MSG_PICTURE = 3,
/// <summary>
/// 0x22 语音
/// </summary>
WX_MSG_VOICE = 34,
/// <summary>
/// 0x25 加好友请求 "from_wxid" : "fmessage"
/// </summary>
WX_MSG_FRIEND = 37,
/// <summary>
/// 0x2A 名片
/// </summary>
WX_MSG_CARD = 42,
/// <summary>
/// 0x2B 视频
/// </summary>
WX_MSG_VIDEO = 43,
/// <summary>
/// 0x2F 表情
/// </summary>
WX_MSG_EMOJI = 47,
/// <summary>
/// 0x30 位置
/// </summary>
WX_MSG_LOCATION = 48,
/// <summary>
/// 0x31 应用类型子类型参考EnRawAppMsgType
/// </summary>
WX_MSG_APP = 49,
/// <summary>
/// 0x2710 系统消息
/// </summary>
WX_MSG_SYSTEM = 10000,
/// <summary>
/// 0x2712 撤回消息
/// </summary>
WX_MSG_REVOKE = 10002,
}
//EnRawMsgType;
// XML XPATH路径 /msg/appmsg/type/text()
enum _EnRawAppMsgType
{
/// <summary>
/// 链接(包含群邀请)
/// </summary>
WX_APPMSG_LINK = 5,
/// <summary>
/// 文件
/// </summary>
WX_APPMSG_FILE = 6,
/// <summary>
/// 合并消息
/// </summary>
WX_APPMSG_MUTIL = 19,
/// <summary>
/// 小程序
/// </summary>
WX_APPMSG_MINIAPP = 33,
/// <summary>
/// 转帐
/// </summary>
WX_APPMSG_WCPAY = 2000,
}
//EnRawAppMsgType;
#endregion
}
}