微信小程序授权获取用户具体位置,经纬度转换位置信息

1、获取用户当前的设置(判断授权状态)

使用wx.getSetting接口
获取用户的当前设置。返回值中会出现小程序已经向用户请求过的权限。
然后我们去判断用户地理位置的授权状态,根据状态做相应的操作
具体实现方式如下

getUserLocation: function () {
	var _this=this
	wx.getSetting({
	  success (res) {
	    console.log(res.authSetting)//会返回用户授权的结果
	//scope.userLocation参数表示的是地理位置授权状态 
	// undefined-初始化进入该页面/false-非初始化进入该页面,且未授权/true-地理位置授权
	  let locationStatus=res.authSetting['scope.userLocation']
	     if (locationStatus != undefined && locationStatus != true) {
	          //未授权
	          wx.showModal({
	            title: '请求授权当前位置',
	            content: '需要获取您的地理位置,请确认授权',
	            success: function (res) {
	              if (res.cancel) {
	                //取消授权
	                wx.showToast({
	                  title: '拒绝授权',
	                  icon: 'none',
	                  duration: 1000
	                })
	              } else if (res.confirm) {
	                //用户拒接授权后,通过wx.openSetting重新发起授权请求
	                wx.openSetting({
	                  success: function (res) {
	                    if (locationStatus == true) {
	                      wx.showToast({
	                        title: '授权成功',
	                        icon: 'success',
	                        duration: 1000
	                      })
	                      //再次授权,调用wx.getLocation的API
	                      _this.getLocation();
	                    } else {
	                      wx.showToast({
	                        title: '授权失败',
	                        icon: 'none',
	                        duration: 1000
	                      })
	                    }
	                  }
	                })
	              }
	            }
	          })
	        } else if (locationStatus == undefined) {
	          //用户首次进入页面,调用wx.getLocation的API
	          _this.getLocation();
	        } else {
	          console.log('授权成功')
	          //调用wx.getLocation的API
	          _this.getLocation();
	        }
		}
	})
}

2、调取微信接口拿到位置经纬度

  getLocation: function () {
    let that = this;
    wx.getLocation({ //拿到经纬度
      type: 'gcj02',
      //type参数默认为wgs84返回 gps 坐标,gcj02 返回可用于 wx.openLocation 的坐标
      success: function (res) {
        var latitude = res.latitude //纬度,范围为 -90~90,负数表示南纬
        var longitude = res.longitude //经度,范围为 -180~180,负数表示西经
        console.log("经纬度:latitude " + latitude + " ;longitude " + longitude) //这里获取的是经纬度坐标
        that.getLocal(latitude, longitude) //把经纬度传给getLocal方法
      },
      fail: function (res) {
        console.log('fail ' + JSON.stringify(res))
      }
    })
  },

在获取定位后,如果是在微信开发者工具中进行调试,会发现获取到的定位不够精确。按照官方的回复是工具上用的是模拟使用IP定位,而且只支持gcj02 坐标,会存在一定的误差。而且在实际的测试中发现gcj02会比wgs84会精确一些,所以建议使用gcj02

3、通过经纬度获取具体位置

我们已经拿到了用户的经纬度,我这里通过腾讯位置服务把经纬度转换成具体的地理位置(当然也可以通过百度或者高德等,逻辑都一样的)
首先需要获取腾讯位置服务的开发者秘钥然后下载微信小程序的javaScriptSDK文件
在这里插入图片描述
在这里插入图片描述
接下来引入sdk文件通过腾讯获取具体位置

var QQMapWX = require('./utils/qqmap-wx-jssdk.js');//引入SDK文件
var qqmapsdk;

 onLaunch: function () {
    qqmapsdk = new QQMapWX({//创建实例
      //腾讯位置服务:   https://lbs.qq.com/console/mykey.html
      key: '' //这里自己的key秘钥进行填充,该key是腾讯位置服务中申请的
    });
     that.getUserLocation()
    }
  // 获取当前地理位置
  getLocal: function (latitude, longitude) { //把经纬度转换成地理位置
    let that = this;
    qqmapsdk.reverseGeocoder({//使用腾讯位置服务的API传入经纬度
      location: {
        latitude: latitude,
        longitude: longitude
      },
      success: function (res) {
        let province = res.result.ad_info.province
        let city = res.result.ad_info.city
        let address=res.result.address
        console.log("province:"+province,"city:"+city,"address:"+address);
        //就可以得到具体的省市区及详细位置
        that.globalData.userInfo.province = province
        that.globalData.userInfo.city = city
        that.globalData.userInfo.address = address
        that.globalData.userInfo.latitude = latitude
        that.globalData.userInfo.longitude = longitude
      }
    });
  },
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在PHP中实现微信小程序授权获取用户信息绑定手机号登录,可以按照以下步骤进行操作: 1. 在微信小程序端,通过`wx.login`获取用户的临时登录凭证`code`。 2. 将获取到的`code`发送到服务器端,使用`https`接口调用`code2Session`接口,获取到`openid`和`session_key`。 3. 将`openid`和`session_key`保存至服务器端数据库或缓存中。 4. 在小程序端,使用`wx.getUserInfo`获取用户信息,包括`nickName`、`avatarUrl`等,并将用户信息传输到服务器端。 5. 在服务器端,接收到用户信息后,将用户信息保存到服务器数据库中,可以使用`openid`作为用户的唯一标识。 6. 在小程序端,点击绑定手机号的按钮,调用`wx.request`向服务器发送请求,请求获取手机号的能力。 7. 在服务器端,接收到手机号请求后,可以返回一个包含手机号获取能力的`code`给小程序端。 8. 小程序端收到`code`后,调用`wx.request`向服务器发送请求,请求获取手机号。 9. 服务器端接收到获取手机号的请求后,可以通过调用微信开放平台提供的解密能力,解密包含手机号的数据,并将解密得到的手机号与用户信息进行绑定。 10. 绑定成功后,返回相应的状态给小程序端。 总结:通过以上步骤,我们可以在PHP中实现微信小程序授权获取用户信息绑定手机号登录的功能。在小程序端,用户使用微信授权登录后,将用户信息传输到服务器端保存,并通过绑定手机号使用户能够更便捷地登录和使用小程序。同时,在服务器端需要进行数据加密和解密的操作,确保用户信息安全。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值