>위챗 애플릿 >위챗 개발 >PHP WeChat 개발은 사용자 응답 키워드\위치를 기반으로 주변 정보를 반환합니다.

PHP WeChat 개발은 사용자 응답 키워드\위치를 기반으로 주변 정보를 반환합니다.

PHPz
PHPz원래의
2017-03-08 15:55:561458검색

이 글에서는 주로 사용자의 답글 키워드 위치를 기반으로 주변 정보를 반환하는 PHP WeChat 개발의 간단한 구현을 자세히 소개합니다. 관심 있는 친구는 이를 참조할 수 있습니다.

사용자가 WeChat 공개 계정을 팔로우한 후 사용자의 지리적 위치(Tencent Map)를 공개 계정에 회신하고 위치 정보의 위도와 경도를 추출하여 Baidu의 위도와 경도로 변환할 수 있습니다. 그런 다음 위도와 경도를 기반으로 Baidu Map의 API가 호출되어 반경 2KM 내의 "레스토랑" 및 "호텔"(사용자 정의 가능)과 같은 정보를 반환합니다. Baidu의 API를 호출할 때 apiKEY를 받아야 합니다. 그렇지 않은 경우 Baidu 개발자 센터에 가서 등록하고 신청하세요.

먼저 위도 및 경도 집합을 사용하여 인터페이스에서 반환된 데이터를 테스트합니다.

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

반환된 데이터

올바른 apikey를 입력했다면 위의 데이터가 반환되어야 합니다. 다음: WeChat 인터페이스 플랫폼 코드(공개 도메인 이름 공간에 배치된 PHP 스크립트)에서 메시지 유형을 결정하고 위도와 경도를 얻은 다음 Baidu Map API를 호출하고 XML을 연결하여 반환합니다. Baidu API에서 반환된 데이터에 "레스토랑"의 썸네일 이미지가 없기 때문에 제가 운영하는 웹사이트의 사진을 사용했습니다.
사용자가 인근 "식당"
또는 "호텔" 및 기타 정보에 대한 검색을 맞춤설정할 수 있도록 하기 위해 사용자는 먼저 "XX를 찾고 있습니다"라고 답한 다음 XX를 추출하여 세션에 넣고 기다릴 수 있습니다. 사용자가 지리적 위치로 응답할 수 있도록 위치에 있을 때 세션을 제거합니다. 하지만 세션을 설정한 후에는 꺼낼 수 없었습니다. 그래서 여기서는 Sina Cloud의 KVDB 서비스를 사용합니다. 물론 Memcache나 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();

      }

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


}

코드 사용 방법을 이해하지 못한다면 이전 기사를 참조하세요. 간단한 문자 답장 WeChat에서 선택한 기사 조회

사용자 팔로우 공식 계정 후, 호텔 검색 후 답장을 주시고, 위치를 답장하시면 주변 호텔 정보를 받아보실 수 있습니다.

위 글의 내용은 모두의 공부에 도움이 되었으면 좋겠습니다

위 내용은 PHP WeChat 개발은 사용자 응답 키워드위치를 기반으로 주변 정보를 반환합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.