/// <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)); } }
/// <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; }