Maison > Applet WeChat > Développement WeChat > Le développement PHP WeChat renvoie des informations à proximité en fonction des mots-clés/emplacement de réponse de l'utilisateur

Le développement PHP WeChat renvoie des informations à proximité en fonction des mots-clés/emplacement de réponse de l'utilisateur

PHPz
Libérer: 2017-03-08 15:55:56
original
1462 Les gens l'ont consulté

Cet article présente principalement en détail la mise en œuvre simple du développement PHP WeChat pour renvoyer des informations à proximité en fonction de l'emplacement du mot-clé de réponse de l'utilisateur. Les amis intéressés peuvent s'y référer

Une fois que l'utilisateur a suivi le compte public WeChat, vous. peut répondre à la situation géographique de l'utilisateur (Tencent Map) au compte officiel, extraire la latitude et la longitude des informations de localisation et les convertir en latitude et longitude de Baidu. Ensuite, en fonction de la latitude et de la longitude, l'API de Baidu Map est appelée pour renvoyer des informations telles que « restaurants » et « hôtels » (peuvent être personnalisés) dans un rayon de 2 km. Lorsque vous appelez l'API de Baidu, vous devez obtenir apiKEY. Sinon, veuillez vous rendre au Baidu Developer Center pour vous inscrire et postuler.

Tout d'abord, testez les données renvoyées par l'interface avec un ensemble de latitude et de longitude :

<?php

/**根据一组经纬度查找附近2公里以内的关键字**/

