栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

实例:用C#.NET手把手教你做微信公众号开发(2)--普通消息处理之文本

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

实例:用C#.NET手把手教你做微信公众号开发(2)--普通消息处理之文本

上一篇文章我们完成了自己的web服务器与微信公众号服务器的对接,本篇开始处理微信用户和服务器之间的互动交流。一个用户与公众号之间,无外乎用户向公众号发送信息、点击公众号里的菜单和链接,或者公众号向用户推送不同类型的信息。

用户微信客户端与你的服务器之间的信息互动流程参见下图:

首先讲解客户向微信公众号发送文本消息的处理方式。

文本消息常见应用:聊天机器人;知识库;在线翻译;客户需求反馈或投诉等。

用户发送的微信,经微信服务器处理后,形成如下XML格式发到你的服务器:


  
  
  1348831860
  
  
  1234567890123456

上面的各个关键字解释如下:

在接收到微信服务器发来的内容之后,首先由指定的接口网页AccessWx.aspx对信息类型进行判别,然后交给指定的消息处理类处理和回应。在上一篇介绍的AccessWx.aspx中完善下面这一段,增加本篇给出的文本消息处理环节。

			if(MsgType == "text")
			{
				//对用户发送的文本消息处理,使用QinMing.Weixin.MessageHandlerText命名空间下的TextMessageDeal类
				TextMessageDeal tmd = new TextMessageDeal();
				Response.Write(tmd.DealResult(weixinXML));
			}

在命名空间QinMing.Weixin.MessageHandlerText下新建一个类TextMessageDeal,用来处理微信服务器发来的文本消息。记得类源码文件要放在App_Code目录下!
QinMingWeixinMessageHandlerText.cs文件内容如下:(为了确保你拷过去的代码立即就能使用,我把尚未讲到的类先注释了,不过你在关注公众号后对它输入相应文字时是能收到对应的回复的,比如对公众号输入“段子”,立刻就能得到惊喜)

using System;
using System.Web;
using System.Xml;
using System.Text;
using QinMing.Config;
using QinMing.Weixin.ReturnContent;
//using QinMing.WeixinSendTemplateMessage;
//using QinMing.Joke;

namespace QinMing.Weixin.MessageHandlerText
{
	//文本消息处理
    public class TextMessageDeal :System.Web.UI.Page
    {

		public string DealResult(string weixinXML)
        {
            string content = DealText(weixinXML);  
            return content;
        }
        
        public string DealText(string weixinXML)
        {
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(weixinXML);
            XmlNodeList list = doc.GetElementsByTagName("xml");
            XmlNode xn = list[0];
            string FromUserName = xn.SelectSingleNode("//FromUserName").InnerText;   //关注用户的加密后openid
            string ToUserName = xn.SelectSingleNode("//ToUserName").InnerText;       //公众微信号原始ID
            string MsgType = xn.SelectSingleNode("//MsgType").InnerText;
            string contentrec = xn.SelectSingleNode("//Content").InnerText.ToString().Trim();
            string strresponse = "";
            
            //引用QinMing.Weixin.ReturnContent命名空间下的ReturnMsg类来生成固定格式的回应消息
			ReturnMsg rm = new ReturnMsg();
            switch (contentrec)
            {
                case "合伙人":
                    strresponse = rm.ReturnText(FromUserName, ToUserName, "您好!欢迎加盟降价联盟合伙人!nn点击此处进入推广海报获取页面" );
					break;	
				case "段子":
                    //GetJoke joke = new GetJoke();
					//strresponse = rm.ReturnText(FromUserName, ToUserName, joke.GetOneJokeText() );
					break;
				case "测试":
                    strresponse = rm.ReturnText(FromUserName, ToUserName, "您刚发送了测试" );
					break;
                default:
                    string content = "";
                    content = "欢迎光临降价联盟。";
                    strresponse = rm.ReturnText(FromUserName, ToUserName, content);
                    break;
            }
			
			//告知客服人员有新的留言,或者启动客服消息管理工单流程
			//QinMingWeixinSendTemplateMessage SendTempMsg = new QinMingWeixinSendTemplateMessage();
			//SendTempMsg.SendTempMsgRemind("客服人员的openid", "客户留言:" + contentrec, "");  
			
            return strresponse; 
        } 
    }
}

演示结果如下图:

不停的输入段子,就会有很多惊喜,都是精品。

上面的源码中用到了命名空间QinMing.Weixin.ReturnContent中的ReturnMsg类,来向微信用户发送格式化之后的消息,截止目前一共有六种消息,分别是文本、图片、语音、视频、音乐、图文,该类的源码如下:

