Esempio n. 1
0
        /// <summary>
        /// 执行消息回复
        /// </summary>
        /// <param name="MessageHandler"></param>
        /// <returns></returns>
        public string Excute()
        {
            var Request = HttpContext.Current.Request;


            string signature = Request["signature"];
            string timestamp = Request["timestamp"];
            string nonce     = Request["nonce"];
            string echostr   = Request["echostr"];

            string encrypt_type  = Request["encrypt_type"];  // aes 是安全模式。  null是明文模式
            string msg_signature = Request["msg_signature"]; //消息加密后 会有这个参数

            //解加密类
            Utils.Tencent.WXBizMsgCrypt wxcpt = new Utils.Tencent.WXBizMsgCrypt(_token, _EncodingAESKey, _appId);

            //获取xml
            Stream xmlStream = Request.InputStream;
            string postData  = "";

            using (StreamReader sr = new StreamReader(xmlStream))
            {
                postData = sr.ReadToEnd();
            }

            //收到的消息
            ReceiveMessage receiveMsg = null;

            //是否安全模式?
            if (encrypt_type == "aes")
            {
                string str = "";
                int    i   = wxcpt.DecryptMsg(msg_signature, timestamp, nonce, postData, ref str);
                if (i == 0)
                {
                    receiveMsg = XMLHelper.XMLDeserializer <ReceiveMessage>(new MemoryStream(Encoding.UTF8.GetBytes(str)));
                }
            }
            else
            {
                receiveMsg = XMLHelper.XMLDeserializer <ReceiveMessage>(new MemoryStream(Encoding.UTF8.GetBytes(postData)));
            }


            //避免重复接受
            if (receiveMsg.MsgId != null)
            {
                if (CacheHelper.GetCache(receiveMsg.MsgId) != null)
                {
                    return("");
                }
                CacheHelper.SetCache(receiveMsg.FromUserName + receiveMsg.CreateTime, "xx", new TimeSpan(0, 0, 1, 0));
            }



            //执行MessageHandler
            ReplyBaseMessage replyMsg = ExcuteMessageHandler(receiveMsg);

            if (replyMsg == null)
            {
                return("");
            }

            //是否安全模式?
            if (encrypt_type == "aes")
            {
                string relMsg     = XMLHelper.XMLSerializer <ReplyBaseMessage>(replyMsg);
                string EncryptMsg = "";
                //加密
                wxcpt.EncryptMsg(relMsg, timestamp, nonce, ref EncryptMsg);
                return(EncryptMsg);
            }
            else
            {
                return(XMLHelper.XMLSerializer <ReplyBaseMessage>(replyMsg));
            }
        }
Esempio n. 2
0
        private ReplyBaseMessage ExcuteMessageHandler(ReceiveMessage ReceiveMessage)
        {
            ReplyBaseMessage Reply = null;

            switch (ReceiveMessage.MsgType)
            {
            case "text":
                Reply = _MessageHandler.On_TextEvent(ReceiveMessage);
                break;

            case "image":
                Reply = _MessageHandler.On_ImageEvent(ReceiveMessage);
                break;

            case "voice":
                Reply = _MessageHandler.On_VoiceEvent(ReceiveMessage);
                break;

            case "video":
                Reply = _MessageHandler.On_VideoEvent(ReceiveMessage);
                break;

            case "shortvideo":
                Reply = _MessageHandler.On_ShortVideoEvent(ReceiveMessage);
                break;

            case "location":
                Reply = _MessageHandler.On_LocationEvent(ReceiveMessage);
                break;

            case "link":
                Reply = _MessageHandler.On_LinkEvent(ReceiveMessage);
                break;

            case "event":
                switch (ReceiveMessage.Event)
                {
                case "subscribe":
                    Reply = _MessageHandler.On_SubscribeEvent(ReceiveMessage);
                    break;

                case "unsubscribe":
                    Reply = _MessageHandler.On_UnSubscribeEvent(ReceiveMessage);
                    break;

                case "CLICK":
                    Reply = _MessageHandler.On_CLICKEvent(ReceiveMessage);
                    break;

                case "VIEW":
                    Reply = _MessageHandler.On_VIEWEvent(ReceiveMessage);
                    break;

                case "scancode_push":
                    Reply = _MessageHandler.On_Scancode_pushEvent(ReceiveMessage);
                    break;

                case "scancode_waitmsg":
                    Reply = _MessageHandler.On_Scancode_waitmsgEvent(ReceiveMessage);
                    break;

                case "pic_sysphoto":
                    Reply = _MessageHandler.On_Pic_sysphotoEvent(ReceiveMessage);
                    break;

                case "pic_photo_or_album":
                    Reply = _MessageHandler.On_Pic_photo_or_albumEvent(ReceiveMessage);
                    break;

                case "pic_weixin":
                    Reply = _MessageHandler.On_Pic_weixinEvent(ReceiveMessage);
                    break;

                case "location_select":
                    Reply = _MessageHandler.On_Location_selectEvent(ReceiveMessage);
                    break;

                default:
                    Reply = _MessageHandler.On_DefaultEvent(ReceiveMessage);
                    break;
                }
                break;

            default:
                Reply = _MessageHandler.On_DefaultEvent(ReceiveMessage);
                break;
            }

            if (Reply != null)
            {
                Reply.FromUserName = ReceiveMessage.ToUserName;
                Reply.ToUserName   = ReceiveMessage.FromUserName;
            }


            return(Reply);
        }