Exemplo n.º 1
0
        private Task ParseMessageAsync(NotifyMessageContext context)
        {
            if (string.IsNullOrEmpty(context.Body))
            {
                return(Task.CompletedTask);
            }

            XmlDocument doc = new XmlDocument();

            doc.LoadXml(context.Body);
            XmlElement rootElement = doc.DocumentElement;
            var        msgType     = rootElement.SelectSingleNode("MsgType").InnerText;

            if (msgType != MsgTypes.Event)
            {
                var commonContext = new CommonMessageContext()
                {
                    Body        = context.Body,
                    HttpContext = context.HttpContext,
                    AppConfig   = context.AppConfig,
                    MsgType     = msgType
                };

                if (MsgTypeMaps.MsgMaps.TryGetValue(msgType, out var messageType))
                {
                    commonContext.Message = WeChatNotifyMessage.FromXml(context.Body, messageType);
                }

                this.notifier.OnCommonMessage(commonContext);
            }
            else
            {
                var evt          = rootElement.SelectSingleNode("Event").InnerText;
                var eventContext = new EventMessageContext()
                {
                    Body        = context.Body,
                    HttpContext = context.HttpContext,
                    AppConfig   = context.AppConfig,
                    Event       = evt
                };

                if (MsgTypeMaps.EventMaps.TryGetValue(msgType, out var messageType))
                {
                    eventContext.Message = WeChatNotifyMessage.FromXml(context.Body, messageType);
                }
                this.notifier.OnEventMessage(eventContext);
            }

            return(Task.CompletedTask);
        }
Exemplo n.º 2
0
        public Task HandleMessageAsync(NotifyMessageContext context)
        {
            var request = context.HttpContext.Request;

            if (string.Compare(request.Method, "get", true) == 0 &&
                request.Query.ContainsKey("signature"))
            {
                return(notifier.OnCheckMessage(new CheckMessageContext()
                {
                    HttpContext = context.HttpContext,
                    AppConfig = context.AppConfig
                }));
            }
            return(ParseMessageAsync(context));
        }