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

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

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

  

<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 += "\n1,翻译功能。只要发送“翻译”+空格+需要翻译的内容,即可实现翻译功能。";
                message += "\n2,天气预报。发送 “天气”+空格+城市名 ,即可查询该城市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;//回复内容有了哦。基本实现了
        }

 

  

转载于:https://www.cnblogs.com/mchuang/p/5132326.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值