微信公众号获取用户位置信息

    xiaoxiao2022-06-30  133

     

    这个要用到js-sdk,主要是签名算法不清楚的会比较困难,js-sdk是第三方用到的

    首先配置  config

     

    wx.config({ debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: '', // 必填,公众号的唯一标识 timestamp: , // 必填,生成签名的时间戳 nonceStr: '', // 必填,生成签名的随机串 signature: '',// 必填,签名 jsApiList: ['getLocal'] // 必填,需要使用的JS接口列表 }); signature 这个是关键,其他的应该都能看懂,来看下签名算法步骤是 用 ak sk 去拿access_token ,注意这个access_token 是普通的access_token,不是第三方的,这个是大坑 https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET 然后用 access_token 去拿 ticket https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token='.$Access_token.'&type=jsapi 设置参数 $nonceStr=$nonceStr; //随机字符串 $timestamp=time(); $jsapi_ticket=$ticket; //上面拿到的 $url = 'www.baidu.com?code=CODE&state=STATE'; //特别注意上面的$url,如果你是第三方授权的页面,虽然你看到的链接是 www.baidu.com,但是其实不是的,是这个 www.baidu.com?code=CODE&state=STATE ,切记切记 $signature = make_signature($nonceStr,$timestamp,$jsapi_ticket,$url); function make_signature($nonceStr,$timestamp,$jsapi_ticket,$url) { $tmpArr = array( 'noncestr' => $nonceStr, 'timestamp' => $timestamp, 'jsapi_ticket' => $jsapi_ticket, 'url' => $url ); ksort($tmpArr, SORT_STRING); $string1 = http_build_query( $tmpArr ); $string1 = urldecode( $string1 ); $signature = sha1( $string1 ); return $signature; } 这样就取出来了 signature 。 wx.ready(function(){ wx.getLocation({ type: 'gcj02', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02' success: function (res) { var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90 var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。 var speed = res.speed; // 速度,以米/每秒计 var accuracy = res.accuracy; // 位置精度 } }); // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。 }); gcj02这个坐标用火星坐标,然后用腾讯地图的接口去调用,我用过百度地图的,位置差的十万八千里

    最新回复(0)