微信小程序获取用户绑定的手机号信息解密出现pad block corrupted,前端打开授权页面时先调用login(),将jscode存在本地,当点击授权时,先检查jscode是否过期,如果过期了,就调用login获取最新的;未过期则将本地存储的jscode拿出来,传递给后端,请求后在complete中调用login()刷新本地jscode。
传参时,需要调用encodeURIComponent方法对encryptedData和iv进行编码。如果不对参数进行编码,参数中的特殊字符到后端时会变成空格,而且多个特殊字符连在一起时,只会转成一个空格,会出现IV not 16 bytes long 或者 last block incomplete in decryption 的错误。后端参数接收有些接口会自动将参数解码,有些不会,没搞懂为啥,用encryptedData.contains("%")来判断是否要解码。解码用的工具类是hutool的URLDecoder,java.net下的URLDecoder好像解不出来。