Heim > WeChat-Applet > WeChat-Entwicklung > Detaillierte Erläuterung von geografischen Standortbeispielen für die Entwicklung der öffentlichen WeChat-Plattform mit .NET

Detaillierte Erläuterung von geografischen Standortbeispielen für die Entwicklung der öffentlichen WeChat-Plattform mit .NET

Y2J
Freigeben: 2017-04-22 14:59:40
Original
1740 Leute haben es durchsucht

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);
   }
Nach dem Login kopieren
Auf diese Weise können wir beim Senden einer geografischen Standortinformation eine Rückmeldung an die Antwortinformationen geben. Es ist erwähnenswert, dass für den Standort der geografischen Informationen keine Genehmigung erforderlich ist, da der von uns gesendete Standort der geografischen Informationen nicht unbedingt unser tatsächlicher Standort ist. Wir können jede Auswahl auf der Eingabeoberfläche treffen, ohne die Privatsphäre zu beeinträchtigen.

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;
   }
Nach dem Login kopieren
Wenn MsgType ein Ereignis ist, haben wir vorher das Menüereignis verwendet, jetzt müssen wir seinen EventName als „LOCATION“ hinzufügen. Codesegment, da noch keine anderen Ereignisse beteiligt sind, werde ich es später verwenden und den Code später standardisierter schreiben. Weisen Sie hier den drei neu hinzugefügten Attributen Werte zu und ändern Sie dann die Onload-Funktion

 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);
   }
Nach dem Login kopieren
Okay, fertig, damit die WeChat-Plattform Sie daran erinnert, wenn Sie Ihren WeChat öffnen, um „Benutzerstandort zu ermitteln“. Informationen" Möchten Sie diese nur zum ersten Mal nach Eintritt in die Sitzung oder alle 5 Sekunden erhalten? Wenn Sie sich für Letzteres entscheiden, werden Ihnen alle 5 Sekunden Informationen zum geografischen Standort angezeigt.

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage