首页 > 程序开发 > 微信开发 > 微信开发之获取附近门店
网站建设、切图、企业建站、微信开发 联系QQ:404658186 tel:18716186715
2015
06-19

微信开发之获取附近门店

在微信公众平台开发中,如果你有多个线下门店,如果用户需要获取你门店信息,那么向用户发送附近门店,无疑会让用户体验度更佳。

操作过程:

  1. 用户点击微信导航菜单,如“附近门店”,关键词“附近门店”。
  2. 服务器接收事件信息,再根据用户的地理位置信息和服务器上存储的门店地理位置信息,两者比较并将获取后的内容通过图文信息发送到用户微信上。

首先你的数据库中需要存储门店信息,具体信息应包括门店名、门店位置、门店电话号码等信息,这里就不在赘述,如果有需要可以留言提需求。

先看一看所需函数

获取两点之间距离,获取两个坐标之间的公里数

//计算两点间的距离
    function rad($d) {
        return $d * 3.1415926535898 / 180.0;
    }
    function GetDistance($lat1, $lng1, $lat2, $lng2) {
        $EARTH_RADIUS = 6378.137;
        $radLat1 = $this->rad($lat1);
        //echo $radLat1;
        $radLat2 = $this->rad($lat2);
        $a = $radLat1 - $radLat2;
        $b = $this->rad($lng1) - $this->rad($lng2);
        $s = 2 * asin(sqrt(pow(sin($a / 2) , 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2) , 2)));
        $s = $s * $EARTH_RADIUS;
        $s = round($s * 10000) / 10000;
        return $s;
    }

数组排序,把获取到的数据进行排序,以便对距离进行由近及远的排序

    //二维数组排序
    function array_sort($arr, $keys, $type = 'asc') {
        $keysvalue = $new_array = array();
        foreach ($arr as $k => $v) {
            $keysvalue[$k] = $v[$keys];
        }
        if ($type == 'asc') {
            asort($keysvalue);
        } else {
            arsort($keysvalue);
        }
        reset($keysvalue);
        foreach ($keysvalue as $k => $v) {
            $new_array[$k] = $arr[$k];
        }
        return $new_array;
    }

接收用户发送过来的信息,如果是发送关键词是”附近门店”,则执行函数getNode()

这里涉及一个微信sdk,点击查看详情

$token = '7894578953485348944qwe'; //微信后台填写的TOKEN         
/* 加载微信SDK */
$wechat = new Wechat($token);
/* 获取请求信息 */
$data = $wechat->request();		 
if($data && is_array($data)){
	if ($data['keyword'] == '附近门店') {
             $return_data = $this->getNode($data['FromUserName']);
             $wechat->response($return_data, Wechat::MSG_TYPE_NEWS); //回复门店信息
         }
}

函数getNode(),具体负责通过用户地理位置信息,查找附近门店并发送给用户

public function getNode($fromuser) {

        //获取用户最后一次发送的地理位位置信息
        $condition_pos['FromUserName'] = $fromuser;
        $condition_pos['Longitude'] = array(
            'neq',
            ''
        );
        $condition_pos['Longitude'] = array(
            'neq',
            ''
        );
        $mypostion = M('wxuser_location')->order('id desc')->where($condition_pos)->find();

        if ($mypostion) {
            $nods_info = M('nodes')->where($condition_nopos)->select(); //查询门店信息
            $myLatitude = floatval($mypostion['Latitude']); //用户的x坐标
            $myLongitude = floatval($mypostion['Longitude']); //用户的y坐标
            foreach ($nods_info as $value) { 
                $nodeLatitude = $value['Latitude'];
                $nodeLatitude = $value['Longitude'];
                $returninfo['rad'] = $this->GetDistance($nodepostion, $nodeLatitude, $myLatitude, $myLongitude);//比较获取距离
            }
            $returninfo = $this->array_sort($array, 'rad'); //进行排序
            foreach ($returninfo as $key => $value) {
                if ($key <= 8) { //只推送8条
                    $return[] = array(
                        $value['name'],//门店名称
                        'http://www.devdo.net/wp-content/themes/frontopen2_v1.5.04.15/images/pic/9.jpg',//门店图片
                        'http://www.devdo.net/'//门店详情链接url
                    );
                }
            }
            return $return;
        } 
    }
最后编辑:
作者:码农一号
这个作者貌似有点懒,什么都没有留下。
捐 赠如果您觉得这篇文章有用处,请支持作者!鼓励作者写出更好更多的文章!

留下一个回复

你的email不会被公开。

*