微信SDK授权获取定位踩坑
最近要在小程序webview中获取定位信息,于是采用sdk的方式,在授权道路上彩果无数坑
一、踩到的坑
- 1.wx.config 报错 invalid signature
- 2.wx.config 报错 invalid url domain
- 3.wx.getLocation ios正常调用返回,安卓报错 getLocation:invalid signature
二、解决方法
1.wx.config 报错 invalid signature
2.wx.config 报错 invalid url domain
- 因为页面所在域名与使用的appid没有绑定,,需要在公众号后台配置一下
- 配置方式
设置开发 -> 公众号设置 -> 功能设置 -> js接口安全域名
3.wx.getLocation ios正常调用返回,安卓报错 getLocation:invalid signature
这是个大坑,拖了我三天,而且ios成功还在迷惑我
第一个问题
参考开发者文档,url要做 encodeURIComponent 处理后传给后端,,这里要注意 微信浏览器没有做url解析,encodeURIComponent之后后,与当前浏览器url不一直会导致 wx.config 的时候授权失败。
因为我跟后端同学商定使用post的请求,所以不考虑参数问题,,使用get请求的同学要注意 encodeURIComponent 的处理,同样后端要解析出来
第二个问题
我发现这个需要放到服务器上才能调试,,本地其服务授权会报错,因为url域名问题,,毕竟公众号的域名配置只允许5个。
所以改点东西就得发版,很是痛苦,浪费了很多时间
第三个问题
划重点,这是最严重的一个问题,没办法下手,只有getLocation有问题,其他api也都能使用
- 问题
- 因为我是ios环境开发,本以为提前完成了,使用同时的安卓机体验了一把,直接报错,getLocation鉴权失败
- 经过排查发现我的参数中带了token,很长的一段,而且结尾有个 ’=‘,因为’='这个符号导致后端生成的签名有问题。进而导致getLocation报错,
- 但是ios,和安卓wx.config能正常使用,我找了很久也没找到是什么原因。
- 我也试过chooseimage等其他api,同样是没有问题,可以正常使用,唯独getLocation不行。
- 解决方法
- 在小程序页面跳转webview的时候单独给 token 做 encodeURIComponent,这样就可以保证微信浏览器url和后端生成签名的内容一致,并且保证没有特殊符号。
- 到此ios和安卓全部跑通了
遇到类似问题先检查一下当前页面url的参数是否有特殊符号