public async Task <bool> AddMessage(WechatMPRequestBase msg) { string key = String.Empty; if (msg is WechatMPRequestEventBase e) { key = $"{e.FromUserOpenId}{e.CreateTime}"; } else { key = msg.MsgId.ToString(); } if (await _cache.Add(key, DateTimeOffset.Now.AddMinutes(5))) { return(true); } else { return(false); } }
/// <summary> /// 解码微信服务器推送过来的消息 /// </summary> /// <param name="xmlData">必须是解密后的xml数据</param> /// <returns></returns> public ResultReturn <WechatMPRequestBase> DecodeMPRequestMsg(string xmlData) { var xml = new XmlDocument(); try { xml.LoadXml(xmlData); } catch (Exception e) { return(new FailResultReturn <WechatMPRequestBase>("解析xml错误")); } var msgType = xml.GetFirstNodeByTagName("MsgType").InnerText; WechatMPRequestBase result = null; switch (msgType) { case "text": { result = new WechatMPRequestText(); break; } case "image": { result = new WechatMPRequestImage(); break; } case "voice": { result = new WechatMPRequestVoice(); break; } case "video": { result = new WechatMPRequestVideo(); break; } case "shortvideo": { result = new WechatMPRequestShortVideo(); break; } case "location": { result = new WechatMPRequestLocation(); break; } case "link": { result = new WechatMPRequestLink(); break; } case "event": { var eventType = xml.GetFirstNodeByTagName("Event").InnerText; switch (eventType) { case "subscribe": { result = new WechatMPRequestSubscribe(); break; } case "SCAN": { result = new WechatMPRequestScan(); break; } case "LOCATION": { result = new WechatMPRequestReportLocation(); break; } case "CLICK": { result = new WechatMPRequestClick(); break; } case "VIEW": { result = new WechatMPRequestView(); break; } case "TEMPLATESENDJOBFINISH": { result = new WechatMPRequestTemplateMsgFinish(); break; } case "subscribe_msg_popup_event": { result = new WechatMPRequestSubscribeMsgResult(); break; } case "subscribe_msg_sent_event": { result = new WechatMPRequestSubscribeMsgSendResult(); break; } } break; } } if (result != null) { result.LoadFromXml(xml); return(new SuccessResultReturn <WechatMPRequestBase>(result)); } else { return(new FailResultReturn <WechatMPRequestBase>($"未知消息类型:{msgType}", 1000)); } }