header(&#39;Content-type:text/html;charset=utf-8&#39;);

//--------第一步:转换经纬度----
//参考链接:http://www.php.cn/

$Location_X = 23.134521;
$Location_Y = 113.358803;

$url = "http://api.map.baidu.com/geoconv/v1/?coords=$Location_X,$Location_Y&from=3&to=5&ak=这里填写你的apikey";

$res = file_get_contents($url);
$res = json_decode($res, true);

//用户发送腾讯的soso地图位置信息经过转换之后,得到百度地图的经纬度
$x = $res[&#39;result&#39;][0][&#39;x&#39;];
$y = $res[&#39;result&#39;][0][&#39;y&#39;];

//---------第二步:根据经纬度和关键词获得附近的信息----------
//参考链接:http://www.php.cn/
$url = "http://api.map.baidu.com/place/v2/search?ak=这里填写你的apikey&output=json&query=" . urlencode("饭店") . "&page_size=10&page_num=0&scope=2&location=$x,$y&radius=2000";
$res = file_get_contents($url);
$res = json_decode($res, true);

// echo "<pre class="brush:php;toolbar:false">";
// print_r($res);
// echo "
"; //提取所需的信息 foreach($res['results'] as $k=>$v){ $arr[$k]['name'] = $v['name']; $arr[$k]['address'] = $v['address']; $arr[$k]['img_url'] = 'http://misakaqnxt-public.stor.sinaapp.com/click.png'; $arr[$k]['detail_url'] = isset($v['detail_info']['detail_url'])?$v['detail_info']['detail_url']:''; } echo "
";
 print_r($arr);
 echo "
";
Copier après la connexion

Données renvoyées

Si vous avez rempli la clé apikey correcte, les données ci-dessus doivent être renvoyées. Suivant : Dans le code de la plate-forme d'interface WeChat (un script PHP placé dans votre espace de nom de domaine public), déterminez le type de message, obtenez la latitude et la longitude, appelez l'API Baidu Map et assemblez le XML pour le renvoyer. Puisqu'il n'y a pas d'image miniature du « restaurant » dans les données renvoyées par l'API Baidu, j'ai utilisé une image de mon propre site Web.
Afin de permettre aux utilisateurs de personnaliser la recherche de "restaurants" à proximité
ou "hôtels" et d'autres informations, les utilisateurs peuvent d'abord répondre "Recherche de XX", puis extraire XX, le mettre dans la session et attendre pour que l'utilisateur réponde avec l'emplacement géographique Supprimez la session lorsqu'il est en position. Mais après avoir configuré la session, je n'ai pas pu la supprimer. J'utilise donc ici le service KVDB de Sina Cloud. Bien sûr, vous pouvez également utiliser des méthodes de mise en cache telles que Memcache ou Redis.

$which = mb_substr($keyword, 0, 2, 'UTF-8');

elseif($which == "寻找"){

        $find = str_replace($which, "", $keyword);

        //调用新浪云的KVDB服务
        $kv = new SaeKV();
        $kv->init();
        $kv->set(&#39;find&#39;, $find);

        $contentStr = "选择表情旁边的&#39;+&#39;,发送位置,即可查找你要找的地方";
        $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStr);
        echo $resultStr;
        exit();

      }
Copier après la connexion

 elseif($postObj->MsgType == &#39;location&#39;){
          /**
           * 如果是收到了地理位置消息,则返回附近的饭店
           */

          //--------第一步:转换经纬度-------
          //参考链接:http://www.php.cn/
          $Location_X = $postObj->Location_X;
          $Location_Y = $postObj->Location_Y;
          
          $url = "http://api.map.baidu.com/geoconv/v1/?coords=$Location_X,$Location_Y&from=3&to=5&ak=这里填写你的apikey";
          
          $res = file_get_contents($url);
          $res = json_decode($res, true);

          //用户发送腾讯的soso地图位置信息经过转换之后,得到百度地图的经纬度
          $x = $res[&#39;result&#39;][0][&#39;x&#39;];
          $y = $res[&#39;result&#39;][0][&#39;y&#39;];

          //---------第二步:根据经纬度和关键词获得附近的信息----------
          $kv = new SaeKV();
          // 初始化KVClient对象
          $kv->init();
          
          $url = "http://api.map.baidu.com/place/v2/search?ak=这里填写你的apikey&output=json&query=" . urlencode($kv->get(&#39;find&#39;)) . "&page_size=10&page_num=0&scope=2&location=$x,$y&radius=2000";
          $res = file_get_contents($url);
          $res = json_decode($res, true);
          
          //提取信息
          foreach($res[&#39;results&#39;] as $k=>$v){
            $arr[$k][&#39;name&#39;] = $v[&#39;name&#39;];
            $arr[$k][&#39;address&#39;] = $v[&#39;address&#39;];
            $arr[$k][&#39;img_url&#39;] = &#39;http://misakaqnxt-public.stor.sinaapp.com/click.png&#39;;
            $arr[$k][&#39;detail_url&#39;] = isset($v[&#39;detail_info&#39;][&#39;detail_url&#39;])?$v[&#39;detail_info&#39;][&#39;detail_url&#39;]:&#39;&#39;;
          }

          //--------第三步:拼接XML字符串--------
          $head = "<xml>
          <ToUserName><![CDATA[%s]]></ToUserName>
          <FromUserName><![CDATA[%s]]></FromUserName>
          <CreateTime>%s</CreateTime>
          <MsgType><![CDATA[news]]></MsgType>
          <ArticleCount>10</ArticleCount>
          <Articles>";

          $items = "";
          foreach($arr as $v){
            $items .= "<item>
            <Title><![CDATA[" . $v[&#39;name&#39;] .":". $v[&#39;address&#39;] . "]]></Title>
            <Description><![CDATA[" . $v[&#39;address&#39;] . "]]></Description>
            <PicUrl><![CDATA[" . $v[&#39;img_url&#39;] . "]]></PicUrl>
            <Url><![CDATA[" . $v[&#39;detail_url&#39;] . "]]></Url>
            </item>";
          }

          $foot = "</Articles></xml>";

          $res = $head . $items . $foot;
          
          $resultStr = sprintf($res, $fromUsername, $toUsername, $time);
          echo $resultStr;
          exit();


}
Copier après la connexion

Si vous ne comprenez pas comment utiliser le code, vous pouvez vous référer à mon article précédent : Réponse textuelle simple Requête sur les articles sélectionnés par WeChat

Une fois que les utilisateurs ont suivi le compte officiel, répondu pour rechercher un hôtel, puis répondu avec l'emplacement, ils pourront obtenir des informations sur les hôtels à proximité.

Ce qui précède représente l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal