评论

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
收藏
评论

13 个评论

  • 无痕
    无痕
    2020-06-30

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

    2020-06-30
    赞同 4
    回复
  • Huang
    Huang
    2020-12-15

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

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


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

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

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

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

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

    2020-09-17
    赞同 1
    回复
  • 裂纹唬克
    裂纹唬克
    2022-04-14

    照这个方式打包后确实报了要求绝对路径的问题,按照6楼的方法可以解决

    2022-04-14
    赞同
    回复
  • 发呆的祥
    发呆的祥
    2021-07-06

    1.1 版


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

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

    2021-04-18
    赞同
    回复 2
    • ZH_XUE
      ZH_XUE
      2021-04-18
      本身已经是绝对路径了
      2021-04-18
      回复
    • 不止是河流
      不止是河流
      2022-03-02回复ZH_XUE
      我也是这个情况,不知道怎么解决
      2022-03-02
      回复
  • 刹那即逝
    刹那即逝
    2021-02-01

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

    2021-02-01
    赞同
    回复
  • 南下
    南下
    2020-12-09

     

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

    no WeWorkFinanceSdk in java.library.path

    2020-12-09
    赞同
    回复 2
    • ljx
      ljx
      2020-12-31
      大佬解决了?
      2020-12-31
      回复
    • 南下
      南下
      2021-01-10回复ljx
      木有呀
      2021-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
    赞同
    回复 2
    • 。
      2021-05-06
      linux下不行啊
      2021-05-06
      回复
    • 氼
      2022-06-29回复
      请问解决了吗
      2022-06-29
      回复

正在加载...

登录 后发表内容