您的当前位置:首页正文

微信SDK授权获取定位踩坑--getLocation:invalid signature

2024-11-28 来源:个人技术集锦

微信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

  • 因为我们系统中,小程序账号有绑定小程序的appid和secret,所以后端的同学在生成access_token的时候使用小程序的appid和secret。

  • ‼️要注意使用公众号的appid的secret

  • 时间戳要让后端同学给number类型

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的参数是否有特殊符号

显示全文