public void Xml2RTextMessage()
        {
            XDocument xml = XDocument.Parse(@"<xml>
 <ToUserName><![CDATA[toUser]]></ToUserName>
 <FromUserName><![CDATA[fromUser]]></FromUserName> 
 <CreateTime>1348831860</CreateTime>
 <MsgType><![CDATA[text]]></MsgType>
 <Content><![CDATA[this is a test]]></Content>
 <MsgId>1234567890123456</MsgId>
 </xml>");
            RMessage  msg = RMessageFactory.CreateFromXml(xml);

            Assert.IsInstanceOfType(msg, typeof(RTextMessage));
            RTextMessage text = (RTextMessage)msg;

            Assert.AreEqual("toUser", text.ToUserName);
            Assert.AreEqual("fromUser", text.FromUserName);
            Assert.AreEqual(1348831860, text.CreateTime);
            Assert.AreEqual("text", text.MsgType);
            Assert.AreEqual("this is a test", text.Content);
            Assert.AreEqual("1234567890123456", text.MsgId);
        }
        public ActionResult WeChat()
        {
            XDocument xml = XDocument.Load(Request.InputStream);

            Tools.Log(xml.ToString(SaveOptions.DisableFormatting));//log
            //xml反序列化为对象
            Message msg = MessageFactory.CreateFromXml(xml);

            //业务处理,根据自己的业务规则进行处理
            if (msg.MsgType == MessageType.Text)
            {
                RTextMessage text = (RTextMessage)msg;
                //测试获取access_token接口
                if (text.Content == "t1")
                {
                    string AccessToken = BaseHelper.GetAccessToken();
                    Tools.Log("AccessToken:" + AccessToken);
                    return(new WeChatTextResult
                    {
                        FromUserName = text.ToUserName,
                        ToUserName = text.FromUserName,
                        CreateTime = DateTime.Now,
                        Content = text.Content + AccessToken
                    });
                }
                //测试图片上传接口
                if (text.Content == "t2")
                {
                    string res      = BaseHelper.UpLoadMediaFile(Tools.GetToken(), UpLoadMediaType.Image, Server.MapPath("~/mind.jpg"));
                    var    rightDef = new { type = "", media_id = "", created_at = 0 };//{"type":"TYPE","media_id":"MEDIA_ID","created_at":123456789}

                    var resObj = JsonConvert.DeserializeAnonymousType(res, rightDef);
                    return(new WeChatImageResult
                    {
                        CreateTime = DateTime.Now,
                        FromUserName = text.ToUserName,
                        ToUserName = text.FromUserName,
                        MediaId = resObj.media_id
                    });
                }

                //被动响应消息封装的类继承于ActionResult
                return(new WeChatTextResult
                {
                    FromUserName = text.ToUserName,
                    ToUserName = text.FromUserName,
                    CreateTime = DateTime.Now,
                    Content = text.Content
                });
            }
            else
            {
                if (msg.MsgType == MessageType.Image)
                {
                    RImageMessage img = (RImageMessage)msg;
                    //下载图片
                    string FilePath = BaseHelper.DownLoadMediaFile(Tools.GetToken(), img.MediaId, Server.MapPath("~/files/"));

                    Tools.Log("download:" + FilePath);

                    return(new WeChatTextResult
                    {
                        FromUserName = img.ToUserName,
                        ToUserName = img.FromUserName,
                        Content = "图片已存,文件名:" + FilePath,
                        CreateTime = DateTime.Now
                    });
                }
                return(Content(""));
            }
        }