【微信开发】“你问我答”

xiaoxiao2021-02-28  34

前言

  如题,我们在使用像中国移动等公众号时,可以通过输入一些文本内容来查询我们需要的信息,实现我们“提问”,公众号自动“回答”,将微信公众号接入我们自己的网站,通过微信将消息转发给用户。

准备

  在上篇文章-【微信开发】开启开发者模式中,我们已经使用开发者模式绑定了我们自己的服务,完成了开发者身份的验证,这次需要添加的是对用户信息处理的方法。

  微信进行开发者身份验证是会向填写的服务器发送一个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格式的数据,请求成功。

关注微信公众号,发送消息。

转载请注明原文地址: https://www.6miu.com/read-250039.html

最新回复(0)