Dieser Artikel bietet Ihnen hauptsächlich eine detaillierte Analyse des geografischen Standorts.Net-Code für die Entwicklung der öffentlichen WeChat-Plattform
Es gibt zwei Arten von geografischen Standorten Öffentliche WeChat-Plattform. Situation:
Zuerst sende ich einen selbst ausgewählten geografischen Standort an WeChat, und dann kann WeChat die Antwortinformationen automatisch zurückmelden.
Zweitens: Lassen Sie WeChat die Position unserer GPS-Ortungsadresse abrufen und die Antwortinformationen zurückmelden. Schauen wir uns zunächst die erste an: Zusätzlich zum Senden von Text, Bildern, Stimmen usw. gibt es in WeChat noch eine weitere Information, nämlich den geografischen Standort Informationen müssen wir die vorherige wxmessage-Klasse umwandeln. Die oben genannten Attribute:
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); }
Wenn wir eine Funktion ähnlich „Near Me“ erstellen, müssen wir natürlich zwei Bedingungen erfüllen: Aktivieren Sie die Funktion zum Abrufen geografischer Benutzerinformationen im öffentlichen WeChat-Konto. Zweitens erlaubt der Benutzer selbst dem öffentlichen WeChat-Konto, meinen Standort zu ermitteln, wenn er WeChat folgt. Dies erfordert die Verwendung der zweiten Situation, die wir Ihnen am Anfang des Artikels vorgestellt haben. Laut der Erklärung von WeChat wird eine Sitzung beim Start (dh beim Betreten der Konversationsoberfläche) zuerst abgerufen und dann automatisch alle fünf Sekunden abgerufen. Das heißt, was beim Abrufen der Standortinformationen des Benutzers ausgelöst wird, ist kein „Gespräch zwischen Ihnen und mir“, sondern ein besonderes Ereignis, das alle fünf Sekunden auftritt. Hier wird definiert, dass MsgType „Ereignis“ ist, und um es von anderen „Ereignissen“ zu unterscheiden, ist sein Ereignisname (eigentlich offiziell Ereignis genannt) „LOCATION“ (in Großbuchstaben).
Als nächstes muss ich noch unsere wxmessage-Klasse entsprechend dem WeChat-Format ändern:
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; }
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); }
Hier ist Folgendes zu beachten: Ich denke, es liegt kein Problem vor, aber ich kann die Informationen nicht abrufen. Das liegt daran, dass Sie beim Betreten der Sitzung die GPS-Suche und das GPS Ihres Mobiltelefons sehen Bisher war der Inhalt nicht sichtbar. Es versteht sich, dass bei der GPS-Suche und -Ortung das Ereignis zum Abrufen der Standortinformationen des Benutzers ausgelöst wird. Dies ist nicht das, was ich mir vorgestellt habe. Dies erfordert die Aufmerksamkeit der Entwickler Ich habe gerade lange damit verbracht, als ich rausging, habe ich den Standort meines Telefons überprüft und zufällig die Antwort gesehen, und dann wurde es mir plötzlich klar.
Vor diesem Hintergrund fragen Sie sich vielleicht: Welchen Nutzen hat es, nur die Breiten- und Längenkoordinaten zu kennen? Es handelt sich nicht um einen bestimmten Ort. Tatsächlich können wir verschiedene Methoden verwenden, um detaillierte Standortinformationen zu erhalten. Beispielsweise können wir die umgekehrte Adressanalyse der BaiduMap-API verwenden, um die Koordinaten in welcher Stadt, in welcher Straße usw. zu ermitteln und sogar die Situation in der Nähe zu kennen Hier. Allerdings werde ich mit Ihnen über BaiduMap sprechen, wenn ich in Zukunft die Gelegenheit dazu habe
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung von geografischen Standortbeispielen für die Entwicklung der öffentlichen WeChat-Plattform mit .NET. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!