上一篇说到配置和验证《C#微信开发之旅--准备阶段》
下面来实现一下简单的信息回复。
也就是接收XML,返回XML
根据请求的信息类型,创建了一个信息请求类:
//微信请求类 public class RequestXML { private String toUserName = String.Empty; ////// 公众号 /// public String ToUserName { get { return toUserName; } set { toUserName = value; } } private String fromUserName = ""; ////// 发送方微信号 /// public String FromUserName { get { return fromUserName; } set { fromUserName = value; } } private String createTime = String.Empty; ////// 创建时间 /// public String CreateTime { get { return createTime; } set { createTime = value; } } private String msgType = String.Empty; ////// 信息类型 地理位置:location,文本消息:text,消息类型:image /// public String MsgType { get { return msgType; } set { msgType = value; } } private String content = String.Empty; ////// 信息内容 /// public String Content { get { return content; } set { content = value; } } private String location_X = String.Empty; ////// 地理位置纬度 /// public String Location_X { get { return location_X; } set { location_X = value; } } private String location_Y = String.Empty; ////// 地理位置经度 /// public String Location_Y { get { return location_Y; } set { location_Y = value; } } private String scale = String.Empty; ////// 地图缩放大小 /// public String Scale { get { return scale; } set { scale = value; } } private String mapInfo = String.Empty; ////// 地理位置信息 /// public String MapInfo { get { return mapInfo; } set { mapInfo = value; } } private String picUrl = String.Empty; ////// 图片链接 /// public String PicUrl { get { return picUrl; } set { picUrl = value; } } private String _event; ////// 事件类型 /// public String Event { get { return _event; } set { _event = value; } } private String eventKey; ////// 事件key /// public String EventKey { get { return eventKey; } set { eventKey = value; } } }
1.我们接收XML信息,然后读取其中的信息保存到RequestXML中,然后根据请求类型,返回对应的信息
////// 接收信息 /// /// public void Handle(String postStr) { XmlDocument doc = new XmlDocument(); doc.LoadXml(postStr); XmlElement rootElement = doc.DocumentElement; XmlNode MsgType = rootElement.SelectSingleNode("MsgType"); RequestXML requestXML = new RequestXML(); requestXML.ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText; requestXML.FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText; requestXML.CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText; requestXML.MsgType = MsgType.InnerText; if (requestXML.MsgType == "text") { requestXML.Content = rootElement.SelectSingleNode("Content").InnerText; } else if (requestXML.MsgType == "location") { requestXML.Location_X = rootElement.SelectSingleNode("Location_X").InnerText; requestXML.Location_Y = rootElement.SelectSingleNode("Location_Y").InnerText; requestXML.Scale = rootElement.SelectSingleNode("Scale").InnerText; requestXML.MapInfo = rootElement.SelectSingleNode("Label").InnerText; } else if (requestXML.MsgType == "image") { requestXML.PicUrl = rootElement.SelectSingleNode("PicUrl").InnerText; } else if (requestXML.MsgType == "event")//事件 { requestXML.Event = rootElement.SelectSingleNode("Event").InnerText; if (requestXML.Event == "CLICK")//点击事件 { requestXML.EventKey = rootElement.SelectSingleNode("EventKey").InnerText; } else if (requestXML.Event == "subscribe")//订阅 { } } ResponseMsg(requestXML); }
上面已经处理好了请求信息,现在就要对请求作出回复,回复的信息格式也是XML。
现在就做一个简单的文本回复,就没有弄一个回复类。
////// 回复消息 /// /// private void ResponseMsg(RequestXML requestXML) { String responseContent = String.Empty; if (requestXML.MsgType == "text")//文本 { responseContent = FormatTextXML(requestXML.FromUserName, requestXML.ToUserName, "基本回复rn" + DateTime.Now.ToString() + "rn" + requestXML.FromUserName); } HttpContext.Current.Response.ContentEncoding = Encoding.UTF8; HttpContext.Current.Response.Write(responseContent); }
上面就是一个简单的文本回复,如果请求的信息是文本的话,我会返回一句话。FormatTextXML就是把封装要返回的XML。
因为我们在开发文档中可以看见,返回的文本信息的话,格式为:
12345678
所以FormatTextXML就这样写了:
////// 返回格式化文本XML内容 /// /// /// /// ///private String FormatTextXML(String fromUserName, String toUserName, String content) { return " "; } " + ConvertDateTimeInt(DateTime.Now) + " 1
这样一个简单的文本回复就弄好了! 你发送文本信息给公众号,就能得到一个回复了。
一点积累一点点!