官方代码
概述 | 微信开放文档 微信
登录 - 企业微信开发者中心 企业微信
异常
java.lang.IllegalArgumentException: Last encoded character (before the paddings if any) is a valid base 64 alphabet but not a possible value
原因
commons-codec 在 1.13 版本引入了 validateCharacter 方法,来验证在上下文中是否可以解码最后的尾随字符,微信生成的 EncodingAESKey 无法通过校验
解决方法
方法一
使用guava代替官方commons-codec
1.1 引入guava
1.2 使用 BaseEncoding.base64().decode(sEncodingAESKey + "=" ) 代替 Base64.decodeBase64(sEncodingAESKey + "=");
方法二
- 将commons-codec包升级到官方代码示例中的1.9版本
方法三
使用 commons-codec 加密 32 位字符(我是用的 UUID 生成 ID 后去除 -)
生成一个 EncodingAESKey 替换微信生成的 EncodingAESKey
Base64.encodeBase64String(UUID.randomUUID().toString().replaceAll("-","").getBytes());
第二步得到一个 44 位字符串,需要去除末尾等号得到 43 位EncodingAESKey,再去企业微信配置此EncodingAESKey