当前位置: 首页 > article >正文

企业微信会话存档引用com.tencent.wework.Finance出错?

报错:

会话存档引用com.tencent.wework.Finance出错,找不到该类,报错如下:java.lang.NoClassDefFoundError: Could not initialize class com.tencent.wework.Finance 这个问题怎么解决?

解决方案:需要下载官方的sdk的包
https://developer.work.weixin.qq.com/document/path/91774
下载:在这里插入图片描述
本文以windows举例子
解压找到 Finance.java这个类放到 com/tencent/wework/Finance.java下面如下图
在这里插入图片描述

解压下的dll文件放到resources下也可以新建一个lib目录

在这里插入图片描述

修改Finance.java文件

在这里插入图片描述
所有代码

package com.tencent.wework;

import com.andleoht.common.core.utils.OsUtils;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class Finance {
    public native static long NewSdk();

    /**
     * 初始化函数
     * Return值=0表示该API调用成功
     *
     * @param /[in] sdk         NewSdk返回的sdk指针
     * @param /[in] corpid      调用企业的企业id,例如:wwd08c8exxxx5ab44d,可以在企业微信管理端--我的企业--企业信息查看
     * @param /[in] secret      聊天内容存档的Secret,可以在企业微信管理端--管理工具--聊天内容存档查看
     * @return 返回是否初始化成功
     * 0   - 成功
     * !=0 - 失败
     */
    public native static int Init(long sdk, String corpid, String secret);

    /**
     * 拉取聊天记录函数
     * Return值=0表示该API调用成功
     *
     * @param /[in]  sdk             NewSdk返回的sdk指针
     * @param /[in]  seq             从指定的seq开始拉取消息,注意的是返回的消息从seq+1开始返回,seq为之前接口返回的最大seq值。首次使用请使用seq:0
     * @param /[in]  limit           一次拉取的消息条数,最大值1000条,超过1000条会返回错误
     * @param /[in]  proxy           使用代理的请求,需要传入代理的链接。如:socks5://10.0.0.1:8081 或者 http://10.0.0.1:8081
     * @param /[in]  passwd          代理账号密码,需要传入代理的账号密码。如 user_name:passwd_123
     * @param /[in]  timeout         超时时间,单位秒
     * @param /[out] chatDatas       返回本次拉取消息的数据,slice结构体.内容包括errcode/errmsg,以及每条消息内容。
     * @return 返回是否调用成功
     * 0   - 成功
     * !=0 - 失败
     */
    public native static int GetChatData(long sdk, long seq, long limit, String proxy, String passwd, long timeout, long chatData);

    /**
     * 拉取媒体消息函数
     * Return值=0表示该API调用成功
     *
     * @param /[in]  sdk             NewSdk返回的sdk指针
     * @param /[in]  sdkFileid       从GetChatData返回的聊天消息中,媒体消息包括的sdkfileid
     * @param /[in]  proxy           使用代理的请求,需要传入代理的链接。如:socks5://10.0.0.1:8081 或者 http://10.0.0.1:8081
     * @param /[in]  passwd          代理账号密码,需要传入代理的账号密码。如 user_name:passwd_123
     * @param /[in]  timeout         超时时间,单位秒
     * @param /[in]  indexbuf        媒体消息分片拉取,需要填入每次拉取的索引信息。首次不需要填写,默认拉取512k,后续每次调用只需要将上次调用返回的outindexbuf填入即可。
     * @param /[out] media_data      返回本次拉取的媒体数据.MediaData结构体.内容包括data(数据内容)/outindexbuf(下次索引)/is_finish(拉取完成标记)
     * @return 返回是否调用成功
     * 0   - 成功
     * !=0 - 失败
     */
    public native static int GetMediaData(long sdk, String indexbuf, String sdkField, String proxy, String passwd, long timeout, long mediaData);

    /**
     * @param /[in]  encrypt_key, getchatdata返回的encrypt_key
     * @param /[in]  encrypt_msg, getchatdata返回的content
     * @param /[out] msg, 解密的消息明文
     * @return 返回是否调用成功
     * 0   - 成功
     * !=0 - 失败
     * @brief 解析密文
     */
    public native static int DecryptData(long sdk, String encrypt_key, String encrypt_msg, long msg);

    public native static void DestroySdk(long sdk);

    public native static long NewSlice();

    /**
     * @return
     * @brief 释放slice,和NewSlice成对使用
     */
    public native static void FreeSlice(long slice);

    /**
     * @return 内容
     * @brief 获取slice内容
     */
    public native static String GetContentFromSlice(long slice);

    /**
     * @return 内容
     * @brief 获取slice内容长度
     */
    public native static int GetSliceLen(long slice);

    public native static long NewMediaData();

    public native static void FreeMediaData(long mediaData);

    /**
     * @return outindex
     * @brief 获取mediadata outindex
     */
    public native static String GetOutIndexBuf(long mediaData);

    /**
     * @return data
     * @brief 获取mediadata data数据
     */
    public native static byte[] GetData(long mediaData);

    public native static int GetIndexLen(long mediaData);

    public native static int GetDataLen(long mediaData);

    /**
     * @return 1完成、0未完成
     * @brief 判断mediadata是否结束
     */
    public native static int IsMediaDataFinish(long mediaData);

    static {
        log.info("java.library.path============={}", System.getProperty("java.library.path"));
        if (OsUtils.isWindows()) {
            String path = Finance.class.getClassLoader().getResource("").getPath();
            System.load(path.concat("lib/libcrypto-1_1-x64.dll"));
            System.load(path.concat("lib/libcurl-x64.dll"));
            System.load(path.concat("lib/libssl-1_1-x64.dll"));
            System.load(path.concat("lib/WeWorkFinanceSdk.dll"));
        } else {
            log.info("Linux library path ======linux======={} {}", System.getProperty("java.library.path"));
            System.loadLibrary("WeWorkFinanceSdk");
        }
    }

}

