zoukankan      html  css  js  c++  java
  • C#微信公众号——消息处理

    ​当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL。

    一、接收POST请求,处理XML信息

        public void ProcessRequest(HttpContext context)
            {
                context.Response.ContentType = "text/plain";
                string postString = string.Empty;
                if (HttpContext.Current.Request.HttpMethod.ToUpper() == "POST")
                {
                    using (Stream stream = HttpContext.Current.Request.InputStream)
                    {
                        Byte[] postBytes = new Byte[stream.Length];
                        stream.Read(postBytes, 0, (Int32)stream.Length);
                        postString = Encoding.UTF8.GetString(postBytes);
                        Handle(postString);
                    }
                }
            }
            /// <summary>
            /// 处理信息并应答
            /// </summary>
            private void Handle(string postStr)
            {
                messageHelp help = new messageHelp();
                string responseContent = help.ReturnMessage(postStr);
                HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;
                HttpContext.Current.Response.Write(responseContent);
            }

    二、处理消息

    public class messageHelp
        {
            public string ReturnMessage(string postStr)
            {
                string responseContent = "";
                XmlDocument xmldoc = new XmlDocument();
                xmldoc.Load(new System.IO.MemoryStream(System.Text.Encoding.GetEncoding("UTF-8").GetBytes(postStr)));
                XmlNode MsgType = xmldoc.SelectSingleNode("/xml/MsgType");
                if (MsgType != null)
                {
                    switch (MsgType.InnerText)
                    {
                        case "event":
                            responseContent = EventHandle(xmldoc);//事件处理
                            break;
                        case "text":
                            responseContent = TextHandle(xmldoc);//接受文本消息处理break;
                    }
                }
                return responseContent;
            }
            //事件
            public string EventHandle(XmlDocument xmldoc)
            {
                string responseContent = "";
                XmlNode Event = xmldoc.SelectSingleNode("/xml/Event");
                XmlNode EventKey = xmldoc.SelectSingleNode("/xml/EventKey");
                XmlNode ToUserName = xmldoc.SelectSingleNode("/xml/ToUserName");
                XmlNode FromUserName = xmldoc.SelectSingleNode("/xml/FromUserName");
                if (Event != null)
                {
                    //菜单单击事件
                    if (Event.InnerText.Equals("CLICK"))
                    {
                        Helper.GetUserDetail(Helper.IsExistAccess_Token(), FromUserName.InnerText);//获取用户基本信息
                        if (EventKey.InnerText.Equals("12"))
                        {
                            responseContent = string.Format(ReplyType.Message_Text,
                                FromUserName.InnerText,
                                ToUserName.InnerText,
                                DateTime.Now.Ticks,
                                "欢迎查看工作动态");
                        }
                    }
                    else if (Event.InnerText.Equals("subscribe"))//关注公众号时推送消息
                    {
                        Helper.GetUserDetail(Helper.IsExistAccess_Token(), FromUserName.InnerText);//获取用户基本信息
                        responseContent = string.Format(ReplyType.Message_Text,
                            FromUserName.InnerText,
                            ToUserName.InnerText,
                            DateTime.Now.Ticks,
                            "欢迎关注XX公司");
                    }
                }
                return responseContent;
            }
            //接受文本消息
            public string TextHandle(XmlDocument xmldoc)
            {
                string responseContent = "";
                XmlNode ToUserName = xmldoc.SelectSingleNode("/xml/ToUserName");//接收方帐号(收到的OpenID)
                XmlNode FromUserName = xmldoc.SelectSingleNode("/xml/FromUserName");//开发者微信号
                XmlNode Content = xmldoc.SelectSingleNode("/xml/Content");
                if (Content != null)
                {
                    responseContent = string.Format(ReplyType.Message_Text,
                       FromUserName.InnerText,
                        ToUserName.InnerText,
                        DateTime.Now.Ticks,
                        "欢迎使用微信公众号,如有任何疑问请联系我们客服人员!");
                }
                return responseContent;
            }
           //回复类型
        public class ReplyType
        {
            /// <summary>
            /// 普通文本消息
            /// </summary>
            public static string Message_Text
            {
                get
                {
                    return @"<xml>
                                <ToUserName><![CDATA[{0}]]></ToUserName>
                                <FromUserName><![CDATA[{1}]]></FromUserName>
                                <CreateTime>{2}</CreateTime>
                                <MsgType><![CDATA[text]]></MsgType>
                                <Content><![CDATA[{3}]]></Content>
                                </xml>";
                }
            }
        }
  • 相关阅读:
    rs
    stm32f767 usoc3
    stm32f767 RTT 日志
    stm32f767 标准库 工程模板
    stm32f767 HAL 工程模板
    docker tab 补全 linux tab 补全
    docker anconda 依赖 下载 不了
    docker run 常用 指令
    linux scp 命令
    Dockerfile 常用参数说明
  • 原文地址:https://www.cnblogs.com/zhangjd/p/5701265.html
Copyright © 2011-2022 走看看