Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        /// <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));
            }
        }