Maison  >  Article  >  Applet WeChat  >  Explication détaillée des exemples de localisation géographique pour le développement de la plateforme publique WeChat avec .NET

Explication détaillée des exemples de localisation géographique pour le développement de la plateforme publique WeChat avec .NET

Y2J
Y2Joriginal
2017-04-22 14:59:401713parcourir

Cet article vous propose principalement une analyse détaillée de la localisation géographique .Net code pour le développement de la plateforme publique WeChat. Les amis intéressés peuvent s'y référer

Il existe deux types de localisation géographique impliqués dans le. Plateforme publique WeChat. Situation :
Tout d'abord, j'envoie un emplacement géographique auto-sélectionné à WeChat, puis WeChat peut automatiquement renvoyer les informations de réponse.
Deuxièmement, Laissez WeChat obtenir notre adresse de positionnement GPS et nous envoyer les informations de réponse.
Tout d'abord, regardons le premier. En plus de l'envoi de texte, d'images, de voix, etc., il existe également une autre information dans WeChat, qui est la localisation géographique selon les informations XML de réception géographique de WeChat. informations, nous devons transformer l'ajout précédent de la classe wxmessage Les attributs ci-dessus :

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);
   }

De cette façon, lorsque nous envoyons des informations de localisation géographique, nous pouvons renvoyer les informations de réponse. Il convient de mentionner que l'emplacement des informations géographiques ici ne nécessite pas d'autorisation, car l'emplacement des informations géographiques envoyées par nous-mêmes n'est pas nécessairement notre emplacement réel. Nous pouvons effectuer n'importe quelle sélection sur l'interface de saisie sans impliquer la confidentialité.
Bien entendu, si nous créons une fonction similaire à "Near Me", nous devons remplir deux conditions : activer la fonction d'obtention d'informations géographiques de l'utilisateur dans le compte public WeChat. Deuxièmement, l'utilisateur lui-même autorise le compte public WeChat à obtenir ma position lorsqu'il suit WeChat. Cela nécessite d’utiliser la deuxième situation que nous vous avons présentée en début d’article. Selon l'explication de WeChat, lorsqu'une session démarre (c'est-à-dire lors de l'entrée dans l'interface de conversation), elle est d'abord obtenue, puis automatiquement obtenue toutes les cinq secondes. C'est-à-dire que ce qui se déclenche lors de l'obtention des informations de localisation de l'utilisateur n'est pas une « conversation entre vous et moi », mais un événement spécial qui se produit toutes les cinq secondes. Il est défini ici que MsgType est "event", et afin de le distinguer des autres "events", son EventName (en fait officiellement appelé event) est "LOCATION" (en majuscules).
Ensuite, je dois encore modifier notre classe wxmessage selon le format WeChat :

 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;
   }

Lorsque MsgType est un événement, nous avons utilisé l'événement de menu auparavant, nous devons maintenant ajouter son EventName comme " LOCATION" segment de code, car il n'y a pas encore d'autres événements impliqués, j'utiliserai autre chose plus tard, j'écrirai le code plus standardisé plus tard. Ici, attribuez des valeurs aux trois attributs nouvellement ajoutés, puis modifiez la fonction 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);
   }

Bon, c'est fait, pour que la plateforme WeChat vous rappelle lorsque vous ouvrez votre WeChat pour "obtenir la localisation de l'utilisateur informations" Souhaitez-vous l'obtenir uniquement la première fois après votre entrée dans la session, ou toutes les 5 secondes ? Si vous choisissez cette dernière option, vous verrez que les informations de localisation géographique vous seront renvoyées toutes les 5 secondes.
Ce à quoi il faut faire attention ici est : je pense qu'il n'y a pas de problème selon cela, mais je ne parviens pas à obtenir l'information, car lorsque j'entre dans la session, vous verrez la recherche GPS et le GPS de votre téléphone portable. positionnement. Auparavant, le contenu n’était pas visible. On peut comprendre que lorsque vous recherchez et localisez par GPS, l'événement d'obtention des informations de localisation de l'utilisateur sera déclenché. Ce n'est pas ce que j'imaginais que la localisation approximative puisse être obtenue via le positionnement de la station de base. Je viens de passer beaucoup de temps à le faire. Quand je suis sorti, j'ai vérifié l'emplacement de mon téléphone et j'ai accidentellement vu la réponse, puis je m'en suis soudain rendu compte.
Cela dit, vous vous demanderez peut-être, à quoi sert de connaître uniquement les coordonnées de latitude et de longitude ? Ce n'est pas un endroit précis. En fait, nous pouvons utiliser diverses méthodes pour connaître des informations de localisation détaillées. Par exemple, nous pouvons utiliser l'analyse d'adresse inversée de l'API BaiduMap pour guider les coordonnées dans quelle ville, quelle rue, etc., et même connaître la situation à proximité. ici. Cela dit, je vous parlerai de BaiduMap lorsque j'en aurai l'occasion dans le futur

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn