因为一些临时项目,需要开通一下企业微信的会话存档,并拉取到本地,进行一些汇总分析,只做短期使用。
在github上找到一个开源库
https://github.com/5venw0ng/QyChat
https://github.com/5venw0ng/QyChat-iview
于是fork了代码,进行开发,但是在开发过程中,遇到了一些坑,现在记录下来
错误1:weijava.security.InvalidKeyException: IOException : algid parse error, not a sequence
这个错误是由于PKCS的版本问题造成的,由于在生成秘钥对的时候,使用的是PKCS#1生成的,在本地私钥解密的时候也是如此,但不知为何,报错了,但是,将它转换成PKCS#8格式即可
在下面的网站即可转换 PKCS#1 to PKCS#8 同样在生成秘钥对的时候,也是用这个网站的
错误2:java.lang.UnsatisfiedLinkError: no WeWorkFinanceSdk_Java in java.library.path
这个坑踩的最久,是在调用so库文件的时候出现的,在windows中,会从PATH环境变量的目录中去找 .dll文件,linux则是在 LD_LIBRARY_PATH 环境变量的目录下去找 .so 文件,而我的环境是MacOS,并且是根据Java版本不同而不同的
-
先说Java 8以前的版本(Java 7)
- Windows:PATH
- Linux:LD_LIBRARY_PATH
- Mac:DYLD_LIBRARY_PATH
-
针对Java 8的版本
- Windows:PATH
- Linux:LD_LIBRARY_PATH
- Mac:JAVA_LIBRARY_PATH
但是我的MacOS无论如何用怎么的环境变量,都是报这样的错,所以我最后的解决办法是在一台linux的主机上,设置一个 LD_LIBRARY_PATH
的环境变量,然后把企业微信提供的 libWeWorkFinanceSdk_Java.so
文件放到对应目录中,别忘记source
一下
另外提一句,网上有个办法是在maven打包的时候,把so文件一起放到jar中,此方法我尝试失败了
最后记得在微信提供的Finance.java
中,加载本地库的方法语句是
System.loadLibrary("WeWorkFinanceSdk_Java");
不要写成
System.loadLibrary("WeWorkFinanceSdk_Java.so");
一些小问题
- 下载的视频文件格式是mp4,音频文件格式是 amr,可以使用 这个库 来转换成mp3
- 如果是群聊,在分组显示的时候记得用roomid来区分,因为不同的人发送消息,tolist是不一样