.NET开发微信公众平台之地理位置实例详解
这篇文章主要为大家详细解析了微信公众平台开发之地理位置.Net代码,感兴趣的小伙伴们可以参考一下 微信公共平台中涉及到地理位置的有两种情况: class wxmessage { public string FromUserName { get; set; } public string ToUserName { get; set; } public string MsgType { get; set; } public string EventName { get; set; } public string Content { get; set; } public string Recognition { get; set; } public string MediaId { get; set; } public string EventKey { get; set; } public string Location_X { get; set; } public string Location_Y { get; set; } public string Scale { get; set; } public string Label { get; set; } } 其中Location_X代表纬度,Location_Y代表经度,Scale代表缩放比例,Label代表位置的描述 和接受文本,语音消息一下样,地理信息的MsgType为“location”,修改一下之前的GetWxMessage()函数和OnLoad里面的消息处理: private wxmessage GetWxMessage() { wxmessage wx = new wxmessage(); StreamReader str = new StreamReader(Request.InputStream, System.Text.Encoding.UTF8); XmlDocument xml = new XmlDocument(); xml.Load(str); wx.ToUserName = xml.SelectSingleNode("xml").SelectSingleNode("ToUserName").InnerText; wx.FromUserName = xml.SelectSingleNode("xml").SelectSingleNode("FromUserName").InnerText; wx.MsgType = xml.SelectSingleNode("xml").SelectSingleNode("MsgType").InnerText; if (wx.MsgType.Trim() == "text") { wx.Content = xml.SelectSingleNode("xml").SelectSingleNode("Content").InnerText; } if (wx.MsgType.Trim() == "location") { wx.Location_X = xml.SelectSingleNode("xml").SelectSingleNode("Location_X").InnerText; wx.Location_Y = xml.SelectSingleNode("xml").SelectSingleNode("Location_Y").InnerText; wx.Scale = xml.SelectSingleNode("xml").SelectSingleNode("Scale").InnerText; wx.Label = xml.SelectSingleNode("xml").SelectSingleNode("Label").InnerText; } if (wx.MsgType.Trim() == "event") { wx.EventName = xml.SelectSingleNode("xml").SelectSingleNode("Event").InnerText; wx.EventKey = xml.SelectSingleNode("xml").SelectSingleNode("EventKey").InnerText; } if (wx.MsgType.Trim() == "voice") { wx.Recognition = xml.SelectSingleNode("xml").SelectSingleNode("Recognition").InnerText; } return wx; } protected void Page_Load(object sender, EventArgs e) { wxmessage wx = GetWxMessage(); string res = ""; if (!string.IsNullOrEmpty(wx.EventName) && wx.EventName.Trim() == "subscribe") { string content = ""; if (!wx.EventKey.Contains("qrscene_")) { content = "/:rose欢迎北京永杰友信科技有限公司/:rose/n直接回复“你好”"; res = sendTextMessage(wx, content); } else { content = "二维码参数:/n" + wx.EventKey.Replace("qrscene_", ""); res = sendTextMessage(wx, content); } } else if (!string.IsNullOrEmpty(wx.EventName) && wx.EventName.ToLower() == "scan") { string str = "二维码参数:/n" + wx.EventKey; res = sendTextMessage(wx, str); } else if (!string.IsNullOrEmpty(wx.EventName) && wx.EventName.Trim() == "CLICK") { if(wx.EventKey=="HELLO") res = sendTextMessage(wx, "你好,欢迎使用北京永杰友信科技有限公司公共微信平台!"); } else { WriteLog(wx.MsgType); if (wx.MsgType == "text" && wx.Content == "你好") { res = sendTextMessage(wx, "你好,欢迎使用北京永杰友信科技有限公司公共微信平台!"); } else if (wx.MsgType == "voice") { res = sendTextMessage(wx, wx.Recognition); } else if (wx.MsgType == "location") { res = sendTextMessage(wx, "您发送的位置是:" + wx.Label + ";纬度是:" + wx.Location_X + ";经度是:" + wx.Location_Y + ";缩放比例为:" + wx.Scale); } else { res = sendTextMessage(wx, "你好,未能识别消息!"); } } Response.Write(res); } 这样当我们发送一个地理位置信息的时候就可以反馈响应的信息了。值得一提的是:这里的地理信息位置无需授权,因为自己发送的地理信息位置不一定是自己的真实位置,我们可以在输入界面进行任意选择,不会涉及隐私。 class wxmessage { public string FromUserName { get; set; } public string ToUserName { get; set; } public string MsgType { get; set; } public string EventName { get; set; } public string Content { get; set; } public string Recognition { get; set; } public string MediaId { get; set; } public string EventKey { get; set; } public string Location_X { get; set; } public string Location_Y { get; set; } public string Scale { get; set; } public string Label { get; set; } public string Latitude { get; set; } public string Longitude { get; set; } public string Precision { get; set; } } 改造一下GetWxMessage()函数和OnLoad函数: private wxmessage GetWxMessage() { wxmessage wx = new wxmessage(); StreamReader str = new StreamReader(Request.InputStream, System.Text.Encoding.UTF8); XmlDocument xml = new XmlDocument(); xml.Load(str); wx.ToUserName = xml.SelectSingleNode("xml").SelectSingleNode("ToUserName").InnerText; wx.FromUserName = xml.SelectSingleNode("xml").SelectSingleNode("FromUserName").InnerText; wx.MsgType = xml.SelectSingleNode("xml").SelectSingleNode("MsgType").InnerText; WriteLog("MsgType:"+wx.MsgType); if (wx.MsgType.Trim() == "event") { wx.EventName = xml.SelectSingleNode("xml").SelectSingleNode("Event").InnerText; WriteLog(wx.EventName); if (wx.EventName.ToUpper() == "LOCATION") { wx.Latitude = xml.SelectSingleNode("xml").SelectSingleNode("Latitude").InnerText; wx.Longitude = xml.SelectSingleNode("xml").SelectSingleNode("Longitude").InnerText; wx.Precision = xml.SelectSingleNode("xml").SelectSingleNode("Precision").InnerText; } else { wx.EventKey = xml.SelectSingleNode("xml").SelectSingleNode("EventKey").InnerText; } } if (wx.MsgType.Trim() == "text") { wx.Content = xml.SelectSingleNode("xml").SelectSingleNode("Content").InnerText; } if (wx.MsgType.Trim() == "location") { wx.Location_X = xml.SelectSingleNode("xml").SelectSingleNode("Location_X").InnerText; wx.Location_Y = xml.SelectSingleNode("xml").SelectSingleNode("Location_Y").InnerText; wx.Scale = xml.SelectSingleNode("xml").SelectSingleNode("Scale").InnerText; wx.Label = xml.SelectSingleNode("xml").SelectSingleNode("Label").InnerText; } if (wx.MsgType.Trim() == "voice") { wx.Recognition = xml.SelectSingleNode("xml").SelectSingleNode("Recognition").InnerText; } return wx; } 当MsgType为event的时候我们之前用到的是菜单的事件,现在我们需要加入其EventName为"LOCATION"的代码段,因为现在还没有涉及其他的event我后面就用else好了,后面我会把代码写的规范些。在这里分别给新增的三个属性赋值,然后修改一下Onload函数 protected void Page_Load(object sender, EventArgs e) { wxmessage wx = GetWxMessage(); string res = ""; if (!string.IsNullOrEmpty(wx.EventName) && wx.EventName.Trim() == "subscribe") { string content = ""; if (!wx.EventKey.Contains("qrscene_")) { content = "/:rose欢迎北京永杰友信科技有限公司/:rose/n直接回复“你好”"; res = sendTextMessage(wx, content); } else { content = "二维码参数:/n" + wx.EventKey.Replace("qrscene_", ""); res = sendTextMessage(wx, content); } } else if (!string.IsNullOrEmpty(wx.EventName) && wx.EventName.ToLower() == "scan") { string str = "二维码参数:/n" + wx.EventKey; res = sendTextMessage(wx, str); } else if (!string.IsNullOrEmpty(wx.EventName) && wx.EventName.Trim() == "CLICK") { if(wx.EventKey=="HELLO") res = sendTextMessage(wx, "你好,欢迎使用北京永杰友信科技有限公司公共微信平台!"); } else if (!string.IsNullOrEmpty(wx.EventName) && wx.EventName.Trim() == "LOCATION") { res = sendTextMessage(wx, "您的位置是经度:" + wx.Latitude + ",维度是:" + wx.Longitude+",地理经度为:"+wx.Precision); } else { if (wx.MsgType == "text" && wx.Content == "你好") { res = sendTextMessage(wx, "你好,欢迎使用北京永杰友信科技有限公司公共微信平台!"); } else if (wx.MsgType == "voice") { res = sendTextMessage(wx, wx.Recognition); } else if (wx.MsgType == "location") { res = sendTextMessage(wx, "您发送的位置是:" + wx.Label + ";纬度是:" + wx.Location_X + ";经度是:" + wx.Location_Y + ";缩放比例为:" + wx.Scale); } else { res = sendTextMessage(wx, "你好,未能识别消息!"); } } Response.Write(res); } 好了,完成,这样当你开启你的微信“获得用户位置信息”的时候微信平台会提醒你,是仅进入会话第一次获取,还是每个5秒获取一次,如果你选择了后者,你就会看到,每5秒会反馈给你一个地理位置的信息。 以上就是.NET开发微信公众平台之地理位置实例详解的详细内容,更多请关注php中文网其它相关文章! |