小程序授权手机号两次才成功,后台报错:java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 c

最近做项目中遇到小程序授权手机号问题,第一次点击授权没有任何反应,并且后台报错:java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
然后二次点击再授权就成功了,后台日志发现问题出现在代码:wxService.getUserService().getPhoneNoInfo(session.getSessionKey(), encryptedData, iv);
网上找了好多都没发现问题,最后找到官方
官方网址:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html
其实意思很明显,因为 session_key 不正确而校验签名失败或解密失败。
所以问题就还是在前端传递问题上:
修改方案:
前端将wx.getInfo -> wx.login这个调用顺序换成wx.login->wx.getInfo ,先调用wx.login就让微信那边知道你这个用户又重新登录了,然后再调用wx.getInfo获取的encryptedData, iv这两个值就会对应新的sessionKey;
如此问题得到完美解决!

你可能感兴趣的:(常见问题,java)