*/
export const handleGetLocation = (config) => {
return new Promise((resolve, reject)=>{
wxconfigInfo(config)
wx.ready(function () {
wx.getLocation({
type: 'wgs84', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
success: function (res) {
console.warn('微信sdk定位成功', res)
resolve({
lat: res.latitude, // 纬度
lng: res.longitude, // 经度
speed: res.speed, // 速度,以米/每秒计
accuracy: res.accuracy // 位置精度
})
},
fail: function (err) {
console.error('微信sdk定位失败', err)
reject(err)
}
})
})
wx.error(function(err) {
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
console.log('wxjsapi-error=', err)
reject(`wxjsapi-error: ${err}`)
})
})
2.3 根据不同运行环境调用不同的定位方法
// public.js/**
* UA枚举
*/
const UA = {
/**
* 微信h5
*/
WECHAT: 'WECHAT',
/**
* 支付宝h5
*/
ALIPAY: 'ALIPAY',
/**
* 其他
*/
OTHERS: 'OTHERS'
}
/**
* 判断客户端运行环境 这里只判断微信和浏览器h5
*/
export const getUserAgent = () => {
var userAgent = navigator.userAgent.toLowerCase()
if (userAgent.match(/Alipay/i) == 'alipay') {
return UA.ALIPAY
} else if (userAgent.match(/MicroMessenger/i) == 'micromessenger') {
return UA.WECHAT
} else {
return UA.OTHERS
}
}
// js-sdk.js
/**
* 唤起微信api
* @param {*} _href 当前页面url
* @param {*} options 分享信息
* @param {*} apiType 调用api类型
*/
export const handleWXSDKCall = (_href, apiType, options) => {
return new Promise((resolve, reject)=>{
// 通过后台接口获取配置信息
WeChatServivce.sign(_href)
.then(res => {
if (res) {
if ( apiType === 'location' ) {
handleGetLocation(res).then((res)=>{
resolve(res)
}).catch(err=>{
reject(err)
})
}
}
})
.catch(err => {
reject(`err-sign: ${err}`)
uni.showToast({
title: err.data.code + err.data.msg,
mask: true,
icon: 'none'
})
})
})
}
// getLocation.js
import { getUserAgent, handlerLoadScript } from '@/module/utils'
import { handleWXSDKCall } from '@/module/utils/wechat/wxJsApiSdk'
import UA from '@/module/enums/userAgent'
import TMap from '@/module/utils/tMap'/**
* 对外暴露的获取位置方法
* @return Promise resolve一个 positionData 对象 lat-纬度 lng-经度









