原文地址:http://www.cnblogs.com/zknu/p/3402385.html

  趁着前两天写博客的激情,趁着小周末有空,周末都是倒头大睡的日子,不知道大家的周末有啥丰富的节目不啊,作为屌丝的程序员,我想大多都是下班就是换个地方上网罢了,周末就是在家办公而已。

  上一篇,我们已经成功验证URL的有效性,成为了开发者。没有验证成功的小伙伴,可以联系我哦,不一定能帮你验证通过,不过我可以告诉我我具体是怎么弄的一个过程,哈哈,或许能帮到你吧。
  在验证通过之后,我们还需要去选择开发者模式,登录微信公众平台的后台选择高级功能,然后再选择开发者模式,并且开启开发者模式。编辑模式和开发者模式两者之间是互斥的,两者之间只能选择一种,而我们要通过服务器来响应用户的请求就是选择开发者模式。
  首先我们这一篇的目的很明确,接收用户发给我们的信息,然后回复信息给用户,这一节,主要简单地实现分析用户发的是什么类型的信息,然后,简单的回复信息。回复信息的内容暂且就只会重复的回复一句。后面回复的具体内容再慢慢实现,各位小伙伴可以根据自己的业务需求进行分析回复。
  先来看看微信公众平台消息接口,我们先来了解一下微信公众平台API中消息接口的内容,每一个开放平台都肯定少不了API开发文档说明的,小伙伴们要习惯读开发者文档哦。

如上图,图可能有点小,小伙伴可以通过点击这里 查看详细的开发文档说明,上面消息推送就是指用户发送的信息微信服务器以 文本、图片、地理位置、链接、事件五种格式推送到我们自己的服务器。微信服务器也就是把用户发的信息以相对应类型的XML格式传到我们URL地址,例如文本消息:

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

View Code

