PHP微信开发之怎么根据用户回复关键词\位置返回附近信息

  介绍

小编给大家分享一下PHP微信开发之怎么根据用户回复关键词\位置返回附近信息,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

用户关注了微信公众号之后,可以回复用户的地理位置(腾讯地图)给公众号,提取位置信息的纬度和经度,转化为百度的纬度和经度。然后根据纬度和经度,调用百度地图的API,返回附近半径以2公里内的“饭店”“旅馆”(可以自定义)等信息。调用百度的API时,需要获取apiKEY,如果没有,请到百度开发者中心去注册和申请。

首先,用一组纬度和经度来测试接口返回的数据:

& lt; PHP ?/* *根据一组经纬度查找附近2公里以内的关键字* */头(& # 39;- 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&从=3,=5,正义与发展党=这里填写你的apikey";      $ res =, file_get_contents ($ url);   $ res =, json_decode (res美元,,真的);//用户发送腾讯的李玖哲地图位置信息经过转换之后,得到百度地图的经纬度   美元$ x =, res(& # 39;结果# 39;][0][& # 39;x # 39;];   美元$ y =, res(& # 39;结果# 39;][0][& # 39;y # 39;];//- - - - - - - - - - - -第二步:根据经纬度和关键词获得附近的信息- - - - - - - - - - -//参考链接:http://www.php.cn/时间=美元url “http://api.map.baidu.com/place/v2/search?ak=这里填写你的apikey&输出=json&查询=?只urlencode(“饭店“),只“,页大?10,page_num=0,范围=2,位置=$ x, y&美元;半径=2000“;;   $ res =, file_get_contents ($ url);   $ res =, json_decode (res美元,,真的);//,echo “& lt; pre>“;//,print_r (res);//,echo “& lt;/pre>“;      ,//提取所需的信息   foreach (res美元[& # 39;结果# 39;],as  $ k=祝辞美元v) {   美元,arr [$ k][& # 39;名字# 39;],=,美元v(& # 39;名字# 39;);   美元,arr [$ k][& # 39;地址# 39;],=,美元v(& # 39;地址# 39;);   美元,arr [$ k] [& # 39; img_url& # 39;],=, & # 39; http://misakaqnxt-public.stor.sinaapp.com/click.png& # 39;;   美元,arr [$ k] [& # 39; detail_url& # 39;],=,收取(v (& # 39; detail_info& # 39;] [& # 39; detail_url& # 39;]) ? v美元[& # 39;detail_info& # 39;] [& # 39; detail_url& # 39;]: & # 39; & # 39;;   }      ,echo “& lt; pre>“;   美元,print_r (arr);   ,echo “& lt;/pre>“

返回的数据

 PHP微信开发之怎么根据用户回复关键词\位置返回附近信息

如果你填写了正确的apikey,那么应该返回了上面的数据了。接下来:在微信的接口平台代码(放在你的公网域名空间里的PHP脚本)里,判断消息类型,并获取纬度和经度,调用百度地图API,拼接XML返回即可。由于百度API返回的数据里,没有“饭店”的缩略图,所以我就用了自己网站的一张图。
为了能够让用户自定义查找周围的“饭店“
或“旅馆”等信息,可以先让用户回复”寻找XX”,然后提取出XX,放到会话里,等用户再回复地理位置时取出会话。但我设置了会话之后,没能取出会话。所以我这里用新浪云的KVDB服务,当然你也可以用memcache或者复述,等缓存方式。

=mb_substr美元($关键字,0 2 & # 39;utf - 8 # 39;);

elseif (which 美元;==,“寻找“){      ,,,,,,,find 美元;=,str_replace(美元),,,,,,关键字美元);      ,,,,,,,//调用新浪云的KVDB服务   ,,,,,,,kv 美元;=,new  SaeKV ();   ,,,,,,,美元kv→init ();   ,,,,,,,美元kv→设置(& # 39;发现# 39;,,发现美元);      ,,,,,,,contentStr 美元;=,“选择表情旁边的& # 39;+ & # 39;发送位置,即可查找你要找的地方“;   ,,,,,,,resultStr 美元;=,sprintf (textTpl美元,fromUsername美元,toUsername美元,美元,,msgtype美元,美元contentStr);   ,,,,,,,echo  resultStr美元;   ,,,,,,,退出();      ,,,,,} ,elseif(美元postObj→MsgType ==, & # 39;位置# 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&从3=,=5,正义与发展党=这里填写你的apikey";   ,,,,,,,,,   ,,,,,,,,,res 美元;=,file_get_contents ($ url);   ,,,,,,,,,res 美元;=,json_decode (res美元,,真的);      ,,,,,,,,,//用户发送腾讯的李玖哲地图位置信息经过转换之后,得到百度地图的经纬度   ,,,,,,,,,x 美元;=,res美元[& # 39;结果# 39;][0][& # 39;x # 39;];   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

PHP微信开发之怎么根据用户回复关键词\位置返回附近信息