【微信开发】-发送位置获取周边信息及生成百度全景静态图API,主要代码在private function receiveLocation($object)
2016-10-07 14:08
861 查看
百度地图全景静态图API与静态图API类似,可轻松实现将全景地图以图片形式嵌入到您的应用中。您只需要设置图片尺寸、经纬度坐标等参数,发送HTTP请求访问百度地图全景静态图服务,便可在您的PC浏览器、手机浏览器、移动APP或者车机显示屏中以图片形式显示您的全景图。
该套API免费对外开放,使用前请先申请密钥。注意:申请密钥时,请选择AK的应用类型为 “for server”。
您在使用百度地图Web服务 API之前,请先阅读百度地图API使用条款。任何非营利性应用请直接使用,商业应用请参考使用须知。
详见官网:http://lbsyun.baidu.com/index.php?title=viewstatic
该套API免费对外开放,使用前请先申请密钥。注意:申请密钥时,请选择AK的应用类型为 “for server”。
您在使用百度地图Web服务 API之前,请先阅读百度地图API使用条款。任何非营利性应用请直接使用,商业应用请参考使用须知。
详见官网:http://lbsyun.baidu.com/index.php?title=viewstatic
<? header("Content-type: text/html; charset=utf-8"); define("TOKEN","自填"); define("APPID","自填"); define("APPSECRET","自填"); $wechatObj = new wechatCallbackapiTest(); if(!isset($_GET["echostr"])){ $wechatObj -> responseMsg(); }else{ $wechatObj ->valid(); } class wechatCallbackapiTest{ public function valid(){ $echoStr = $_GET["echostr"]; if($this->checkSignature()){ echo $echoStr; exit; } } private function checkSignature(){ if(!defined("TOKEN")){ throw new Exception(); } $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token,$timestamp,$nonce); sort($tmpArr,SORT_STRING); $tmpStr = implode($tmpArr); $tmpStr = sha1($tmpStr); if($tmpStr == $signature){ return true; }else{ return false; } } public function responseMsg() { $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; if (!empty($postStr)){ $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $RX_TYPE = trim($postObj->MsgType); switch ($RX_TYPE) { case "event": $result = $this->receiveEvent($postObj); break; case "text": $result = $this->receiveText($postObj); break; case "image": $result = $this->receiveImage($postObj); break; case "location": $result = $this->receiveLocation($postObj); break; case "voice": $result = $this->receiveVoice($postObj); break; case "video": case "shortvideo": $result = $this->receiveVideo($postObj); break; case "link": $result = $this->receiveLink($postObj); break; default: $result = "unknown msg type: ".$RX_TYPE; break; } echo 4000 $result; }else { echo ""; exit; } } private function receiveEvent($object) { include("locationinfoUpload.php"); $resInsert = insertLocationinfo($object); $content = ""; switch ($object->Event) { case "subscribe": $content = "欢迎关注通州-羽我同行俱乐部!\n请回复以下关键字:文本 表情 单图文 多图文 音乐\n请按住说话 或 点击 + 再分别发送以下内容:语音 图片 小视频 我的收藏 位置"; $content .= (!empty($object->EventKey))?("\n来自二维码场景 ".str_replace("qrscene_","",$object->EventKey)):""; $content .= "\n\n".'<a href="羽我同行.cn">技术支持 大米</a>'; break; case "unsubscribe": $content = "取消关注"; break; case "CLICK": switch ($object->EventKey) { case "78": $content = array(); $content[] = array( "Title"=>"天气在手,羽球无忧,输入“天气北京”", "Description"=>"天气在手,羽球无忧,羽我同行! 输入“天气北京”即可轻松查询,支持全国城市!", "PicUrl"=>"http://mmbiz.qpic.cn/mmbiz_jpg/iahAbv73KOLFiafyCbpibBD4Igiag9XLpAnvgcCkyGYtwLDBFktS3aywkmhR8GibEs4HrNoicok4zKIQGJJBqxk5knicQ/0?wx_fmt=jpeg", "Url" =>"http://mp.weixin.qq.com/s?__biz=MzI3NTQwODE3OQ==&mid=100000024&idx=1&sn=63d36f4d6258a2a7df7260cd37333b66#rd" ); $content[] = array( "Title"=>"特色功能:输入“附近餐饮”查询", "Description"=>"输入“附近餐饮”即可轻松查询附近周边! 需开启\"提供位置信息\"功能,点右上角图标查看", "PicUrl"=>"http://mmbiz.qpic.cn/mmbiz_jpg/iahAbv73KOLFiafyCbpibBD4Igiag9XLpAnvD1QwJOFibNWCETbiaz1cKzj5MXTrGpXTq6RsqDnuCIAfcycGomuOFcwg/0?wx_fmt=jpeg", "Url" =>"http://mp.weixin.qq.com/s?__biz=MzI3NTQwODE3OQ==&mid=100000024&idx=2&sn=d3021285753f96c6a199b3b0479d34f7#rd" ); $content[] = array( "Title"=>"特色功能:输入“附近超市”查询", "Description"=>"输入“附近超市”即可轻松查询附近周边! 需开启\"提供位置信息\"功能,点右上角图标查看", "PicUrl"=>"http://mmbiz.qpic.cn/mmbiz_jpg/iahAbv73KOLFiafyCbpibBD4Igiag9XLpAnvt3EmZTIg0nmeUYZAwwibJzSErNP1s8ib3Hruj0Aiarfx8oIGGtRfI1HCQ/0?wx_fmt=jpeg", "Url" =>"http://mp.weixin.qq.com/s?__biz=MzI3NTQwODE3OQ==&mid=100000024&idx=3&sn=07821ccb872e2f123d223b9373c29cdb#rd" ); $content[] = array( "Title"=>"特色功能:输入“附近药店”查询", "Description"=>"输入“附近药店”即可轻松查询附近周边! 需开启\"提供位置信息\"功能,点右上角图标查看", "PicUrl"=>"http://mmbiz.qpic.cn/mmbiz_jpg/iahAbv73KOLFiafyCbpibBD4Igiag9XLpAnvYmm520Picj7r7F8rUXicMrSoTUgDYHiaqYYicziaibrdO10CA8CoCTgpicnjQ/0?wx_fmt=jpeg", "Url" =>"http://mp.weixin.qq.com/s?__biz=MzI3NTQwODE3OQ==&mid=100000024&idx=4&sn=7c93ed6fd81ae0c7ffdb639964903f97#rd" ); $content[] = array( "Title"=>"特色功能:输入“附近”+“名称”", "Description"=>"输入“附近”+“名称”即可轻松查询附近周边! 需开启\"提供位置信息\"功能,点右上角图标查看", "PicUrl"=>"http://mmbiz.qpic.cn/mmbiz_jpg/iahAbv73KOLFiafyCbpibBD4Igiag9XLpAnvYe3tICkGPBBckzCSt9bwIXPYyZGicqdNLAh5TibYsVWpJecoT7LoNibNQ/0?wx_fmt=jpeg", "Url" =>"http://mp.weixin.qq.com/s?__biz=MzI3NTQwODE3OQ==&mid=100000024&idx=5&sn=08ea56fd170e2faefc0438b2a7ed7dac#rd" ); break; break; } break; case "VIEW": $content = "跳转链接 ".$object->EventKey; break; case "SCAN": $content = "扫描场景 ".$object->EventKey; break; case "LOCATION": $content = "上传位置:纬度 ".$object->Latitude.";经度 ".$object->Longitude; break; case "scancode_waitmsg": if ($object->ScanCodeInfo->ScanType == "qrcode"){ $content = "扫码带提示:类型 二维码 结果:".$object->ScanCodeInfo->ScanResult; }else if ($object->ScanCodeInfo->ScanType == "barcode"){ $codeinfo = explode(",",strval($object->ScanCodeInfo->ScanResult)); $codeValue = $codeinfo[1]; $content = "扫码带提示:类型 条形码 结果:".$codeValue; }else{ $content = "扫码带提示:类型 ".$object->ScanCodeInfo->ScanType." 结果:".$object->ScanCodeInfo->ScanResult; } break; case "scancode_push": $content = "扫码推事件"; break; case "pic_sysphoto": $content = "系统拍照"; break; case "pic_weixin": $content = "相册发图:数量 ".$object->SendPicsInfo->Count; break; case "pic_photo_or_album": $content = "拍照或者相册:数量 ".$object->SendPicsInfo->Count; break; case "location_select": $content = "发送位置:标签 ".$object->SendLocationInfo->Label; break; default: $content = "receive a new event: ".$object->Event; break; } if(is_array($content)){ $result = $this->transmitNews($object, $content); }else{ $result = $this->transmitText($object, $content); } return $result; } private function receiveText($object) { $keyword = trim($object->Content); $findKeywordText = mb_substr($keyword,0,2,'UTF-8'); if($findKeywordText == "天气"){ $findKeyword = mb_substr($keyword,2,strlen($keyword),'UTF-8'); $keyword = trim($object->Content); include("weather.php"); $content = getWeatherInfo($keyword); $result = $this->transmitNews($object, $content); return $result; }//if 天气完 if($findKeywordText == "位置"){ $keyword = trim($object->Content); include("locationinfo.php"); $content = getLocationInfo($keyword,$object); if(is_array($content)){ $result = $this->transmitNews($object, $content); }else if(!is_array($content)){ $result = $this->transmitText($object, $content); } return $result; }//if 位置完 if($findKeywordText == "附近"){ $keyword = trim($object->Content); include("nearbyinfo.php"); $content = getNearbyInfo($keyword,$object); if(is_array($content)){ $result = $this->transmitNews($object, $content); }else if(!is_array($content)){ $result = $this->transmitText($object, $content); } return $result; } if (strstr($keyword, "请问在吗") || strstr($keyword, "在线客服")){ $result = $this->transmitService($object); return $result; } if (strstr($keyword, "文本")){ $content = "这是个文本消息"; }else if (strstr($keyword, "表情")){ $content = "微笑:/::)\n乒乓:/:oo\n中国:".$this->bytes_to_emoji(0x1F1E8).$this->bytes_to_emoji(0x1F1F3)."\n仙人掌:".$this->bytes_to_emoji(0x1F335); }else if (strstr($keyword, "单图文")){ $content = array(); $content[] = array("Title"=>"单图文标题", "Description"=>"单图文内容", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"); }else if (strstr($keyword, "图文") || strstr($keyword, "多图文")){ $content = array(); $content[] = array("Title"=>"多图文1标题", "Description"=>"", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"); $content[] = array("Title"=>"多图文2标题", "Description"=>"", "PicUrl"=>"http://d.hiphotos.bdimg.com/wisegame/pic/item/f3529822720e0cf3ac9f1ada0846f21fbe09aaa3.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"); $content[] = array("Title"=>"多图文3标题", "Description"=>"", "PicUrl"=>"http://g.hiphotos.bdimg.com/wisegame/pic/item/18cb0a46f21fbe090d338acc6a600c338644adfd.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"); }else if (strstr($keyword, "音乐")){ $content = array(); $content = array("Title"=>"最炫民族风", "Description"=>"歌手:凤凰传奇", "MusicUrl"=>"http://mascot-music.stor.sinaapp.com/zxmzf.mp3", "HQMusicUrl"=>"http://mascot-music.stor.sinaapp.com/zxmzf.mp3"); }else{ $content = '欢迎来到通州-羽我同行俱乐部!'."\n\n".'<a href="http://羽我同行.cn">通州-羽我同行 官方网站</a>'."\n\n".'<a href="http://i.youku.com/zyytaiya">通州-羽我同行 优酷空间</a>'; } if(is_array($content)){ if (isset($content[0])){ $result = $this->transmitNews($object, $content); }else if (isset($content['MusicUrl'])){ $result = $this->transmitMusic($object, $content); } }else{ $result = $this->transmitText($object, $content); } return $result; } private function receiveImage($object) { $content = array("MediaId"=>$object->MediaId); $result = $this->transmitImage($object, $content); return $result; } private function receiveLocation($object) { $lat = $object->Location_X; //纬度 $lng = $object->Location_Y; //经度 $q = "http://api.map.baidu.com/geoconv/v1/?coords={$lng},{$lat}&from=3&to=5&ak=YourBaiduKey"; $resultQ = json_decode(file_get_contents($q)); $x = $resultQ->result[0]->x; $y = $resultQ->result[0]->y; $content = array(); $content[] = array("Title"=>"百度地图 全景静态图 API","Description"=>"","PicUtl"=>"","Url"=>""); $url = "http://api.map.baidu.com/place/v2/search?q=医院®ion=北京&&output=json&page_size=10&page_num=0&scope=2&location=$y,$x&radius=2000&ak=YourBaiduKey"; $res = json_decode(file_get_contents($url),true); $numK=1; foreach($res['results'] as $k=>$v){ $content[$k]['Title'] = $v['name']." 地址:".$v['address']." 电话:".$v['telephone']; $content[$k]['Description'] = $v['address']; if($numK==1){ $content[$k]['PicUrl'] = 'http://api.map.baidu.com/panorama/v2?width=640&height=320&location='.$v['location']['lng'].','.$v['location']['lat'].'&fov=360&ak=YourBaiduKey'; }else{ $content[$k]['PicUrl'] = 'http://api.map.baidu.com/panorama/v2?width=80&height=80&location='.$v['location']['lng'].','.$v['location']['lat'].'&fov=90&ak=YourBaiduKey'; } $content[$k]['Url'] = isset($v['detail_info']['detail_url'])?$v['detail_info']['detail_url']:''; $numK++; }//forecach完 $result = $this->transmitNews($object, $content); return $result; } private function receiveVoice($object) { if (isset($object->Recognition) && !empty($object->Recognition)){ $content = "你刚才说的是:".$object->Recognition; $result = $this->transmitText($object, $content); }else{ $content = array("MediaId"=>$object->MediaId); $result = $this->transmitVoice($object, $content); } return $result; } private function receiveVideo($object) { $content = "上传视频类型:".$object->MsgType; $result = $this->transmitText($object, $content); return $result; } private function receiveLink($object) { $content = "你发送的是链接,标题为:".$object->Title.";内容为:".$object->Description.";链接地址为:".$object->Url; $result = $this->transmitText($object, $content); return $result; } private function transmitText($object, $content) { if (!isset($content) || empty($content)){ return ""; } $xmlTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[%s]]></Content> </xml>"; $result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time(), $content); return $result; } private function transmitNews($object, $newsArray) { if(!is_array($newsArray)){ return ""; } $itemTpl = " <item> <Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description> <PicUrl><![CDATA[%s]]></PicUrl> <Url><![CDATA[%s]]></Url> </item> "; $item_str = ""; foreach ($newsArray as $item){ $item_str .= sprintf($itemTpl, $item['Title'], $item['Description'], $item['PicUrl'], $item['Url']); } $xmlTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[news]]></MsgType> <ArticleCount>%s</ArticleCount> <Articles> $item_str </Articles> </xml>"; $result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time(), count($newsArray)); return $result; } private function transmitMusic($object, $musicArray) { if(!is_array($musicArray)){ return ""; } $itemTpl = "<Music> <Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description> <MusicUrl><![CDATA[%s]]></MusicUrl> <HQMusicUrl><![CDATA[%s]]></HQMusicUrl> </Music>"; $item_str = sprintf($itemTpl, $musicArray['Title'], $musicArray['Description'], $musicArray['MusicUrl'], $musicArray['HQMusicUrl']); $xmlTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[music]]></MsgType> $item_str </xml>"; $result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time()); return $result; } private function transmitImage($object, $imageArray) { $itemTpl = "<Image> <MediaId><![CDATA[%s]]></MediaId> </Image>"; $item_str = sprintf($itemTpl, $imageArray['MediaId']); $xmlTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[image]]></MsgType> $item_str </xml>"; $result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time()); return $result; } private function transmitVoice($object, $voiceArray) { $itemTpl = "<Voice> <MediaId><![CDATA[%s]]></MediaId> </Voice>"; $item_str = sprintf($itemTpl, $voiceArray['MediaId']); $xmlTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[voice]]></MsgType> $item_str </xml>"; $result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time()); return $result; } private function transmitVideo($object, $videoArray) { $itemTpl = "<Video> <MediaId><![CDATA[%s]]></MediaId> <ThumbMediaId><![CDATA[%s]]></ThumbMediaId> <Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description> </Video>"; $item_str = sprintf($itemTpl, $videoArray['MediaId'], $videoArray['ThumbMediaId'], $videoArray['Title'], $videoArray['Description']); $xmlTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[video]]></MsgType> $item_str </xml>"; $result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time()); return $result; } private function transmitService($object) { $xmlTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[transfer_customer_service]]></MsgType> </xml>"; $result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time()); return $result; } private function relayPart3($url, $rawData) { $headers = array("Content-Type: text/xml; charset=utf-8"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $rawData); $output = curl_exec($ch); curl_close($ch); return $output; } function bytes_to_emoji($cp) { if ($cp > 0x10000){ # 4 bytes return chr(0xF0 | (($cp & 0x1C0000) >> 18)).chr(0x80 | (($cp & 0x3F000) >> 12)).chr(0x80 | (($cp & 0xFC0) >> 6)).chr(0x80 | ($cp & 0x3F)); }else if ($cp > 0x800){ # 3 bytes return chr(0xE0 | (($cp & 0xF000) >> 12)).chr(0x80 | (($cp & 0xFC0) >> 6)).chr(0x80 | ($cp & 0x3F)); }else if ($cp > 0x80){ # 2 bytes return chr(0xC0 | (($cp & 0x7C0) >> 6)).chr(0x80 | ($cp & 0x3F)); }else{ # 1 byte return chr($cp); } } } ?>
相关文章推荐
- 【微信开发】-发送位置获取周边信息及生成百度静态图, 主要代码在private function receiveLocation($object)
- 【微信开发】-发送位置获取周边信息, 主要代码在private function receiveLocation($object)
- 【微信开发】-发送位置通过Timezone API查询时间偏移信息,主要代码在private function receiveLocation($object)
- 【微信开发】-发送位置获取Place Suggestion, 主要代码在private function receiveLocation($object)
- 【微信开发】-发送位置进行普通IP定位,主要代码在private function receiveLocation($object)
- 【微信开发】-发送位置进行Geocoding API转换(经纬度和地址名称互换), 主要代码在private function receiveLocation($object)
- 【微信开发】-发送位置线路规划Direction API v1.0, 主要代码在private function receiveLocation($object)
- 【微信开发】-发送位置进行Route Matrix API v2.0批量算路接口, 主要代码在private function receiveLocation($object)
- XMPP框架 微信项目开发之Socket聊天室发送数据——获取键盘高度,修改控件的约束值,代码滚动UITabView到指定位置
- C#的百度地图开发(三)依据坐标获取位置、商圈及周边信息
- 微信快速开发框架V2.3--增加语音识别及网页获取用户信息(八),代码已更新至Github
- 续【C#微信结合百度api获取当前用户的地理位置】代码详解
- 微信快速开发框架(八)-- V2.3--增加语音识别及网页获取用户信息,代码已更新至Github
- C#的百度地图开发(三)依据坐标获取位置、商圈及周边信息
- 微信服务号开发-获取用户位置信息
- C#的百度地图开发(三)依据坐标获取位置、商圈及周边信息
- 微信开发(三)获取用户信息,同时整理代码
- 微信快速开发框架(七)--发送客服信息,版本更新至V2.2 代码已更新至github