微信小游戏遇到的坑

13 篇文章 0 订阅
1 篇文章 0 订阅

1.一直提示code已被使用问题(解密异常)

这几天一直在做微信小程序授权,但是前端调用后一直报错,总是报异常:errcode:40163,errmsg:code bean used;我就很纳闷,我也没用啊,然后前端也是刚获取的code,所以我就猜测是不是我接口的问题,在改了一天半用尽所有问题后还是没发现接口问题,于是百度+谷歌终于找到问题了,原来是前端获取code问题

抛异常原因

前端在调用微信的接口时,先后顺序反了,他们应该是先调用微信服务器的wx.login接口来获取code,然后再调用wx.getUserInfo来获取加密数据和偏移向量iv。而和我对接的前端先调用了getUserInfo获取了解密数据,然后又调用的login,就会刷新登录态,这样获取的code换取的解密秘钥和提前获取的加密数据的加密秘钥就可能不一致的,所以无法成功解密。

2.第一次授权失败问题(大坑)

这个问题十分魔幻,第一次授权失败第二次第三次以后都能成功了,就很魔性,这个问题烦了我一天,简直怀疑人生主要错误异常:IV not 16 bytes long,说的iv不够16字节

然后我开始的思路是填充字节数,此处有小坑啊,不能直接String.getBytes(),这样获取到的字节数同样会有问题的,所有我在解码时还是报错误,Given final block not properly padded:给定最后一块没有适当填充,我就很纳闷了,明明有填充怎么就说我填充不当呢

,所以我就继续排查,我选择打印前端传过来的数据值和字节长度,然后发现传过来的值和字节长度看上去没什么问题,但是,我发现了,“+”号在传过来时会自动转化为空格,这就是操蛋之处,空格在通过base64转化字节数组时,对空格不做处理,我百度得到说通过对象接收没有问题,我就这么干了,结果还是会发生这种情况,但是我就懒得再改回去了就用对象接收了

然后机灵的我相个办法,接收过来的String字符串时,我选择直接把空格替换成“+”号,

先使用URLEncoder.encode(字符串, "utf-8")进行处理,但是但是,“+”号是出来了,“=”号却变成%2D了,简直想死,不过还好,机灵的我又想到一个办法,

直接用字符串的方法处理 ~~~~>  字符串.replace(" ","+");

这样就没问题啦,现在授权成功

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值