原创
car_5

要想托管微信用户消息处理以及开发者的事件推送,必须要启用微信服务器配置。进入微信公众平台左侧菜单开发者中心:

blob.png

Token自己随意设置一个字符串,EncodingAESKey使用微信后台自带的“随机生成”,暂时使用“明文模式”。

这里URL服务器地址使用Dos.WeChat在MVC里面建一个控制器方法:

using Dos.WeChat;
namespace UI.Controllers
{
    public class WeChatController
    {
        public ActionResult WeChatService()
        {
            if (!JoinToken.Join(new MsgCall()))
            {
                //签名验证未通过,请检查web.config配置
            }
            return View();
        }
    }
}

那么URL就可以填写:http://您的域名或公网IP地址+端口/WeChat/WeChatService


以上代码中的MsgCall()类需要在MVC中实现(类文件可以放在MVC层的Handler文件夹下):

using Dos.WeChat;
namespace UI.Handler
{
    public class MsgCall : IMsgCall
    {
        //处理文本消息
        public ResponseMsg TextMsgCall(RecTextMsg msg)
        {
            //回复文本消息
            var r = msg.GetTextResponse();
            r.Data = (TextMsgData)(string.Format("已收到您的消息!您的OpenId:{0}。您发送的内容为:{1}。",
                        msg.FromUserName, msg.Content));
            return r;
            //回复图文消息 
            //var r = msg.GetNewsResponse();
            //r.Data = new NewsMsgData
            //{
            //    //响应1条新闻信息
            //    Items = new List<NewsItem>
            //{
            //    new NewsItem
            //    {
            //        Description = "这是描述",
            //        Title = "这是标题",
            //        PicUrl = "http://www.itdos.com/1.jpg",
            //        Url = "http://www.itdos.com/"
            //    },
            //    new NewsItem
            //    {
            //        Description = "这是第二条描述",
            //        Title = "这是第二条标题",
            //        PicUrl = "http://www.itdos.com/2.jpg",
            //        Url = "http://www.itdos.net/"
            //    }
            //}
            //};
            //回复音乐消息
            //var r = msg.GetMusicResponse();
            //r.Data = new MusicMsgData
            //{
            //    Description = "这是描述",
            //    Title = "这是标题",
            //    MusicUrl = "http://ITdos.com/media/music/NothingInTheWorld.mp3",
            //    HQMusicUrl = "http://ITdos.com/media/music/NothingInTheWorld.mp3"
            //};
            //return r;
            //也可以转接多客服
            //var r = msg.GetTransferResponse();
            //r.Data = (TextMsgData)"转接多客服!";
            //return r;
        }
        //处理图片消息 
        public ResponseMsg ImageMsgCall(RecImgMsg msg)
        {
            var r = msg.GetTextResponse();
            r.Data = (TextMsgData)("收到您的图片了");
            return r;
        }
        //处理链接消息 
        public ResponseMsg LinkMsgCall(RecImgMsg msg)
        {
            var r = msg.GetTextResponse();
            r.Data = (TextMsgData)("收到您的链接了");
            return r;
        }
        //处理语音消息 
        public ResponseMsg VoiceMsgCall(RecImgMsg msg)
        {
            var r = msg.GetTextResponse();
            r.Data = (TextMsgData)("收到您的语音了");
            return r;
        }
        //处理事件
        public ResponseMsg EventMsgCall(RecEventMsg msg)
        {
            var r = msg.GetTextResponse();
            switch (msg.Event.ToLower())
            {
                //关注公众号事件
                case RecEventMsg.Subscribe:
                    r.Data = (TextMsgData)("欢迎关注本公众号!");
                    break;
                //菜单点击事件
                case RecEventMsg.Click:
                    if (msg.EventKey == "TestClick")
                    {
                        r.Data = (TextMsgData)("您点击了测试菜单按钮!");                        
                    }
                    break;
                //二维码扫描事件
                case RecEventMsg.Scan:
                    r.Data = (TextMsgData)("您扫描了二维码!场景值:" + msg.EventKey);
                    break;
             }
             return r;
        }
        ...等等其它接口处理方式一样
    }
}