评论

企业微信会话SDK使用中遇到问题

企业微信会话SDK使用中遇到问题

接手企业微信接口有一段时间了,最近工作不忙,研究一下java使用会话的sdk。中间有一些疑惑还没有找到答案,望各位大佬指点

准备工作

首先去官网下载sdk,地址如下

https://open.work.weixin.qq.com/api/doc/90000/90135/91774

本人下载了windows的SDK v1.0、SDK v1.1,linux的SDK v1.2

<span style=“color: red;”>
解释下为什么要下载windows2个版本的sdk,因为v1.0的dll文件是以32结尾的,v1.1的dll是以x64结尾的。猜测是区分32、64位操作系统吗?本人pc64位操作系统,2个版本都可以使用,希望知道原理的大佬留言评论,暂且就当作区分操作系统的吧
<span>

调试工作

首先测试windows v1.0版本sdk。导入idea,修改main方法如下(demo写的什么鬼,传一堆参数)

public static void main(String[] args){

    long sdk = Finance.NewSdk();
    System.out.println(Finance.Init(sdk, "wwd08c8e7c775ab44d", "zJ6k0naVVQ--gt9PUSSEvs03zW_nlDVmjLCTOTAfrew"));
    long slice = Finance.NewSlice();
    long ret = Finance.GetChatData(sdk, 0, 10, "", "", 1000L, slice);
    if (ret != 0) {
        System.out.println("getchatdata ret " + ret);
        return;
    }
    System.out.println("getchatdata :" + Finance.GetContentFromSlice(slice));
    Finance.FreeSlice(slice);
    Finance.DestroySdk(sdk);
}

运行,打印出getchatdata :{“errcode”:41001,“errmsg”:“access_token missing, hint: [xxx], from ip: xxx, more info at https://open.work.weixin.qq.com/devtool/query?e=41001","chatdata”:[]},更换corpid、secret,添加白名单,再次运行。完美,收工。

如果只是证明sdk可以运行,则可以关闭本帖了,这大概也是v1.0的本意

打包运行

只简单介绍下idea下怎么打jar包

File->Project Structure->Artifacts->+>JAR->from modules with ...->选择Main Class,其他默认->OK

Build->Build Artifacts...->Build

java -jar WeWorkFinanceSdk.jar,满心期待的报错输出了。解压jar包,发现dll一个没打进去。调整目录结构,把dll文件打包进去,发现不止jar包运行报错,idea下运行也报错了,还是调整回去吧。

<span style=“color: red;”>
流下了没有技术的眼泪,一行一行debug发现System.loadLibrary会加载当前工作目录下的dll。哪位大佬指点下jdk为什么这样搞?
<span>

对于一个web程序猿,还是去搞spring上使用吧,不用spring的也可以参考下
对于64位操作系统,就不在多写了,需要注意就是升级"x64: vc_redist.x64.exe"。参考https://developers.weixin.qq.com/community/develop/doc/000a82a895c3e8170b9bc22b456800?highLine=windows%252064%2520%25E4%25BC%259A%25E8%25AF%259D
对于linux,找猫画虎写了个demo,没有debug

spring上运行

JNA运行

jna简化了jni的复杂性,按照如下语句初始化即可

Finance INSTANCE = Native.load("WeWorkFinanceSdk", Finance.class);

windows idea 上运行成功,java -jar 运行不出所料报错了。linux上 java -jar 运行成功

<span style=“color: red;”>
猜测windows上找不到依赖的dll,如不对请大佬评论改正
<span>

JNI运行

根据jna源码原理CV一套JNI调用代码,其中有几个坑不是很理解。望大佬指教

<span style=“color: red;”>
1、依赖的dll文件使用File.createTempFile生产临时文件,只是文件名称改变就不能用。啥原理?
2、String resourceLibraryName = Platform.RESOURCE_PREFIX + File.separator + System.mapLibraryName(libraryName);Thread.currentThread().getContextClassLoader().getResourceAsStream(resourceLibraryName); java -jar 时加载不到资源,File.separator改成"/"就可以了。按说不都可以吗?
3、windows上file.deleteOnExit()在运行结束后不删除文件,是什么导致的?
<span>

附录

远程调试命令

java -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=y -jar wework-finance-sdk-0.0.1-SNAPSHOT.jar

源码地址

https://gitee.com/dgguo/we-chat-sdk.git
最后一次编辑于  2021-06-02  
点赞 0
收藏
评论
登录 后发表内容