QinMingWeixinReturnContent.cs

using System;

namespace QinMing.Weixin.ReturnContent
{
    public class ReturnMsg :System.Web.UI.Page
    {
        //向客户返回文本消息
		public string ReturnText(string FromUserName,string ToUserName,string content)
        {
            string strresponse =        "";
            strresponse = strresponse + "";
            strresponse = strresponse + "";
            strresponse = strresponse + "" + DateTime.Now.Ticks.ToString() + "";
            strresponse = strresponse + "";
            strresponse = strresponse + "";
            strresponse = strresponse + "";
            return strresponse;
        }
		
		//向客户返回图片消息
        public string ReturnImage(string FromUserName,string ToUserName,string ImageId)
        {
            string strresponse =        "";
            strresponse = strresponse + "";
            strresponse = strresponse + "";
            strresponse = strresponse + "" + DateTime.Now.Ticks.ToString() + "";
            strresponse = strresponse + "";
            strresponse = strresponse + "";
            strresponse = strresponse + "";
            strresponse = strresponse + "";
            strresponse = strresponse + "";
            return strresponse;
        }
		
		//向客户返回语音消息
        public string ReturnVoice(string FromUserName,string ToUserName,string VoiceId)
        {
            string strresponse =        "";
            strresponse = strresponse + "";
            strresponse = strresponse + "";
            strresponse = strresponse + "" + DateTime.Now.Ticks.ToString() + "";
            strresponse = strresponse + "";
            strresponse = strresponse + "";
            strresponse = strresponse + "";
            strresponse = strresponse + "";
            strresponse = strresponse + "";
            return strresponse;
        }
		
		//向客户返回视频消息
        public string ReturnVideo(string FromUserName, string ToUserName, string VideoId, string Title, string Description)
        {
            string strresponse =        "";
            strresponse = strresponse + "";
            strresponse = strresponse + "";
            strresponse = strresponse + "" + DateTime.Now.Ticks.ToString() + "";
            strresponse = strresponse + "";
            strresponse = strresponse + "";
            strresponse = strresponse + "";
            return strresponse;
        }
		
		//向客户返回音乐消息
        public string ReturnMusic(string FromUserName, string ToUserName, string Title, string Description,string MusicUrl, string HQMusicUrl, string MusicId)
        {
            string strresponse =        "";
            strresponse = strresponse + "";
            strresponse = strresponse + "";
            strresponse = strresponse + "" + DateTime.Now.Ticks.ToString() + "";
            strresponse = strresponse + "";
            strresponse = strresponse + "";
	        strresponse = strresponse + "<![CDATA[" + Title + "]]>";
            strresponse = strresponse + "";
            strresponse = strresponse + "";
            strresponse = strresponse + "";
            strresponse = strresponse + "";
            strresponse = strresponse + "";
            strresponse = strresponse + "";
            return strresponse;
        }
        
        //向客户返回图文消息,因微信限制,现在只能返回单图文形式
		public string ReturnTuWenPre(string FromUserName, string ToUserName, string Title, string Description, string PicUrl, string Url)
        {
			string strresponse =        "";
			strresponse = strresponse + "";
			strresponse = strresponse + "";
			strresponse = strresponse + "" + DateTime.Now.Ticks.ToString() + "";
			strresponse = strresponse + "";
			strresponse = strresponse + "1";
			strresponse = strresponse + "";
			strresponse = strresponse + "";
			strresponse = strresponse + "<![CDATA["+ Title+ "]]>";
			strresponse = strresponse + ""; 
			strresponse = strresponse + "";
			strresponse = strresponse + "";
			strresponse = strresponse + ""; 
			strresponse = strresponse + "";
			strresponse = strresponse + "";
			return strresponse;
        }

    }
}

举其中一个例子来解释格式化文本的内涵,如返回图片信息,从自己的服务器向微信服务器发送如下格式的XML串。


  
  
  12345678
  
  
    
  

字段解释如下:

更多解释可以参考:回复文本消息 | 微信开放文档 (qq.com) 

看到这里,感觉微信公众号开发是不是也就那么回事,没有那么高大上。

上面举的例子是微信用户向公众号发送文本,返回的也是文本的案例,当然你也可以返回6中不同形式的信息。比如用户发送音乐,你就向ta推送一首歌曲;用户发送视频,你就向ta推送一段视频;用户发送想买XX,你就向ta推送一个购物链接。这都可以和自己服务器上的海量数据存储结合起来,在用搜索引擎或人工智能,就是一个很全面的机器人应用啦,是不是很酷?

如果感觉有收获,请来个赞。下篇介绍图片消息处理,敬请关注。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/910762.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号