收藏
回答

【急】前端调用wx.getUserProfile将返回信息传给后端解密有时成功有时失败,怎么解决?

由于wx.getUserInfo接口不能再获取到用户昵称等信息,所以我们改为调用wx.getUserProfile,前端将encryptedData, iv等信息传给后端,后端通过encryptedData, iv以及sessionKey进行解密,结果发现有些是正常的,有些解密异常。

正常结果应该是{"nickName":"冰","gender":1,"language":"zh_CN","city":"深圳","province":"广东","country":"中国","avatarUrl":"https://thirdwx.qlogo.cn/mmopen/vi_32/ffuhpBJWUsB21sEschjUic4Ej7mthjt6T5hibYbOZctlm7UuUTxoYz5xkk3DeI4MS6Tdqsy0u2la0XbTEvseh1rg/132","watermark":{"timestamp":1620379788,"appid":"wxd52402ee62771eaa"}}

异常的结果是一堆乱码,然后我反序列化后就报错com.alibaba.fastjson.JSONException: syntax error, expect {, actual error

有没有人遇到这个问题,求解答

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

3 个回答

  • 清茶涩
    清茶涩
    2021-05-07

    你真是我的亲哥。人家这个api都给你返回明文了你为啥还走解密。如果非要走解密的话每次调用之前记得调一下login

    2021-05-07
    有用 1
    回复 7
    • Scott
      Scott
      2021-05-07
      我去,刚叫我们前端同事看了下wx.getUserProfile确实返回的有用户信息,但是如果直接传到后台安全性是有点低的,所以我们用iv和encryptedData以及login后拿到code,去后端解密,但是解密有时成功有时失败,搞不懂了
      2021-05-07
      回复
    • 江桥月
      江桥月
      2021-05-08
      以前的部分unionid必须要解密才能获取
      2021-05-08
      回复
    • 江桥月
      江桥月
      2021-05-08回复Scott
      小程序的请求都是https的,何来传参安全性低一说?目测是你们逻辑的问题吧,login获取的session_key是有时效性的,在时效性内不必频繁获取,但解密前必须确认session_key还在有效期,才能保证解密成功,我以前也用过这个解密流程,就没有失败过
      2021-05-08
      回复
    • 清茶涩
      清茶涩
      2021-05-08回复Scott
      就一个头像和名字,安全个蛇皮。openId和unionId都是通过code服务端拿到小程序token去微信换的,注意是服务端换的。这个getUserProfile就一个头像和名字,何来安全之说
      2021-05-08
      回复
    • 董
      2021-07-29回复江桥月
      你这个是怎么写的,我这边处理的时候先调用getUserProfile然后在getUserProfile的成功方法连调用login获取code,当我把iv和encryptedData以及login后拿到code发给后台后,请求是成功的,但是没有返回任何数据,大佬帮忙指点一下
      2021-07-29
      回复
    查看更多(2)
  • 啊楠
    啊楠
    2021-12-25

    确保wx.getUserProfile之前调用ux.login就不会出现偶发性的解密失败

    2021-12-25
    有用
    回复
  • 阔以滴鸭
    阔以滴鸭
    2021-10-12

    解决了吗

    2021-10-12
    有用
    回复
登录 后发表内容