收藏
回答

为何解析手机号有概率失败

框架类型 问题类型 操作时间 AppID
小程序 Bug 2021-03-16 wx6937bf4de5d0c2e6
// 解密用户手机号
             WxMaPhoneNumberInfo  phoneNoInfo = new WxMaPhoneNumberInfo();
            if (StringUtils.isNotBlank(login2.getEncryptedData1()) && StringUtils.isNotBlank(login2.getIv1())){
                phoneNoInfo = wxService.getUserService().getPhoneNoInfo(sessionKey, login2.getEncryptedData1(), login2.getIv1());
            }

为什么我在Java后端使用手机号的加密信息进行解析时会报解析错误?这时sessionkey并没有过期。



回答关注问题邀请回答
收藏

1 个回答

  • peng
    peng
    2021-03-16

    需要研究下sessionkey机制,看在你们的项目中会不会存在这样一种情况:有多个地方使用到了wx.login(这个方法有它自己的机制会刷新sessionkey),那么就存在在授权的时候用的是sessionKeyA生成的加密串,在解密使因为其他地方调用了wx.login 变成了sessionKeyB。这是就会出现机密失败的情况。

    2021-03-16
    有用
    回复 5
    • 口嫌体直
      口嫌体直
      2021-03-16
      你的意思是在调用微信任何一个接口的时候都单独调用wx.login强制刷新sessionkey吗?但是我在请求业务的接口之前调用微信检查sessionkey是否过期接口返回未过期。
      2021-03-16
      回复
    • peng
      peng
      2021-03-16回复口嫌体直
      不是,我的意思是调用wx.login有几率会改变sessionkey的值,而手机授权是的sessionkey与解密时的sessionkey不同导致了现在的问题,你可以保留用户最后一次的sessionkey与当前sessionkey,当前解密失败用最后一次的机密试试
      2021-03-16
      回复
    • 口嫌体直
      口嫌体直
      2021-03-16回复peng
      目前我的流程:wx.login(前端登录) -> login1(后端拿code缓存sessionkey) -> getPhoneNumber(前端获取手机号加密信息) -> checksessionkey(前端校验sessionkey是否过期) -> login2(若没过期后端解析手机号)
      2021-03-16
      回复
    • 口嫌体直
      口嫌体直
      2021-03-16回复peng
      您看下我这个流程哪一个环节会可能出现sessionkey不一致的情况?谢谢!
      2021-03-16
      回复
    • try_hard
      try_hard
      2021-03-24回复口嫌体直
      login2 的时候已经刷新下,需要用login2的sessionkey,重新解析,不然会解析失败
      2021-03-24
      回复
登录 后发表内容
问题标签