示例#1
0
 public CleanController(WechatContext context, HttpProxy http, ILoggerFactory factory)
 {
     _context    = context;
     _http       = http;
     _logFactory = factory;
     _log        = factory.CreateLogger("app");
 }
示例#2
0
        private void init()
        {
            var builder = new DbContextOptionsBuilder <WechatContext>();

            builder.UseSqlServer(config.GetConnectionString("WechatContext"));
            _db = new WechatContext(builder.Options);

            _http = new HttpProxy();
        }
示例#3
0
        public static CleanTask CreateTask(HttpProxy proxy, Account account, WechatContext context)
        {
            var now       = DateTime.Now;
            var url       = Urls.SessionUrl + TimeTic(now);
            var result    = proxy.Get(url);
            var sessionId = result.Split(new[] { "\"" }, StringSplitOptions.None)[1];
            var task      = new CleanTask
            {
                Id         = sessionId,
                Creator    = account,
                CreateTime = now
            };

            context.Add(task);
            context.SaveChanges();
            return(task);
        }
        public ActionResult PostAsync(WechatMsgRequestModel model)
        {
            if (model.RequestContent == null)
            {
                using (var reader = new StreamReader(Request.InputStream))
                {
                    Logger.Debug($"Request.InputStream Length:{Request.InputStream.Length}");
                    model.RequestContent = reader.ReadToEnd();
                    Logger.Debug($"RequestContent from Request.InputStream:{model.RequestContent}");
                }
            }
            if (string.IsNullOrEmpty(model.RequestContent))
            {
                return(Content("RequestContent 为空"));
            }
            var context = new WechatContext(model);

            return(Wechat(context));
        }
        public ActionResult PostAsync(WechatMsgRequestModel model)
        {
            //自定义MessageHandler,对微信请求的详细判断操作都在这里面。
            //var postModel = new PostModel
            //{
            //    Nonce = model.Nonce,
            //    Timestamp = model.Timestamp,
            //    Signature = model.Signature,
            //    Msg_Signature = model.Msg_Signature,
            //    AppId = WeChatConsts.AppId,
            //    EncodingAESKey = WeChatConsts.AESKey,
            //    Token = WeChatConsts.Token,
            //};
            if (model.RequestContent == null)
            {
                using (var reader = new StreamReader(Request.InputStream))
                {
                    logger.Debug($"Request.InputStream Length:{Request.InputStream.Length}");
                    model.RequestContent = reader.ReadToEnd();
                    logger.Debug($"RequestContent from Request.InputStream:{model.RequestContent}");
                }
            }
            if (String.IsNullOrEmpty(model.RequestContent))
            {
                return(Content("RequestContent 为空"));
            }
            //var doc = System.Xml.Linq.XDocument.Parse(model.RequestContent);
            //logger.Debug("doc:" + doc.ToString());
            //var messageHandler = new WechatMsgHandler(doc, postModel);
            //#region 设置消息去重
            ///* 如果需要添加消息去重功能,只需打开OmitRepeatedMessage功能,SDK会自动处理。
            // * 收到重复消息通常是因为微信服务器没有及时收到响应,会持续发送2-5条不等的相同内容的RequestMessage
            // */
            //messageHandler.OmitRepeatedMessage = true;//默认已经开启,此处仅作为演示,也可以设置为false在本次请求中停用此功能
            //#endregion
            //logger.Debug("收到微信消息:" + Common.ConverterHelper.ObjectToJson(messageHandler.RequestDocument));
            //messageHandler.Execute();
            //logger.Debug("返回的消息:" + Common.ConverterHelper.ObjectToJson(messageHandler.ResponseDocument));
            //return Wechat(messageHandler);
            var context = new WechatContext(model);

            return(Wechat(context));
        }
示例#6
0
 public AdminController(WechatContext db)
 {
     _db = db;
 }
 public ContentResult Wechat(WechatContext wechatContext)
 {
     return(Content(wechatContext.GetResponse()));
 }
