Heim  >  Artikel  >  WeChat-Applet  >  Die PHP-WeChat-Entwicklung gibt Informationen in der Nähe basierend auf den Antwortschlüsselwörtern des Benutzers\Standort zurück

Die PHP-WeChat-Entwicklung gibt Informationen in der Nähe basierend auf den Antwortschlüsselwörtern des Benutzers\Standort zurück

PHPz
PHPzOriginal
2017-03-08 15:55:561437Durchsuche

Dieser Artikel stellt hauptsächlich die einfache Implementierung der PHP-WeChat-Entwicklung vor, um Informationen in der Nähe basierend auf dem Antwort-Keyword-Standort des Benutzers zurückzugeben

Nachdem der Benutzer dem öffentlichen WeChat-Konto gefolgt ist, können Sie darauf zugreifen kann den geografischen Standort des Benutzers (Tencent-Karte) auf das öffentliche Konto antworten, den Breiten- und Längengrad der Standortinformationen extrahieren und ihn in den Breiten- und Längengrad von Baidu umwandeln. Basierend auf dem Breiten- und Längengrad wird dann die API von Baidu Map aufgerufen, um Informationen wie „Restaurants“ und „Hotels“ (kann angepasst werden) innerhalb eines Umkreises von 2 km zurückzugeben. Wenn Sie die API von Baidu aufrufen, müssen Sie apiKEY erwerben. Wenn nicht, gehen Sie bitte zum Baidu Developer Center, um sich zu registrieren und zu bewerben.

Testen Sie zunächst die von der Schnittstelle zurückgegebenen Daten mit einem Satz von Breiten- und Längengraden:

<?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 "
";

Zurückgegebene Daten

Wenn Sie den richtigen API-Schlüssel eingegeben haben, sollten die oben genannten Daten zurückgegeben werden. Als nächstes: Bestimmen Sie im WeChat-Schnittstellenplattformcode (ein PHP-Skript, das in Ihrem öffentlichen Domain-Namensraum platziert wird) den Nachrichtentyp, ermitteln Sie den Breiten- und Längengrad, rufen Sie die Baidu Map API auf und verbinden Sie das XML, um es zurückzugeben. Da in den von der Baidu-API zurückgegebenen Daten kein Miniaturbild von „Restaurant“ enthalten ist, habe ich ein Bild von meiner eigenen Website verwendet.
Damit Benutzer die Suche nach nahegelegenen „Restaurants“
oder „Hotels“ und anderen Informationen anpassen können, können Benutzer zunächst mit „Suche nach XX“ antworten, dann XX extrahieren, in die Sitzung einfügen und warten damit der Benutzer mit dem geografischen Standort antworten kann. Entfernen Sie die Sitzung, wenn Sie in Position sind. Aber nachdem ich die Sitzung eingerichtet hatte, konnte ich sie nicht entfernen. Daher verwende ich hier den KVDB-Dienst von Sina Cloud. Natürlich können Sie auch Caching-Methoden wie Memcache oder Redis verwenden.

$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();

      }

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


}

Wenn Sie nicht verstehen, wie der Code verwendet wird, können Sie auf meinen vorherigen Artikel verweisen: Einfache Textantwort, Abfrage ausgewählter WeChat-Artikel

Nachdem Benutzer dem offiziellen Konto folgen, auf die Suche nach einem Hotel antworten und dann mit der Angabe des Standorts antworten, können sie Informationen zu Hotels in der Nähe erhalten.

Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass er für das Studium aller hilfreich sein wird

Das obige ist der detaillierte Inhalt vonDie PHP-WeChat-Entwicklung gibt Informationen in der Nähe basierend auf den Antwortschlüsselwörtern des Benutzers\Standort zurück. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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