思路分析:

1、在微信公众号内获取用户地理位置

需要js-sdk签名包(关于如何获取文档有介绍)

2、根据获取的地理位置ajax去后台请求,通过sql语句,查询中距离最近的门店(sql语句在网上搜的,位置是通过后台添加的)

3、根据城市查询门店列表,使用通过表单提交事件,ajax请求后台获取列表

4、百度地图导航页面要注意引入地址

一、开始开发

1、该功能的实现需要调用微信公众号的js-sdk接口实现

简介:

微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包。

通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用微信分享、扫一扫、卡券、支付等微信特有的能力,为微信用户提供更优质的网页体验。

2、调用微信js-sdk的步骤:官方的网址:https://mp.weixin.qq.com/wiki

步骤一:绑定域名

先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。

步骤二:引入JS文件

在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.2.0.js

备注:支持使用 AMD/CMD 标准模块加载方法加载

步骤三:通过config接口注入权限验证配置

所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用,目前Android微信客户端不支持pushState的H5新特性,所以使用pushState来实现web app的页面会导致签名失败,此问题会在Android6.2中修复)

具体的使用可以查看官方的文档

wx.config({

debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。

appId: '', // 必填,公众号的唯一标识

timestamp: , // 必填,生成签名的时间戳

nonceStr: '', // 必填,生成签名的随机串

signature: '',// 必填,签名,见附录1

jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2

});

步骤四:通过ready接口处理成功验证

wx.ready(function(){

// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。

});

步骤五:通过error接口处理失败验证

wx.error(function(res){

// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。

})

自己的程序代码附上(我做的是获取用户的地理位置,就是出现一个获取地理位置的弹窗):

html页面:

//引入微信js文件

//配置信息验证接口

wx.config({

debug: false,

appId: '<?php echo $signPackage["appId"];?>',

timestamp: '<?php echo $signPackage["timestamp"];?>',

nonceStr: '<?php echo $signPackage["nonceStr"];?>',

signature: '<?php echo $signPackage["signature"];?>',

jsApiList: [

// 所有要调用的 API 都要加到这个列表中

'checkJsApi',

'openLocation',

'getLocation'

]

});

//验证之后进入该函数,所有需要加载页面时调用的接口都必须写在该里面

