评论

spring boot集成企业微信会话内容存档sdk

spring boot集成企业微信会话内容存档sdk

将企业微信提供的linux和windows的sdk文件解压,将里面的dll、so、java文件放到src/main/java目录下,如下图所示

参考https://zhuanlan.zhihu.com/p/37686736x修改pom文件将dll和so文件打包进jar

然后更改Finance的static代码块:

static {
       if (isWindows()) {
           String path = Finance.class.getResource("").getPath().replaceAll("%20", " ").replaceFirst("/", "").replace("/", "\\\\");
           //加载顺序不要变
           System.load(path.concat("libeay32.dll"));
           System.load(path.concat("libprotobuf.dll"));
           System.load(path.concat("ssleay32.dll"));
           System.load(path.concat("libcurl.dll"));
           System.load(path.concat("WeWorkFinanceSdk.dll"));
   } else {
           String path = Finance.class.getResource("").getPath();
           System.load(path.concat("libWeWorkFinanceSdk_Java.so"));
   }
   }

   public static boolean isWindows() {
       String osName = System.getProperties().getProperty("os.name");
       System.out.println("current system is " + osName);
   return osName.toUpperCase().indexOf("WINDOWS") != -1;
}
最后一次编辑于  2020-04-09  
点赞 5
收藏
评论

12 个评论

  • 无痕
    无痕
    2020-06-30

    https://github.com/yang2wuhen/work_wx springboot集成企业微信包括会话存档,有问题可以联系 15901154143

    2020-06-30
    赞同 4
    回复
  • 虎子
    虎子
    2020-09-17

    一直报这两个错,我自己摸索了2天,看到这个帖子,然后总算是弄好了。还是这个帖子给我启发,在此谢谢!

    自己踩过的坑,以免大家再踩,所以我总结一下。

    第一个错,是因为修改了Finance.java所在包的位置,Finance.java必须要在com.tencent.wework 路径下面。

    第二个错,是因为在Finance.java中添加了自己的方法。

    2020-09-17
    赞同 1
    回复
  • 发呆的祥
    发呆的祥
    07-06

    1.1 版


    07-06
    赞同
    回复 1
    • 发呆的祥
      发呆的祥
      07-06
      测试结果
      07-06
      回复
  • ZH_XUE
    ZH_XUE
    04-18

    请问win下使用多模块加载,dll在子模块的jar包下,加载时报 UnsatisfiedLinkError,要求使用绝对路径怎么解决?怀疑是路径里的 **\\**.jar!\\**解析不了

    04-18
    赞同
    回复 1
    • ZH_XUE
      ZH_XUE
      04-18
      本身已经是绝对路径了
      04-18
      回复
  • 刹那即逝
    刹那即逝
    02-01

    https://blog.csdn.net/weixin_43303530/article/details/113502475

    02-01
    赞同
    回复
  • Huang
    Huang
    2020-12-15

    linux环境下使用springboot项目jar包运行时,如果打包运行so文件一直报错,可以直接把so文件存放到外部某个文件夹下面,亲测可用

    String path = "你存放so文件夹的位置,不要压缩!!!";
    System.load(path + "/libWeWorkFinanceSdk_Java.so");
    


    2020-12-15
    赞同
    回复
  • 南下
    南下
    2020-12-09

     

    把资源放在这个位置之后就开始报错

    no WeWorkFinanceSdk in java.library.path

    2020-12-09
    赞同
    回复 2
    • ljx
      ljx
      2020-12-31
      大佬解决了?
      2020-12-31
      回复
    • 南下
      南下
      01-10回复ljx
      木有呀
      01-10
      回复
  • 南下
    南下
    2020-12-09

    war包打包有啥需要注意的么

    2020-12-09
    赞同
    回复
  • 虎子
    虎子
    2020-09-17

    建议自己封装一个类,在这个类中加载动态库。Windows环境下,所有dll文件放到服务的根目录下面,Linux环境下,libWeWorkFinanceSdk_Java.so文件放到jar包相同的目录就行。

    /**
    *@Description: sdk初始化
    *@Param:
    *@return:
    *@Author: zhanghu
    *@date: 2020/9/17
    */
    public int Init() {
       LoadDll();
       sdk = Finance.NewSdk();
       int ret = Finance.Init(sdk,  "*****", "*****");
       if (ret != 0)
          return ret;
    
       return 0;
    }
    
    /**
     *@Description: 动态加载微信sdk动态库
     *@Param:
     *@return:
     *@Author: zhanghu
     *@date: 2020/9/17
     */
    private void LoadDll() {
       String path = getPath();
       if (isWindows()) {
          //加载顺序不要变
          System.load(path.concat("libeay32.dll"));
          System.load(path.concat("libprotobuf.dll"));
          System.load(path.concat("ssleay32.dll"));
          System.load(path.concat("libcurl.dll"));
          System.load(path.concat("WeWorkFinanceSdk.dll"));
       } else {
          System.load(path + "/libWeWorkFinanceSdk_Java.so");
       }
    }
    
    
    public static boolean isWindows() {
       String osName = System.getProperties().getProperty("os.name");
       System.out.println("current system is " + osName);
       return osName.toUpperCase().indexOf("WINDOWS") != -1;
    }
    
    /**
     *@Description: 获取当前运行目录
     *@Param:
     *@return:
     *@Author: zhanghu
     *@date: 2020/9/17
     */
    public String getPath()
    {
       String path = this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
       if(System.getProperty("os.name").contains("dows"))
       {
          path = path.substring(1,path.length());
       }
       if(path.contains("jar"))
       {
          path = path.substring(0,path.lastIndexOf("."));
          return path.substring(0,path.lastIndexOf("/"));
       }
       return path.replace("target/classes/", "");
    }
    
    
    2020-09-17
    赞同
    回复 1
    • 。
      05-06
      linux下不行啊
      05-06
      回复
  • 那个少年
    那个少年
    2020-09-11

    大佬有没有遇到过在本地调是通的,发布后就报网络问题?

    2020-09-11
    赞同
    回复

正在加载...

登录 后发表内容