如题,我们在使用像中国移动等公众号时,可以通过输入一些文本内容来查询我们需要的信息,实现我们“提问”,公众号自动“回答”,将微信公众号接入我们自己的网站,通过微信将消息转发给用户。
准备在上篇文章-【微信开发】开启开发者模式中,我们已经使用开发者模式绑定了我们自己的服务,完成了开发者身份的验证,这次需要添加的是对用户信息处理的方法。
微信进行开发者身份验证是会向填写的服务器发送一个get请求,而用户发送的消息则是向服务器发送一个post请求,也就是说如何使用同一个服务器地址,同时可以响应不同类型的请求。
[HttpGet] [ActionName("Index")] public ActionResult Get() {} [HttpPost] [ActionName("Index")] public ActionResult Post() {}通过注解的方式,实现了不同的请求方式跳转到不同的方法,访问的却是同一个地址:http://localhost:7388/WeiChatTest/Index
开发微信公众平台发给开发者后台的是XML格式的数据,如粉丝向公众号发送“Hello”,开发者后台接收到的是:
<xml> <ToUserName><![CDATA[公众号]]></ToUserName> <FromUserName><![CDATA[粉丝号]]></FromUserName> <CreateTime>1460537339</CreateTime>//时间戳,发送时间 <MsgType><![CDATA[text]]></MsgType>//消息类型 <Content><![CDATA[Hello]]></Content>//消息内容 <MsgId>6272960105994287618</MsgId>//消息ID,为了标识消息,微信后台系统自动产生 </xml>同样的,开发者后台返回的消息,也要符合上面的XML数据格式。微信支持除文本外,如图片、语音、视频等消息类型,为了便于上手,这次只使用文本消息类型来说明,基本的代码如下所示:
public ActionResult Post() { //接收数据 System.IO.StreamReader reader = new System.IO.StreamReader(Request.InputStream); String xmlData = reader.ReadToEnd(); XElement xdoc = XElement.Parse(xmlData); //解析XML var toUserName = xdoc.Element("ToUserName").Value; var fromUserName = xdoc.Element("FromUserName").Value; var createTime = xdoc.Element("CreateTime").Value; var msgtype = xdoc.Element("MsgType").Value; var content = xdoc.Element("Content").Value; DateTime datatime = DateTime.Now; int datetime = 1460541339; //回复内容 StringBuilder resxml = new StringBuilder( string.Format("<xml><ToUserName><![CDATA[{0}]]></ToUserName><FromUserName><![CDATA[{1}]]></FromUserName><CreateTime>{2}</CreateTime>", fromUserName, toUserName, datetime)); resxml.AppendFormat("<MsgType><![CDATA[text]]></MsgType><Content><![CDATA[{0}]]></Content><FuncFlag>0</FuncFlag></xml>", content); string msg = resxml.ToString(); return Content(msg); } 测试在使用公众号进行真实环境测试之前,可以借助微信平台提供的接口测试工具来进行测试。
微信公众平台接口调试工具
测试结果如下图所示,返回了一条XML格式的数据,请求成功。 关注微信公众号,发送消息。