wx.ready(function () {

//基础接口判断当前客户端版本是否支持指定JS接口

wx.checkJsApi({

jsApiList: [

'getLocation'

],

success: function (res) {

// alert(JSON.stringify(res));

// alert(JSON.stringify(res.checkResult.getLocation));

if (res.checkResult.getLocation == false) {

alert('你的微信版本太低,不支持微信JS接口,请升级到最新的微信版本!');

return;

}

}

});

//微信获取地理位置并拉取用户列表(用户允许获取用户的经纬度)

wx.getLocation({

success: function (res) {

var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90

var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。

//去数据库查询获取附近的门店

$.ajax({

type: 'post',

url: '__CONTROLLER__/shopList',

dataType: 'json',

data: {"latitude": latitude,"longitude":longitude},

success:function(shopInfo){

//index是下表,el是值

$(shopInfo).each(function(index,el){

$("#list").append('

'+el.shop_name+'

'+el.shop_position+'

  • 一键导航 '+el.distance/1000+'km

');

})

}

});

},

cancel: function (res) {

$(".city").triggerHandler("focus");

}

});

});

控制器中获取门店通过sql语句获取距离一定距离的门店的列表:

if(IS_AJAX){

$post = I('post.');

//纬度小,经度大

// 5公里范围是5000

$longitude = $post['longitude'];//经度信息

$latitude = $post['latitude'];//纬度信息

//通过sql语句查询距离5公里之内的门店

$sql = "select * from (select shop_id,shop_name,shop_tel,shop_position,shop_logo, ROUND(6378.138*2*ASIN(SQRT(POW(SIN(($latitude*PI()/180-`shop_wei`*PI()/180)/2),2)+COS($latitude*PI()/180)*COS(`shop_wei`*PI()/180)*POW(SIN(($longitude*PI()/180-`shop_jing`*PI()/180)/2),2)))*1000) AS distance from sp_shop order by distance ) as a where a.distance<=5000";

// $sql = "select * from (select shop_id,shop_name,shop_tel,shop_position,shop_logo, ROUND(6378.138*2*ASIN(SQRT(POW(SIN((36.09297*PI()/180-`shop_wei`*PI()/180)/2),2)+COS(36.09297*PI()/180)*COS(`shop_wei`*PI()/180)*POW(SIN((120.3743*PI()/180-`shop_jing`*PI()/180)/2),2)))*1000) AS distance from sp_shop order by distance ) as a where a.distance<=5000";

$shopInfo = M()->query($sql);

echo json_encode($shopInfo);exit;

}else{

if(session('openid')){

//获取微信签名包信息(用户地理位置的获取)填写的配置信息中,需要写入的东西(调用签名包封装的类:http://blog.csdn.net/bj123467/article/details/72910160)

$jssdk = new \Home\Model\WechatModel();

$signPackage = $jssdk->GetSignPackage();

$this->assign('signPackage', $signPackage);

$this->display();

}else{

//判断该用户是否存在

$model = new \Home\Model\WechatModel();

$openid_accesstoken = $model->openId();

$rst = M('user')->where(array('user_openid' => $openid_accesstoken['openid']))->find();

if($rst){

session('openid',$openid_accesstoken['openid']);

session('user_id', $rst['user_id']);

$jssdk = new \Home\Model\WechatModel();

$signPackage = $jssdk->GetSignPackage();

$this->assign('signPackage', $signPackage);

$this->display();exit;

}else{

//如果不存在获取微信用户的基本信息

$userInfo = $model->getOpenId($openid_accesstoken['openid'],$openid_accesstoken['access_token']);

$data = array(

'user_img' => $userInfo['headimgurl'],

'user_openid' => $userInfo['openid'],

'user_name' => filter($userInfo['nickname']),

'user_register_time' => time(),

'city' => $userInfo['province'].'-'.$userInfo['city'],

);

$id = M('user')->add($data);

session('openid', $userInfo['openid']);

session('user_id',$id);

$jssdk = new \Home\Model\WechatModel();

$signPackage = $jssdk->GetSignPackage();

$this->assign('signPackage', $signPackage);

$this->display();

}

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

java查看附近门店_微信公众号获取用户地理位置并列出附近的门店的示例代码...相关推荐

  1. php 微信获取门店列表,【转载】微信公众号获取用户地理位置并列出附近的门店...

    思路分析: 1.在微信公众号内获取用户地理位置 需要js-sdk签名包(关于如何获取文档有介绍) 2.根据获取的地理位置ajax去后台请求,通过sql语句,查询中距离最近的门店(sql语句在网上搜的, ...

  2. python 公众号 关注者位置_微信公众号获取用户地理位置

    很久没搞微信的js-sdk了, 搞了一下午, 刷新页面老是失败, 没想到结合经验给大家展示下获取用户地理位置 第一步:登录微信公众号https://mp.weixin.qq.com 首先先设置最基本的 ...

  3. 微信公众号获取用户地理位置,转换百度坐标

    开发微信公众号,首先要先成为开发者.请自行百度. 在微信公众平台开启接口权限--接口权限-网页服务-地理位置-开启 JSSDK使用步骤 步骤一:绑定域名 先登录微信公众平台进入"公众号设置& ...

  4. php微信jssdk获取位置,微信公众号获取用户地理位置

    微信公众开放平台 接口文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140841 获取用户地理位置(需要用户点击同 ...

  5. PHP微信公众号获取用户地理位置,获取用户地理位置

    开通了上报地理位置接口的公众号,用户在关注后进入公众号会话时,会弹框让用户确认是否允许公众号使用其地理位置.弹框只在关注后出现一次,用户以后可以在公众号详情页面进行操作. 第三方在收到地理位置上报信息 ...

  6. PHP微信公众号,获取用户地理位置 定位 经纬度

    <?php //php插件下载地址: https://files.cnblogs.com/files/fan-bk/jssdk_php.rar //建立一个php文件 require_once ...

  7. php微信地理位置,php,微信公众号,获取用户地理位置 定位 经纬度

    //php插件下载地址: https://files.cnblogs.com/files/fan-bk/jssdk_php.rar //建立一个php文件 require_once "jss ...

  8. PHP 公众号获取用户地理位置,微信公众号接口配置,并利用接口获取用户地理位置...

    微信公众号获取用户地理位置有两种方法: 一是在进入微信公众号时获取,然后微信服务器将位置传到我们的服务器. 二是在公众号网页中,通过 JS-SDK 获取. 本文介绍的是第一种方法,第二种方法的部分内容 ...

  9. java微信获取用户列表_微信公众平台 获取用户列表

    一.接口说明 公众号可通过本接口来获取帐号的关注者列表,关注者列表由一串OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的)组成.一次拉取调用最多拉取10000个关注者的Open ...

最新文章

  1. 读自动驾驶激光雷达物体检测技术(Lidar Obstacle Detection)(1):Stream PCD流式载入激光点云数据
  2. angularjs-ngModel 控制页面的宽度
  3. 什么是服务器端口?服务器端口都有哪些?
  4. Android开发系列(三)
  5. 【Python】面向小白的Python可视化教程,超全的!
  6. nuget 包版本冲突解决 packages.config
  7. 聊聊在Go语言里使用继承的翻车经历
  8. 周末ROS学习沙龙第一期——ROS历史、安装、消息话题节点服务等概念、SLAM导航框架及参数、小车上运行SLAM
  9. springboot2源码2-SpringApplication运行
  10. 数据挖掘前景及工作方向选择
  11. tar.bz2解压报错误 Error is not recoverable: exiting now
  12. 卫星追踪利器 OpenATS简介
  13. lettcode算法题目--玛祖游戏
  14. Swift之Attempting to badge the application icon but haven't received permission from the user to badg
  15. pandas -- 基础操作(六):数据分组及透视表,df.groupby、pd.pivot,、pd.pivot_table、stack(堆叠)、 unstack(不堆叠)
  16. php session传数组,php session存储数组
  17. 【matlab】三次埃尔米特插值与三次样条插值的实际应用代码
  18. Spring扩展点总结
  19. threejs封装加载 .glb 格式模型,修改贴图
  20. vmware虚拟机安装win7_vmware虚拟机中安装mac Catalina10.15

热门文章

  1. 不礼让行人怎么抓拍的_去交警队看看,不礼让行人抓拍如何界定?
  2. 移动硬盘 计算机不能启动不了,移动硬盘:该设备无法启动.(代码 10)
  3. 427. 建立四叉树
  4. 关于使用mathtype插件对word公式进行右编号,章节编号更新,以及红色字体去掉问题
  5. CLIP与CoOp代码分析
  6. ASAN 检测内存错误 debug
  7. 【Linux】ARM篇一--计算机基础与RAM处理器概论
  8. Git 提交规范之GIt工作流规范(Husky+eslint+stylelint+pretty+Commitlint+ lint-staged)
  9. PHP母亲节,用PS设计感恩母亲节字体海报的教程
  10. python实现二分查找_数据结构和算法:Python实现二分查找(Binary_search)