我们服务器接收到的就是这XML格式的内容了。
  OK,接下来我们看 消息回复 ,从上图可以看到,我们紧支持文本、音乐、图文三种回复,微信服务器在5秒内收不到响应会断掉连接,用户收不到信息可能就是因为你服务器处理信息超过了5秒,所以到后面业务复杂的话,服务器要给力才行啊。
  可能会有些跟我一样的初学者,跟本不知道怎么接收到微信服务器发过来的内容,接收到又怎样处理,或者是无从下手,我也是从这样一步一步过来的,所以我比那些大牛更清楚初学者的痛苦了。上面我写了我的URL是http://cnblogs.com/zknu/weixin.aspx ,这很明显是一个页面地址是吧,微信服务器是怎么把内容传到我的服务器呢,它其实就相当于我们平时的页面提交地址一样,他只要这个地址后面加上内容就好了。所以,我们weixin.aspx页面的page_load是接收微信服务器发送内容的入口,那么在page_load里的方法应该怎么写呢?OK,先把代码贴出来:

        protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){//WeiXinAPI wx = new WeiXinAPI();string postStr = "";if (Request.HttpMethod.ToLower() == "post"){Stream s = System.Web.HttpContext.Current.Request.InputStream;byte[] b = new byte[s.Length];s.Read(b, 0, (int)s.Length);postStr = Encoding.UTF8.GetString(b);if (!string.IsNullOrEmpty(postStr))//请求处理{//wx.Handle(postStr);}else{// wx.Auth();}}else {// wx.Auth();}}}

  首先,Request.HttpMethod.ToLower() == "post" 判断提交的模式是不是post,因为当普通微信用户向公众账号发消息时,微信服务器将POST该消息到填写的URL上,跟着Stream s = System.Web.HttpContext.Current.Request.InputStream;接收数据流,byte[] b = new byte[s.Length];
 s.Read(b, 0, (int)s.Length); 定义字节数组并把数据流读到字节数组里去,postStr = Encoding.UTF8.GetString(b);把字节数据转换位string类型,然后我们就把postStr转换为XML,然后就可以读取到每个节点的内容了。接下来就是看怎么转换成XML文件并且读取每个节点的内容了。好,这部分相信把代码贴出来大家都比较容易懂得了。需要说明,这里的代码写法不规范,我们只是为了实现我们这个简单的的回复功能,而且让小伙伴们看到尽可能的代码,后面我们再慢慢把代码分离规范整理吧。

// 接收处理信息public void Handle(string postStr){XmlDocument doc = new XmlDocument();doc.LoadXml(postStr);XmlElement rooElement = doc.DocumentElement;string toUserName = rooElement.SelectSingleNode("ToUserName").InnerText;string fromUserName = rooElement.SelectSingleNode("FromUserName").InnerText;ReponseMsg(toUserName,fromUserName);}//回复信息private void ReponseMsg(string toUserName, string fromUserName){string Content = "欢迎您关注都是坤坤!我是坤坤,请问有什么可以帮到您吗?(" + DateTime.Now + ")";string resxml = @" <xml><ToUserName><![CDATA[" + fromUserName + @"]]></ToUserName><FromUserName><![CDATA[" + toUserName + @"]]></FromUserName><CreateTime>" + DateTime.Now.ToString("yyyyMMdd") + @"</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA["+Content+@"]]></Content></xml>";System.Web.HttpContext.Current.Response.Write(resxml);}

View Code

上面的代码中,我们只获取了XML文档中的toUserName和fromUserName,这里我们只要关心这两个就可以了,暂且先不管用户发过来的是什么类型的内容和具体什么内容,反正客户有发信息过来我们就回复给他。这里的toUserName就是只我们自己的微信,而fromUserName是用户的微信,反正我们不管他是什么,谁发来的我们就回复信息给谁距对了。回复消息方法里需要注意的是,toUserName填的就是我们上面获取到的fromUserName,最后,我们利用System.Web.HttpContext.Current.Response.Write(resxml);输出,Handle(postStr);我们在上面page_load的if (!string.IsNullOrEmpty(postStr))里面调用Handel这个方法就好了。OK,这样子下来就可以实现我们的简单自动回复功能了。
  附上我的微信公众号,希望大家关注一下,大家可以给我留言哦!

转载于:https://www.cnblogs.com/fcsh820/p/3404437.html

(转)微信公众平台开发02-接收信息及回复信息相关推荐

  1. 微信公众平台开发(十) 消息回复总结

    一.简介 微信公众平台提供了三种消息回复的格式,即文本回复.音乐回复和图文回复,在这一篇文章中,我们将对这三种消息回复的格式做一下简单讲解,然后封装成函数,以供读者使用. 二.思路分析 对于每一个PO ...

  2. 微信公众平台开发(十) 消息回复总结——用其xml模板

    一.简介 微信公众平台提供了三种消息回复的格式,即文本回复.音乐回复和图文回复,在这一篇文章中,我们将对这三种消息回复的格式做一下简单讲解,然后封装成函数,以供读者使用. 二.思路分析 对于每一个PO ...

  3. 微信公众平台开发(10) 消息回复总结

    一.简介 微信公众平台提供了三种消息回复的格式,即文本回复.音乐回复和图文回复,在这一篇文章中,我们将对这三种消息回复的格式做一下简单讲解,然后封装成函数,以供读者使用. 二.思路分析 对于每一个PO ...

  4. 微信公众平台开发(26) 消息回复总结

    原文: http://www.cnblogs.com/imaker/p/5491433.html 一.简介 微信公众平台提供了三种消息回复的格式,即文本回复.音乐回复和图文回复,在这一篇文章中,我们将 ...

  5. java实现客服转接_Java微信公众平台开发(9) 关键字回复以及客服接口实现

    我们在微信公众号的后台可以发现微信给我们制定了两种模式,一种是开发者模式(也就是我们一直在做的开发),还有一种模式是编辑模式,然而很蛋疼的是有些功能一旦我们切换到开发者模式下就无法使用了,比较典型的就 ...

  6. 微信回复服务器,Java微信公众平台开发(9) 关键字回复以及客服接口实现

    我们在微信公众号的后台可以发现微信给我们制定了两种模式,一种是开发者模式(也就是我们一直在做的开发),还有一种模式是编辑模式,然而很蛋疼的是有些功能一旦我们切换到开发者模式下就无法使用了,比较典型的就 ...

  7. Java微信公众平台开发(三)--接收消息的分类及实体的创建

    转自:http://www.cuiyongzhi.com/post/41.html 前面一篇有说道应用服务器和腾讯服务器是通过消息进行通讯的,并简单介绍了微信端post的消息类型,这里我们将建立消息实 ...

  8. 微信公众平台开发消息回复总结

     http://www.cnblogs.com/mchina/p/3364377.html   转载地址 微信公众平台开发(十) 消息回复总结 一.简介 微信公众平台提供了三种消息回复的格式,即文 ...

  9. 微信公众平台开发[1] —— 获取用户Openid及个人信息

    前言: 初次尝试微信公众号的开发,对于学习方法的探索都是来源于网上的博客.问答,对于参差不齐的信息,自己也是有苦说不出,抽出一点时间写点文章,既是对自己的学习总结,也希望给予同是菜鸟的学渣一点帮助 背 ...

  10. 《微信公众平台开发最佳实践》——第3章 基 础 接 口 3.1 接收用户消息

    本节书摘来自华章出版社<微信公众平台开发最佳实践>一 书中的第3章,第3.1节,作者:方倍工作室,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第3章 基 础 ...

最新文章

  1. 心血来潮学python
  2. caffe web demo 搭建
  3. C指针原理(4)-ATT汇编
  4. Java中的LongAdder和AtomicLong有什么区别?
  5. 开源docker轻量级管理平台shipyard部署(中文版)
  6. php session 机制,Cookie、Session机制详解及PHP中Session处理
  7. 用shiro框架实现注册登陆,让你快速理解shiro用法
  8. C# 图解教程 第四章 类的基本概念
  9. pcre安装_Nginx | Nginx的介绍和安装
  10. 历史上的甲子年灾难有哪些?
  11. 用小乌龟git解决冲突之后,再提交,出现自己没用动过的文件
  12. 使用Tesseract-OCR识别图片中的文字并生成双层PDF
  13. 深度学习、机器学习面试问题总结
  14. PHP编写添加学生信息,添加学生信息并显示(示例代码)
  15. 计算机查看iphone照片,苹果手机上的图片如何在电脑上查看
  16. 3.3 RESET and Initialization Procedure
  17. php手册经常见到,什么是“二进制安全”?
  18. python彩蛋_Python的2个彩蛋
  19. android 开发英语单词统计
  20. ESIM模拟器生成事件使用流程

热门文章

  1. LeetCode5. 最长回文子串
  2. 两个相同矩形脉冲卷积_两个矩形脉冲的卷积
  3. micropython是什么意思_MicroPython到底是啥-百度经验
  4. 北京国际大数据交易所成立,采用区块链技术分离数据所有权
  5. 波卡生态跨链隐私中间件协议Raze Network与社区DeFi平台MANTRA DAO达成合作
  6. Digix联合创始人:在接下来的12个月中 比特币将被称为真正的价值存储
  7. USDC流通量已经超过33亿
  8. SAP License:HANA在线日志被误删后如何恢复?
  9. SAP License:ERP概述
  10. Hello log4net——做一个实用好用的log4net的demo(转)