/// <summary> /// 发送全部用户 /// </summary> /// <param name="account"></param> /// <param name="args"></param> /// <param name="yilidb"></param> /// <returns></returns> private async Task <SendResult> SendAllByGroup(MpAccountDto account, MpMessageDto args, IDBHelper yilidb) { SendResult result = null; if (args.MessageType == MpMessageType.text.ToString()) { try { result = GroupMessageApi.SendGroupMessageByGroupId((await StaticObjects.GetAccessToken(account.TaskAccessToken)).access_token, "", args.Content, GroupMessageType.text, true, clientmsgid: $"MpMessage{args.Id}"); } catch { try { result = GroupMessageApi.SendGroupMessageByGroupId((await StaticObjects.GetAccessToken(account.TaskAccessToken, 1)).access_token, "", args.Content, GroupMessageType.text, true, clientmsgid: $"MpMessage{args.Id}"); } catch { } } } else if (args.MessageType == MpMessageType.video.ToString()) { var videoId = int.Parse(args.VideoID.ToString()); var video = yilidb.FindOne <MpMediaVideo>("SELECT TOP 1 * FROM MpMediaVideos WHERE ID=" + videoId, null, false); if (video == null) { throw new Exception(string.Format("视频{0}不存在", args.VideoName)); } try { result = GroupMessageApi.SendGroupMessageByGroupId((await StaticObjects.GetAccessToken(account.TaskAccessToken)).access_token, "", args.VideoMediaID, GroupMessageType.video, true, clientmsgid: $"MpMessage{args.Id}"); } catch { try { result = GroupMessageApi.SendGroupMessageByGroupId((await StaticObjects.GetAccessToken(account.TaskAccessToken, 1)).access_token, "", args.VideoMediaID, GroupMessageType.video, true, clientmsgid: $"MpMessage{args.Id}"); } catch { } } } else if (args.MessageType == MpMessageType.voice.ToString()) { try { result = GroupMessageApi.SendGroupMessageByGroupId((await StaticObjects.GetAccessToken(account.TaskAccessToken)).access_token, "", args.VoiceMediaID, GroupMessageType.voice, true, clientmsgid: $"MpMessage{args.Id}"); } catch { try { result = GroupMessageApi.SendGroupMessageByGroupId((await StaticObjects.GetAccessToken(account.TaskAccessToken, 1)).access_token, "", args.VoiceMediaID, GroupMessageType.voice, true, clientmsgid: $"MpMessage{args.Id}"); } catch { } } } else if (args.MessageType == MpMessageType.image.ToString()) { try { result = GroupMessageApi.SendGroupMessageByGroupId((await StaticObjects.GetAccessToken(account.TaskAccessToken)).access_token, "", args.ImageMediaID, GroupMessageType.image, true, clientmsgid: $"MpMessage{args.Id}"); } catch { try { result = GroupMessageApi.SendGroupMessageByGroupId((await StaticObjects.GetAccessToken(account.TaskAccessToken, 1)).access_token, "", args.ImageMediaID, GroupMessageType.image, true, clientmsgid: $"MpMessage{args.Id}"); } catch { } } } else if (args.MessageType == MpMessageType.mpnews.ToString()) { try { result = GroupMessageApi.SendGroupMessageByGroupId((await StaticObjects.GetAccessToken(account.TaskAccessToken)).access_token, "", args.ArticleMediaID, GroupMessageType.mpnews, true, clientmsgid: $"MpMessage{args.Id}"); } catch { try { result = GroupMessageApi.SendGroupMessageByGroupId((await StaticObjects.GetAccessToken(account.TaskAccessToken, 1)).access_token, "", args.ArticleMediaID, GroupMessageType.mpnews, true, clientmsgid: $"MpMessage{args.Id}"); } catch { } } } else if (args.MessageType == MpMessageType.mpmultinews.ToString()) { try { result = GroupMessageApi.SendGroupMessageByGroupId((await StaticObjects.GetAccessToken(account.TaskAccessToken)).access_token, "", args.ArticleGroupMediaID, GroupMessageType.mpnews, true, clientmsgid: $"MpMessage{args.Id}"); } catch { try { result = GroupMessageApi.SendGroupMessageByGroupId((await StaticObjects.GetAccessToken(account.TaskAccessToken, 1)).access_token, "", args.ArticleGroupMediaID, GroupMessageType.mpnews, true, clientmsgid: $"MpMessage{args.Id}"); } catch { } } } return(result); }
private async Task ReFreshFans(MpAccount model) { var mpId = model.Id; #region 初始化 var sb = new StringBuilder(); int stoptick = 0, stopcount = 100; var fanssavestr = @" if not exists(select * from MpFans where MpID='{0}' and OpenID='{1}') insert into MpFans ([MpID],[OpenID],[NickName],[Sex],[Language],[City],[Province],[Country],[HeadImgUrl],[SubscribeTime],[UnionID],[WxGroupID],[IsFans],[UpdateTime],CreationTime,IsDeleted) values ({0},'{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{12}','{13}',getdate(),getdate(),0) else update MpFans SET [MpID]='{0}',[OpenID]='{1}',[NickName]='{2}',[Sex]='{3}',[Language]='{4}',[City]='{5}',[Province]='{6}',[Country]='{7}',[HeadImgUrl]='{8}',[SubscribeTime]='{9}',[UnionID]='{10}',[WxGroupID]='{12}',[IsFans]='{13}',[UpdateTime]=getdate(),IsDeleted=0 WHERE MpID='{0}' and OpenID='{1}' "; #endregion #region 更新用户 #region 更新前10000个用户 OpenIdResultJson fansopenids = null; string _accesstoken = ""; try { _accesstoken = (await StaticObjects.GetAccessToken(model.TaskAccessToken)).access_token; fansopenids = UserApi.Get(_accesstoken, ""); } catch (Exception e) { _accesstoken = (await StaticObjects.GetAccessToken(model.TaskAccessToken, 1)).access_token; //LogWriter.Error(string.Format("获取MpID为{0}的openid报错,错误信息:{1}", mpId, ex)); fansopenids = UserApi.Get(_accesstoken, ""); } DateTime now = DateTime.Now; if (fansopenids.count > 0) { foreach (var id in fansopenids.data.openid) { UserInfoJson wxinfo = null; try { wxinfo = UserApi.Info((await StaticObjects.GetAccessToken(model.TaskAccessToken)).access_token, id); } catch { //LogWriter.Error(string.Format("获取MpID为{0},openid为{1}的用户信息报错,错误信息:{2}", mpId.ToString(), id, ex)); wxinfo = UserApi.Info((await StaticObjects.GetAccessToken(model.TaskAccessToken, 1)).access_token, id); } sb.AppendFormat(fanssavestr, mpId, id, DbTool.ToSqlParamString(wxinfo.nickname), wxinfo.sex, DbTool.ToSqlParamString(wxinfo.language), DbTool.ToSqlParamString(wxinfo.city), DbTool.ToSqlParamString(wxinfo.province), DbTool.ToSqlParamString(wxinfo.country), DbTool.ToSqlParamString(wxinfo.headimgurl), DateTimeHelper.GetDateTimeFromXml(wxinfo.subscribe_time), DbTool.ToSqlParamString(wxinfo.unionid), DbTool.ToSqlParamString(wxinfo.remark), wxinfo.groupid, wxinfo.subscribe); stoptick++; if (stoptick % stopcount == 0 || stoptick == fansopenids.count) { if (sb.Length > 0) { StaticObjects.db.ExcuteNonQuery(sb.ToString(), null, false); } sb.Clear(); } } } #endregion #region while循环更新后续所有用户 while (!string.IsNullOrEmpty(fansopenids.next_openid)) { try { fansopenids = UserApi.Get((await StaticObjects.GetAccessToken(model.TaskAccessToken)).access_token, fansopenids.next_openid); } catch { //LogWriter.Error(string.Format("获取MpID为{0}的openid报错,nextopenid为{1},错误信息:{2}", mpId, fansopenids.next_openid, ex)); fansopenids = UserApi.Get((await StaticObjects.GetAccessToken(model.TaskAccessToken, 1)).access_token, fansopenids.next_openid); } if (fansopenids.count > 0) { foreach (var id in fansopenids.data.openid) { UserInfoJson wxinfo = null; try { wxinfo = UserApi.Info((await StaticObjects.GetAccessToken(model.TaskAccessToken)).access_token, id); } catch { //LogWriter.Error(string.Format("获取MpID为{0},openid为{1}的用户信息报错,错误信息:{2}", mpId, id, ex)); wxinfo = UserApi.Info((await StaticObjects.GetAccessToken(model.TaskAccessToken, 1)).access_token, id); } sb.AppendFormat(fanssavestr, mpId, id, DbTool.ToSqlParamString(wxinfo.nickname), wxinfo.sex, DbTool.ToSqlParamString(wxinfo.language), DbTool.ToSqlParamString(wxinfo.city), DbTool.ToSqlParamString(wxinfo.province), DbTool.ToSqlParamString(wxinfo.country), DbTool.ToSqlParamString(wxinfo.headimgurl), DateTimeHelper.GetDateTimeFromXml(wxinfo.subscribe_time), DbTool.ToSqlParamString(wxinfo.unionid), DbTool.ToSqlParamString(wxinfo.remark), wxinfo.groupid, wxinfo.subscribe); stoptick++; if (stoptick % stopcount == 0 || stoptick == fansopenids.count) { if (sb.Length > 0) { StaticObjects.db.ExcuteNonQuery(sb.ToString(), null, false); } sb.Clear(); } } } } #endregion //没更新到的用户设为取消关注 sb.AppendFormat("update MpFans set IsFans='0' where MpID='{0}' and UpdateTime<'{1}'", mpId, now.AddDays(-1)); #endregion if (sb.Length > 0) { StaticObjects.db.ExcuteNonQuery(sb.ToString(), null, false); } //LogWriter.Info(string.Format("更新数量{0},更新完毕", stoptick)); }
/// <summary> /// 按openid群发 /// </summary> /// <param name="account"></param> /// <param name="args"></param> /// <param name="openIds"></param> /// <returns></returns> private async Task <SendResult> SendByOpenIds(MpAccountDto account, MpMessageDto args, string[] openIds, IDBHelper yilidb) { SendResult result = null; if (args.MessageType == MpMessageType.text.ToString()) { try { result = await GroupMessageApi.SendGroupMessageByOpenIdAsync((await StaticObjects.GetAccessToken(account.TaskAccessToken)).access_token, GroupMessageType.text, args.Content, $"MpMessage{args.Id}", Senparc.Weixin.Config.TIME_OUT, openIds.ToArray()); } catch { try { result = await GroupMessageApi.SendGroupMessageByOpenIdAsync((await StaticObjects.GetAccessToken(account.TaskAccessToken, 1)).access_token, GroupMessageType.text, args.Content, $"MpMessage{args.Id}", Senparc.Weixin.Config.TIME_OUT, openIds.ToArray()); } catch { } } } else if (args.MessageType == MpMessageType.video.ToString()) { var videoId = int.Parse(args.VideoID.ToString()); var video = yilidb.FindOne <MpMediaVideo>("SELECT TOP 1 * FROM MpMediaVideos WHERE ID=" + videoId, null, false); if (video == null) { throw new Exception(string.Format("视频{0}不存在", args.VideoName)); } try { result = await GroupMessageApi.SendVideoGroupMessageByOpenIdAsync((await StaticObjects.GetAccessToken(account.TaskAccessToken)).access_token, video.Title, video.Description, args.VideoMediaID, $"MpMessage{args.Id}", Senparc.Weixin.Config.TIME_OUT, openIds.ToArray()); } catch { try { result = await GroupMessageApi.SendVideoGroupMessageByOpenIdAsync((await StaticObjects.GetAccessToken(account.TaskAccessToken, 1)).access_token, video.Title, video.Description, args.VideoMediaID, $"MpMessage{args.Id}", Senparc.Weixin.Config.TIME_OUT, openIds.ToArray()); } catch { } } } else if (args.MessageType == MpMessageType.voice.ToString()) { try { result = await GroupMessageApi.SendGroupMessageByOpenIdAsync((await StaticObjects.GetAccessToken(account.TaskAccessToken)).access_token, GroupMessageType.voice, args.VoiceMediaID, $"MpMessage{args.Id}", Senparc.Weixin.Config.TIME_OUT, openIds.ToArray()); } catch { try { result = await GroupMessageApi.SendGroupMessageByOpenIdAsync((await StaticObjects.GetAccessToken(account.TaskAccessToken, 1)).access_token, GroupMessageType.voice, args.VoiceMediaID, $"MpMessage{args.Id}", Senparc.Weixin.Config.TIME_OUT, openIds.ToArray()); } catch { } } } else if (args.MessageType == MpMessageType.image.ToString()) { try { result = await GroupMessageApi.SendGroupMessageByOpenIdAsync((await StaticObjects.GetAccessToken(account.TaskAccessToken)).access_token, GroupMessageType.image, args.ImageMediaID, $"MpMessage{args.Id}", Senparc.Weixin.Config.TIME_OUT, openIds.ToArray()); } catch { try { result = await GroupMessageApi.SendGroupMessageByOpenIdAsync((await StaticObjects.GetAccessToken(account.TaskAccessToken, 1)).access_token, GroupMessageType.image, args.ImageMediaID, $"MpMessage{args.Id}", Senparc.Weixin.Config.TIME_OUT, openIds.ToArray()); } catch { } } } else if (args.MessageType == MpMessageType.mpnews.ToString()) { try { result = await GroupMessageApi.SendGroupMessageByOpenIdAsync((await StaticObjects.GetAccessToken(account.TaskAccessToken)).access_token, GroupMessageType.mpnews, args.ArticleMediaID, $"MpMessage{args.Id}", Senparc.Weixin.Config.TIME_OUT, openIds.ToArray()); } catch { try { result = await GroupMessageApi.SendGroupMessageByOpenIdAsync((await StaticObjects.GetAccessToken(account.TaskAccessToken, 1)).access_token, GroupMessageType.mpnews, args.ArticleMediaID, $"MpMessage{args.Id}", Senparc.Weixin.Config.TIME_OUT, openIds.ToArray()); } catch { } } } else if (args.MessageType == MpMessageType.mpmultinews.ToString()) { try { result = await GroupMessageApi.SendGroupMessageByOpenIdAsync((await StaticObjects.GetAccessToken(account.TaskAccessToken)).access_token, GroupMessageType.mpnews, args.ArticleGroupMediaID, $"MpMessage{args.Id}", Senparc.Weixin.Config.TIME_OUT, openIds.ToArray()); } catch { try { result = await GroupMessageApi.SendGroupMessageByOpenIdAsync((await StaticObjects.GetAccessToken(account.TaskAccessToken, 1)).access_token, GroupMessageType.mpnews, args.ArticleGroupMediaID, $"MpMessage{args.Id}", Senparc.Weixin.Config.TIME_OUT, openIds.ToArray()); } catch { } } } return(result); }