
everyday
tnblog
在路上,我们生命得到了肯定,一路上,我们有失败也有成功,有泪水也有感动,有曲折也有坦途,有机遇也有梦想。一路走来,我们熟悉了陌生的世界,我们熟悉了陌生的面孔,遇人无数,匆匆又匆匆,有些成了我们忘不掉的背影,有些成了我们一生的风景。我笑,便面如春花,定是能感动人的,任他是谁。
今天我们主要讲解的内容是:微信公众号的接收与回复文本,图片,语音,图文消息内容等等系列操作(实则是对于Xml的写入和读取操作)
第一步:虽然是一个小小的操作,但是没有它,后面内容都无法完成的。就是在测试号管理处配置测试号的路径和token,如图:
如果报错:配置失败,则是我们后台需要重新配置生成token,然后回传服务器,后台代码如下:
- //新的公众号都要先配置token才能使用
- //配置微信公众号的token
- public ActionResult Index(string echostr)
- {
- Response.Write(echostr);
- Response.End();
- return View(echostr);
- }
注释:url:为自己注册服务器时发的短信里的ip地址,token:可随意设置。提示配置成功即可。
注意:更改代码后要本地发布项目,然后把最新数据更换到服务器上,手机上才有效果哦。
下面就是程序的后台代码部分啦。
第一步:我们可以在类库的工具类封装一个写微信推送消息的日志的方法,来记录开发过程语句。代码如下:
- //写微信推送消息的日志
- public class log
- {
- public static void Write(string content, string type, string remark)
- {
- string name = DateTime.Now.ToShortDateString().Replace("/", "-") + ".txt";
- //创建文件流写推送消息日志 地址为服务器的C盘的新建文件夹log
- using (FileStream fileStream = new FileStream("c:/log/" + name, FileMode.Append))
- {
- //写入
- using (StreamWriter streamWriter = new StreamWriter(fileStream))
- {
- streamWriter.WriteLine("消息内容:" + content);
- streamWriter.WriteLine("消息类型:" + type);
- streamWriter.WriteLine("消息备注:" + remark);
- streamWriter.WriteLine("消息时间:" + DateTime.Now);
- streamWriter.WriteLine("--------------------------------------------------------------");
- }
- }
- }
- }
第二步:根据微信公众号开发文档,我们需要在项目里新建一个类,封装推送回复消息的多个方法,代码如下。
- public class SendMsgTools
- {
- //计算时间差的方法
- public static long GetWxTime()
- {
- //设置初始时间
- DateTime start = new DateTime(1970, 1, 1);
- //获取当前时间,距开始时间的秒数
- long cur = (long)(DateTime.Now - start).TotalSeconds;
- return cur;
- }
- //回复文本消息
- public static string SendMsg(string toUser, string fromUser, string content)
- {
- string xml = string.Format(@"<xml>
- <ToUserName><![CDATA[{0}]]></ToUserName>
- <FromUserName><![CDATA[{1}]]></FromUserName>
- <CreateTime>{2}</CreateTime>
- <MsgType><![CDATA[text]]></MsgType>
- <Content><![CDATA[{3}]]></Content>
- <MsgId>1234567890123456</MsgId>
- </xml>", fromUser, toUser, GetWxTime(), content);
- xml = xml.Trim();
- return xml;
- }
- //回复图片
- public static string SendMsgImg(string toUser, string fromUser, string media_id)
- {
- string xml = string.Format(@"<xml>
- <ToUserName><![CDATA[{0}]]></ToUserName>
- <FromUserName><![CDATA[{1}]]></FromUserName>
- <CreateTime>{2}</CreateTime>
- <MsgType><![CDATA[image]]></MsgType>
- <Image>
- <MediaId><![CDATA[{3}]]></MediaId>
- </Image>
-
- </xml>", fromUser, toUser, GetWxTime(), media_id);
- xml = xml.Trim();
- return xml;
- }
- //回复语音消息
- public static string SendMsgVoice(string toUser, string fromUser, string media_id)
- {
- string xml = string.Format(@"<xml>
- <ToUserName><![CDATA[{0}]]></ToUserName>
- <FromUserName><![CDATA[{1}]]></FromUserName>
- <CreateTime>{2}</CreateTime>
- <MsgType><![CDATA[voice]]></MsgType>
- <Voice>
- <MediaId><![CDATA[{3}]]></MediaId>
- </Voice>
- </xml>", fromUser, toUser, GetWxTime(), media_id);
- xml = xml.Trim();
- return xml;
- }
- //回复图文消息
- public static string SendMsgNews(string toUser, string fromUser)
- {
- string xml = string.Format(@"<xml>
- <ToUserName><![CDATA[{0}]]></ToUserName>
- <FromUserName><![CDATA[{1}]]></FromUserName>
- <CreateTime>{2}</CreateTime>
- <MsgType><![CDATA[news]]></MsgType>
- <ArticleCount>2</ArticleCount>
- <Articles>
- <item>
- <Title><![CDATA[精品文章解析]]></Title>
- <Description><![CDATA[关于在mvc框架里对Excel表的导入,导出操作]]></Description>
- <PicUrl><![CDATA[http://image.tnblog.net/banner18.jpg]]></PicUrl>
- <Url><![CDATA[http://www.tnblog.net/xj/article/details/2265]]></Url>
- </item>
- <item>
- <Title><![CDATA[NET mvc Excel的导入导出解析]]></Title>
- <Description><![CDATA[讲解的内容是关于在mvc框架里对Excel表的导入,导出操作]]></Description>
- <PicUrl><![CDATA[http://www.tnblog.net/arcimg/15985459135/1cc73d90588d4cd5860ffa27cd4ba5d5.jpeg]]></PicUrl>
- <Url><![CDATA[www.tnblog.net/15985459135/article/details/2938]]></Url>
- </item>
- </Articles>
- </xml>", fromUser, toUser, GetWxTime());
- xml = xml.Trim();
- return xml;
- }
- }
注释:推送回复消息的的模块是参照微信开发文档写入,详情可参照开发文档,方便解读本文章。
思路:我们每个方法都需要服务器数据-->控制器-->回传数据
第三步,就是控制器定义参数,做一系列逻辑判断操作,然后回传数据,手机扫码查看效果。
调用封装的推送消息的方法,在home控制器里进行判断逻辑操作,代码如下:
- public ActionResult Index()
- {
- try
- {
- //接收微信推送的xml
- StreamReader streamReader = new StreamReader(Request.InputStream);
- string xml = streamReader.ReadToEnd();
- log.Write(xml, "", "记录微信推送服务内容");
- //xml取值
- XElement root = XElement.Parse(xml);
- //取出发送者
- string FromUserName = root.Element("FromUserName").Value;
- //取出开发者微信号
- string ToUserName = root.Element("ToUserName").Value;
- //取出消息类型
- string MsgType = root.Element("MsgType").Value;
-
- string result = "";
- //判断文本消息
- if (MsgType.ToLower() == "text")
- {
- //取出消息内容
- string Content = root.Element("Content").Value;
- if (Content == "yan") //关键字回复
- {
- result = SendMsgTools.SendMsgNews(ToUserName, FromUserName); //判断图文消息推送
- }
- else
- {
- result = SendMsgTools.SendMsg(ToUserName, FromUserName, Content);
- }
- }
-
- //判断处理点击菜单拉取消息时的事件推送
- else if (MsgType.ToLower() == "event")
- {
- //取出事件推送消息
- string Event = root.Element("Event").Value;
- //处理点击事件
- if (Event == "CLICK")
- {
- string EventKey = root.Element("EventKey").Value;
- if (EventKey == "wx_menu_mui" || EventKey == "wx_menu_vue")
- {
- result = SendMsgTools.SendMsgNews(ToUserName, FromUserName);
- }
- else
- {
- result = SendMsgTools.SendMsg(ToUserName, FromUserName, "暂时不支持该事件类型");
- }
- }
-
- }
- //判断图片消息
- else if (MsgType.ToLower() == "image")
- {
- //取出图片id
- string MediaId = root.Element("MediaId").Value;
- result = SendMsgTools.SendMsgImg(ToUserName, FromUserName, MediaId);
- }
- //判断语音消息
- else if (MsgType.ToLower() == "voice")
- {
- //取出语音id
- string MediaId = root.Element("MediaId").Value;
- result = SendMsgTools.SendMsgVoice(ToUserName, FromUserName, MediaId);
- }
- else
- {
- result = SendMsgTools.SendMsg(ToUserName, FromUserName, "暂时不支持该消息类型");
- }
- log.Write(result, "", "生成的xml");
- Response.Write(result);
- Response.End();
- }
- catch (Exception ex)
- {
- log.Write(ex.Message, "", "哎呀报错了");
- }
- return View();
- }
好啦,基本操作就着这些了。最后一步就是发布项目,然后把数据更新到自己服务器上就行了。
以上操作完成后,我们就可以扫一扫,发点文本内容,图片,语音,点击菜单的net子菜单都会有相关的内容推送回复。
大家可以扫一扫我的微信测试号哦。
然后在自己服务器的c盘下的log文件夹,查看日志。我自己关注,发了一些文字,图片,语音。参考内容如下图。
在服务器的日志文档里都清楚的记录了每一个手机端的操作。现在是不是感觉挺好玩的,加油

