浅谈PHP实现微信获取周边信息功能

8 篇文章 0 订阅

最近,在做微信公众平台PHP开发时,实现了根据用户发送的自身定位消息来获取周边信息的功能,为防止时间久后会忘记,特此总结,与大家分享,希望可以共同进步!!!


首先,我们自身的服务器应该与微信服务器对接成功,关于怎么去对接,笔者这里不再赘余,大家可以参考微信提供的开发者文档来实现对接功能。


当我们对接成功后,就可以根据用户发送的定位消息来实现了,这里我们使用的是百度开放平台提供的地图API(http://developer.baidu.com/map/webservice.htm)和静态图API(http://developer.baidu.com/map/static-1.htm),前提是我们需要注册百度帐号,毕竟免费用人家的东西嘛...



下面进行详细讲解:

1、一个API的事例,设置城市为北京,检索关键字是“银行”

http://api.map.baidu.com/place/v2/search?&query=银行&location=39.915,116.404&radius=2000&output=xml&ak=E4805d16520de693a3fe707cdc962045

2、接口参数




返回的结果为:

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<PlaceSearchResponse>
<status>0</status>
<message>ok</message>
<results>
<result>
<name>中国银行(前门支行)</name>
<location>
<lat>39.908395</lat>
<lng>116.401507</lng>
</location>
<address>东城区西交民巷17号</address>
<uid>9077bab3ea018f6a7dc876e1</uid>
</result>
<result>
<name>中国工商银行(自动柜员机店)</name>
<location>
<lat>39.92203</lat>
<lng>116.40349</lng>
</location>
<address>西城区景山前街4号故宫景运门</address>
<uid>8ae8bed1a027af62705e8077</uid>
</result>
<result>
<name>中国工商银行(华龙街分理处)</name>
<location>
<lat>39.915002</lat>
<lng>116.413638</lng>
</location>
<address>东城区南河沿华龙街北京天安大厦贵宾楼饭店</address>
<uid>8d0f865a1c57ef4e76e5b6ff</uid>
</result>
<result>
<name>中国工商银行(长安和平门内支行)</name>
<location>
<lat>39.90742</lat>
<lng>116.390732</lng>
</location>
<address>北京市西城区北新华街东松树胡同甲31号</address>
<telephone>(010)66055708,(010)66057768</telephone>
<uid>a74481d691a0bf46f503b838</uid>
</result>
<result>
<name>中国农业银行长安支行</name>
<location>
<lat>39.910138</lat>
<lng>116.41365</lng>
</location>
<address>北京市东城区正义路3号卫戍区正义路物业楼</address>
<telephone>(010)65250432</telephone>
<uid>37d60a4657d8ce601e1d11c9</uid>
</result>
<result>
<name>中国工商银行(北池子储蓄所)</name>
<location>
<lat>39.921698</lat>
<lng>116.409168</lng>
</location>
<address>东城区东华门大街87号</address>
<uid>9577afcbeb7f4c1ae812e46c</uid>
</result>
<result>
<name>中国工商银行北京东交民巷分理处</name>
<location>
<lat>39.908091</lat>
<lng>116.413558</lng>
</location>
<address>北京市东城区正义路东交民巷30-6号</address>
<telephone>010-65266185</telephone>
<uid>5e53af1accd7a25c4151c026</uid>
</result>
<result>
<name>中国工商银行东长安街支行</name>
<location>
<lat>39.91588</lat>
<lng>116.418675</lng>
</location>
<address>北京市东城区东长安街1号东方广场W3座</address>
<telephone>(010)85181650</telephone>
<uid>24d05508ea8ccbd2128824de</uid>
</result>
<result>
<name>中国工商银行新东安支行</name>
<location>
<lat>39.919304</lat>
<lng>116.417906</lng>
</location>
<address>北京市东城区王府井大街138号一层</address>
<telephone>010-65256818</telephone>
<uid>8e96d243973dc4bfc51b75e5</uid>
</result>
<result>
<name>中国工商银行北京王府井金街支行</name>
<location>
<lat>39.921006</lat>
<lng>116.417403</lng>
</location>
<address>北京市市辖区东城区北京市东城区王府井大街237号</address>
<telephone>(010)65246520</telephone>
<uid>7d5f3a0afc6a944b2cb908c9</uid>
</result>
</results>
</PlaceSearchResponse>


3、下面我们介绍下百度地图API-静态地图生成

http://api.map.baidu.com/lbsapi/staticmap/staticmap-helper.html


4、下面是demo:获取用户定位信息

 //地理位置纬度
    $location_X = $xmlArr['Location_X'];
    
    //地理位置经度
    $location_Y = $xmlArr['Location_Y'];

5、调用百度接口,并设置接收数据为json格式,进行json字符串编码

 //百度圆形区域地图调用接口
    $strUrl = "http://api.map.baidu.com/place/v2/search?&query=".$forName."&location=".$location_X.",".$location_Y."&radius=1500&output=json&ak=ekpxLUyfp8Lv7W1gdj57Oji6";

    //接受json数据
    $jsonStr = file_get_contents($strUrl);

    //进行json字符串编码
    $jsonArr = json_decode($jsonStr,TRUE);

6、生成静态地图图片,获取该图片的二进制编码,将图片保存在服务器

 //获取百度地图生成图片
    $pic_640 = "http://api.map.baidu.com/staticimage?width=640&height=320¢er=".$location_Y.",".$location_X."&zoom=13&markers=".$location_Y.",".$location_X."&markerStyles=l,";

    $pic_80 = "http://api.map.baidu.com/staticimage?width=80&height=80¢er=".$location_Y.",".$location_X."&zoom=13&markers=".$location_Y.",".$location_X."&markerStyles=l,";


    //获取图片的二进制编码
    $p_640 = file_get_contents($pic_640);
    file_put_contents("./images/640_".$xmlArr['FromUserName'].".png",$p_640);


    $p_80 = file_get_contents($pic_80);
    file_put_contents("./images/80_".$xmlArr['FromUserName'].".png",$p_80);


7、组装成xml字符串,返回给用户

 $xmlPic = "<xml>
                    <ToUserName><![CDATA[".$xmlArr['FromUserName']."]]></ToUserName>
                    <FromUserName><![CDATA[".$xmlArr['ToUserName']."]]></FromUserName>
                    <CreateTime>".time()."</CreateTime>
                    <MsgType><![CDATA[news]]></MsgType>
                    <ArticleCount>".count($arr)."</ArticleCount>
                    <Articles>";

        //遍历地理位置信息
        foreach($arr as $key => $val)
        {
            if($key == 0)
            {
                $picUrl = "http://weixin.duapp.com/images/640_".$xmlArr['FromUserName'].".png";
            }
            else
            {
                $picUrl = "http://weixin.duapp.com/images/80_".$xmlArr['FromUserName'].".png";
            }

            $xmlPic .="<item>
                    <Title><![CDATA[".$val['name']." 地址:".$val['address']." 电话:".$val['telephone']."]]></Title> 
                    <Description><![CDATA[".$val['name']." 地址:".$val['address']." 电话:".$val['telephone']."]]></Description>
                    <PicUrl><![CDATA[".$picUrl."]]></PicUrl>
                    <Url><![CDATA[http://api.map.baidu.com/place/detail?uid=".$val['uid']."&output=html&src=".$val['name']."&output=html]]></Url>
                    </item>";
        }

        $xmlPic .= " </Articles></xml>";

        echo $xmlPic;


8、事例样式图片:




特此分享,如有错误,欢迎大家指出,嘿嘿~~~

(完)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值