示例#8
0
        /// <summary>
        /// Get the wechat users and save to database.
        /// </summary>
        /// <returns></returns>
        public static bool GetWechatUserToDB()
        {
            string        token   = AccessTokenContainer.TryGetToken(corpID, corpSecret);
            WechatContext context = new WechatContext();

            //todo: 清空现有用户数据

            //获取微信企业号内的用户架构信息
            Dictionary <string, List <Tag> > _userTags  = new Dictionary <string, List <Tag> >();
            Dictionary <int, List <Tag> >    _partyTags = new Dictionary <int, List <Tag> >();

            Dictionary <string, User> Users = new Dictionary <string, User>();

            //查找所有Tag并插入数据库
            GetTagListResult tagList = MailListApi.GetTagList(token);

            if (tagList != null && tagList.taglist != null && tagList.taglist.Count > 0)
            {
                foreach (var tag in tagList.taglist)
                {
                    int tagId = -1;
                    if (Int32.TryParse(tag.tagid, out tagId))
                    {
                        Tag tempTag = new Tag()
                        {
                            TagId = tagId, TagName = tag.tagname
                        };

                        GetTagMemberResult tagMemberResult = MailListApi.GetTagMember(token, tagId);
                        if (tagMemberResult != null && tagMemberResult.partylist != null && tagMemberResult.partylist.Length > 0)
                        {
                            foreach (int party in tagMemberResult.partylist)
                            {
                                if (!_partyTags.ContainsKey(party))
                                {
                                    _partyTags[party] = new List <Tag>();
                                }

                                _partyTags[party].Add(tempTag);
                            }
                        }

                        if (tagMemberResult != null && tagMemberResult.userlist != null && tagMemberResult.userlist.Count > 0)
                        {
                            foreach (var tagUser in tagMemberResult.userlist)
                            {
                                if (!_userTags.ContainsKey(tagUser.userid))
                                {
                                    _userTags[tagUser.userid] = new List <Tag>();
                                }

                                _userTags[tagUser.userid].Add(tempTag);
                            }
                        }

                        context.Tags.Add(tempTag);
                    }
                }
                context.SaveChanges();
            }

            //查找所有部门并插入数据库
            GetDepartmentListResult departmentList = MailListApi.GetDepartmentList(token);

            if (departmentList != null && departmentList.department != null)
            {
                foreach (var party in departmentList.department)
                {
                    var tempParty = new Party()
                    {
                        PartyId = party.id, Name = party.name, Order = party.order, ParentPartyId = party.parentid
                    };

                    //此处需要查询所有的Tag保存到库中
                    if (_partyTags.ContainsKey(party.id))
                    {
                        tempParty.PartyTags = _partyTags[party.id].Select(f => new PartyTag()
                        {
                            PartyId = tempParty.PartyId, TagId = f.TagId
                        }).ToList();
                    }

                    //根据部门查找所有用户并存入缓存
                    GetDepartmentMemberInfoResult memberInfos = MailListApi.GetDepartmentMemberInfo(token, party.id, 1, 0);
                    if (memberInfos != null && memberInfos.userlist != null && memberInfos.userlist.Count > 0)
                    {
                        foreach (var member in memberInfos.userlist)
                        {
                            if (!Users.ContainsKey(member.userid))
                            {
                                Users[member.userid] = new User()
                                {
                                    Avatar   = member.avatar,
                                    Email    = member.email,
                                    Gender   = member.gender,
                                    Mobile   = member.mobile,
                                    Name     = member.name,
                                    Position = member.position,
                                    Status   = member.status,
                                    UserId   = member.userid,
                                    Weixinid = member.weixinid,
                                    UserTags = (_userTags.ContainsKey(member.userid) && _userTags[member.userid].Count > 0) ? _userTags[member.userid].Select(f => new UserTag()
                                    {
                                        UserId = member.userid, TagId = f.TagId
                                    }).ToList() : null
                                };
                            }
                            Users[member.userid].UserPartys.Add(new UserParty()
                            {
                                PartyId = tempParty.PartyId, UserId = member.userid
                            });
                        }
                    }

                    context.Partys.Add(tempParty);
                }
                context.SaveChanges();
            }

            if (Users != null && Users.Count > 0)
            {
                foreach (var user in  Users.Values)
                {
                    context.Users.Add(user);
                }

                context.SaveChanges();
            }

            return(true);
        }