这样就可以解决加载不到文件的问题了,记得重新builder


http://www.kler.cn/a/383354.html

相关文章:

  • 银行信贷风控专题:Python、R 语言机器学习数据挖掘应用实例合集:xgboost、决策树、随机森林、贝叶斯等
  • A012-基于Spring Boot的私房菜定制上门服务系统的设计与实现
  • Python 学习完基础语法知识后,如何进一步提高?
  • 京准时钟:无人机卫星信号安全防护隔离装置
  • 论文阅读笔记-Covariate Shift: A Review and Analysis on Classifiers
  • 【docker】6. 镜像仓库/镜像概念
  • 新书速览|Java网络爬虫精解与实践
  • linux firewall 常用命令汇总
  • Android studio中关于printf和print和println的区别
  • 动态规划 之 路径问题 算法专题
  • 【TS】九天学会TS语法——1.TypeScript 是什么
  • sls日志服务采集json格式日志
  • HE-Drive:Human-Like End-to-End Driving with Vision Language Models
  • [蓝桥杯算法从小白到大牛]动态规划第二讲:三步问题
  • RK3568 Android12跳过认证 预置谷歌服务GMS
  • 【系统架构设计师】高分论文:论高并发下的高可用性技术
  • 未来已来:AI编程——重塑软件开发的新纪元
  • (十四)JavaWeb后端开发——MyBatis
  • 怎么查看navicat的数据库密码
  • 国家宠物美容师职业技能等级评价(高级)理论考试题
  • ac8257 android 9 lk upgrade升级后分区表错误问题
  • ​Java面试经典 150 题.P13. 罗马数字转整数(012)​
  • 为什么要学习 Java 编程
  • 人工智能技术:未来生活的“魔法师”
  • NewStar CTF 2024 misc WP
  • 基于SSD模型的路面坑洼检测系统,支持图像、视频和摄像实时检测【pytorch框架、python源码】