ios版微信jssdk中的wx.getLocation出现invalid signature

问题描述:
项目里需要点击按钮来获取当前地理位置的功能,在微信公众号平台的场合准备利用微信提供的jssdk来去获取当前经纬度。但是现在出现一个可怕的问题是android下的微信端可以正常利用wx.getLocation来取得当前经纬度,但是ios版微信端总是报出invalid signature的错误出来。

使用环境:
(1)小米5 android版本:6.0.1 MXB48T
微信 6.5.4
wx.getLocation可以正常使用
(2)iphone5 ios8.1.3
iphone7 ios10
微信 6.5.4
wx.getLocation调用后出现'invalid signature'

具体调用情况:
上代码(react js)
(1)在父组件挂载完成后,进行getLocation的注册
wxUtil.wxConfig(['hideOptionMenu', 'getLocation'], () => {

wx.hideOptionMenu();

});
wxUtil.wxConfig是包装过的调用wx.config方法
(2)子组件中绑定onClick事件在事件触发时调用wx.getLocation
getLocationAddress() {

    if (isWx()) {
        console.log('---------------微信端--------------');
        var that = this;
        wx.getLocation({
            success: function (res) {
                var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90
                var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。
                var speed = res.speed; // 速度,以米/每秒计
                var accuracy = res.accuracy; // 位置精度
                console.log('微信端获取地理位置');
                console.log('longitude:' + longitude);
                console.log('latitude:' + latitude);
                that.getAdministrativeAreaInfo(longitude, latitude);
            },
            fail: function(res) {
                console.log('未开启定位功能');
                console.log(res);
            },
            cancel: function (res) {
                console.log('用户拒绝授权获取地理位置');
            }
        });
    } else {
        console.log('---------------M端--------------');
        this.getLocationForMobile();
    }
},

(3)在android端表现良好,可以通过wx.getLocation获取经纬度,ios端wx.getLocation报出'invalid signature'的错误。
(4)为了验证是否是签名错误,我又删除wx.getLocation这个jssdk api,改用wx.getNetworkType。android端和ios端都可以正常利用该api获取当前网络类型。
ps:(1)中wx.hideOptionMenu的api也没有爆出invalid signature的错误。
(5)为了验证不是因为绑定的访问域的问题(ios10后对于地理定位必须要使用https的请求协议),又用ios版微信访问了微信提供的jssdk api demo。因为微信提供的访问协议是http的,url:http://203.195.235.76/jssdk/
结果可以取得当前的地理位置。

通过以上的实际校验,我彻底懵了,如果是注册有问题签名有问题,为什么只有wx.getLocation报错,而wx.hideOptionMenu和wx.getNetworkType不报错呢?而且如果是签名的问题的话,android版也应该出现相同的问题(我觉得)。
如果是访问协议的问题,那么微信提供的demo也应该出错。但是现在都对不上。所以可能是代码写的和demo写的调用不一致,导致的。

继续验证:
(1)发现demo中wx.getLocation是在wx.ready中的,仔细查看文档,我觉得我的调用方式也没有问题,因为我不是初期化的时候去使用。
(2)但是为了验证,改!

父组件

wxUtil.wxConfig(['hideOptionMenu', 'getLocation'], () => {

    wx.ready({
        wx.hideOptionMenu();
        wx.getLocation({
            // todo 
        });
    })
});
子组件中不再调用wx.getLocation而是通过父组件取得的经纬度的值去处理下面的流程

(3)结果还是报错invalid signature,还是ios端。

到此我就无法继续了,因为确实不知道哪个地方错误。有人提出可能是url不完整造成的签名错误(https://segmentfault.com/q/10...。但是我写死了url,最后也是ios端报错。所以在此向各位大神求助。帮我看看到底是什么导致的问题。在此谢过,谢谢各位了!!!!!!!!

阅读 9.6k
2 个回答

今天遇到了同样的问题,还屁颠屁颠的去折腾ssl,看到你说官方demo没问题,顿时看到了希望啊。

楼主解决了吗?我现在也遇到同样的问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