• 微信开发 之 接受信息与回复信息


      在第一步中  我们配置好了服务器,然后当我们的公众号的使用用户发送信息时,就会把信息发送到服务器中,然后我们在服务器中创建个页面接受发送到的信息,再根据用户发送到的信息回复我们想要给用户回复的信息就好。

      用户发送过来的信息格式为

      

    <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>

      其中 MsgType 是用户发送过来的信息的类型 有文本,图片,语音之类的。

      创建个一般处理程序接受发过来的信息,代码如下

      

      public void ProcessRequest(HttpContext context)
            {
                string postString = string.Empty;
                if (HttpContext.Current.Request.HttpMethod.ToUpper() == "POST")
                {
                    string weixin = "";//获取xml数据
                    weixin = PostInput();//自定义方法,获取xml数据
                    LogHelper.LogHelper.WriteLog(typeof(_Default), "收到信息:" + weixin);
    
                    if (!string.IsNullOrEmpty(weixin))
                    {
                        ResponseMsg(weixin, context);//根据获取的内容,自动回复一定的内容。
                    }
                }
                context.Response.ContentType = "text/plain";
    
            }
            private string PostInput()/// 获取post请求数据
            {
                Stream s = System.Web.HttpContext.Current.Request.InputStream;
                byte[] b = new byte[s.Length];
                s.Read(b, 0, (int)s.Length);
                return Encoding.UTF8.GetString(b);
            }

     LogHelper类是我创建的日志类,用的是log4net,大家可以看我的另一篇博文

      http://www.cnblogs.com/mchuang/p/5075106.html

       ResponseMsg方法根据获取的内容,自动回复一定的内容。
      private void ResponseMsg(string weixin, HttpContext context)// 服务器响应微信请求
            {
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(weixin);//读取xml字符串
                XmlElement root = doc.DocumentElement;
                XmlNode MsgType = root.SelectSingleNode("MsgType");//获取收到的消息类型。文本(text),图片(image),语音等。
                string messageType = MsgType.InnerText;
                try
                {
                    switch (messageType)
                    {
                        case "text":
                            context.Response.Write(GetResponseMessage(weixin));
                            break;
                        case "image":
    
                            break;
                        case "voice":
                            break;
                        case "vedio":
                            break;
                        case "location":
                            break;
                        case "link":
                            break;
                        case "event":
                            context.Response.Write(GetLoction(weixin));
                            break;
                        default:
                            break;
                    }
                }
                catch (Exception)
                {
                }
            }

      这里根据类型进行回复,回复的格式可以在公众平台上看到

      

    <xml>
    <ToUserName><![CDATA[toUser]]></ToUserName>
    <FromUserName><![CDATA[fromUser]]></FromUserName>
    <CreateTime>12345678</CreateTime>
    <MsgType><![CDATA[text]]></MsgType>
    <Content><![CDATA[你好]]></Content>
    </xml>

      然后我们就拼接成这个格式,发送回去就可以了

      

      public static string GetResponseMessage(string weixin)
            {
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(weixin);//读取xml字符串
                XmlElement root = doc.DocumentElement;
                string message = "对不起,无法识别您发送的命令。请发送“帮助”来获取已经实现的功能。";
                string resxml = "";
                var model = new
                {
                    ToUserName = root.SelectSingleNode("ToUserName").InnerText,//本公众账号
                    FromUserName = root.SelectSingleNode("FromUserName").InnerText,//用户
                    CreateTime = root.SelectSingleNode("CreateTime").InnerText,//创建时间
                    Content = root.SelectSingleNode("Content").InnerText,//消息内容
                    MsgId = root.SelectSingleNode("MsgId").InnerText//消息ID,64位整型
                };//获取xml数据里各个结点的内容。
                resxml += "<xml><ToUserName><![CDATA[" + model.FromUserName + "]]></ToUserName><FromUserName><![CDATA[";
                resxml += model.ToUserName + "]]></FromUserName><CreateTime>" + (DateTime.Now) + "</CreateTime>";
                if (model.Content == "帮助")
                {
                    message = "目前实现功能有: ";
                    message += "
    1,翻译功能。只要发送“翻译”+空格+需要翻译的内容,即可实现翻译功能。";
                    message += "
    2,天气预报。发送 “天气”+空格+城市名 ,即可查询该城市6天内天气预报。如发送“天气 北京”。";
                }
                if (model.Content == "天气")
                {
                    message = "当前天气 9 ℃";
                    message += "当前天气 9 ℃";
                    message += "当前天气 9 ℃";
                    message += "当前天气 9 ℃";
                    message += "当前天气 9 ℃";
                    message += "当前天气 9 ℃";
                    message += "当前天气 9 ℃";
    
                }
    
                else if (model.Content.Trim().StartsWith(""))
                {
    
                }
    
                else
                {
                    message = "对不起,无法识别您发送的命令。请发送“帮助”来获取已经实现的功能。";
                }
    
                resxml += "<MsgType><![CDATA[text]]></MsgType><Content><![CDATA[" + message + "]]></Content><FuncFlag>0</FuncFlag></xml>";
                LogHelper.LogHelper.WriteLog(typeof(_Default), "回复信息:" + resxml);
                return resxml;//回复内容有了哦。基本实现了
            }

      

    喜欢的朋友请帮忙点个赞!!!
  • 相关阅读:
    HTTP2.0 原理详解
    Who do you want to be bad? (谁会是坏人?)人工智能机器小爱的问话
    有感于比尔盖茨:人工智能可以创造10倍于微软的价值
    人工智能:“我的心如同我的良梦,最多的是杀不完的人” —— 机器人小冰
    程序员之殇 —— (Are you afraid of me? Don't be.)灵感=神秘感
    程序员之殇 —— One program, One king (血月)
    程序员之殇 —— (The Beginning of the End)噩梦、崩坏
    WPF 从当前层次遍历查找 子控件及父控件
    c# 获取图像像素
    Thread类
  • 原文地址:https://www.cnblogs.com/mchuang/p/5132326.html
Copyright © 2020-2023  润新知