예제 #1
0
        /// <summary>
        /// 解析服务器接收到的微信服务器推送过来的消息。
        /// </summary>
        /// <param name="message">服务器接收到的请求消息。</param>
        /// <returns>接收请求消息对象。</returns>
        public static IRequestMessage Parse(string message)
        {
            #region 参数校验

            if (string.IsNullOrEmpty(message))
            {
                throw new StringNullOrEmptyException(nameof(message));
            }

            #endregion

            #region 获取消息类型

            dynamic        xmlMsgObj   = new DynamicXml(message);
            string         msgTypeText = xmlMsgObj.MsgType.Value;
            RequestMsgType msgType     = EnumExtension.GetEnumItemByDescription <RequestMsgType>(msgTypeText);

            #endregion

            //如果不是 事件推送 则,
            if (msgType != RequestMsgType.Event)
            {
                return(GetRequestMessageByMsgType(msgType, message));
            }
            else
            {
                string eventTypeText          = xmlMsgObj.Event.Value;
                RequestMsgEventType eventType = EnumExtension.GetEnumItemByDescription <RequestMsgEventType>(eventTypeText);

                return(GetRequestEventMessageByEventType(eventType, message));
            }
        }
예제 #2
0
        /// <summary>
        /// 根据事件类型获取 <see cref="IRequestMessage"/> 。
        /// </summary>
        /// <param name="eventType">事件类型。</param>
        /// <param name="message">XML 消息字符串。</param>
        /// <returns>请求消息对象。</returns>
        private static IRequestMessage GetRequestEventMessageByEventType(RequestMsgEventType eventType, string message)
        {
            bool isExist = WeixinApp.MessageProcessConfig.EventMessageList.Any(m => m.EventType == eventType);

            //如果在配置里面不存在则不处理。
            if (!isExist)
            {
                return(null);
            }

            //如果响应事件消息类型集合中不存在则将类型放到字典中缓存,
            string typeName = $"Wlitsoft.Framework.WeixinSDK.Message.Request.Event.Request{eventType}EventMessage,Wlitsoft.Framework.WeixinSDK";
            Type   type     = Type.GetType(typeName, true, true);

            return((IRequestMessage)message.ToXmlObject(_requestEventMessageTypesCache.GetOrAdd(eventType, type)));
        }
 /// <summary>
 /// 初始化请求消息事件
 /// </summary>
 /// <param name="msgEvent">消息事件类型</param>
 /// <param name="doc">XML消息</param>
 public RequestMsgEventBase(RequestMsgEventType msgEvent, XDocument doc)
     : base(RequestMsgType.Event, doc)
 {
     Event = msgEvent;
 }
 /// <summary>
 /// 初始化 <see cref="EventMessageConfiguration"/> 类的新实例。
 /// </summary>
 /// <param name="eventType">事件类型。</param>
 /// <param name="weixinMessageProcessType">微信消息处理对象类型声明。</param>
 public EventMessageConfiguration(RequestMsgEventType eventType, Type weixinMessageProcessType)
     : base(weixinMessageProcessType)
 {
     this.EventType = eventType;
 }