Browse Source

企业微信会话存储测试开发

anderx 7 months ago
parent
commit
36d6f81146

+ 1 - 6
.gitignore

@@ -16,9 +16,4 @@
 
 /qodana.yaml
 
-/src/libcrypto-3-x64.dll
-/libcrypto-3-x64.dll
-/src/libcurl-x64.dll
-/libcurl-x64.dll
-/src/WeWorkFinanceSdk.dll
-/WeWorkFinanceSdk.dll
+/src/main/resources/lib/

+ 4 - 1
src/main/java/com/goafanti/admin/service/impl/NewAdminServiceImpl.java

@@ -81,7 +81,10 @@ public class NewAdminServiceImpl extends BaseMybatisDao<AdminMapper> implements
 		for (AdminPublicReviewerBo e : collect) {
 			sb.append(e.getReviewerName()).append(",");
 		}
-		i.setSuperior(sb.substring(0,sb.length()-1));
+		if  (sb.length() > 0) {
+			i.setSuperior(sb.substring(0,sb.length()-1));
+		}
+
 	}
 
 	@Override

+ 0 - 39
src/main/java/com/goafanti/common/utils/weChat/RSAEncrypt.java

@@ -1,39 +0,0 @@
-package com.goafanti.common.utils.weChat;
-
-import org.apache.commons.codec.binary.Base64;
-import org.bouncycastle.openssl.PEMKeyPair;
-import org.bouncycastle.openssl.PEMParser;
-import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;
-
-import javax.crypto.Cipher;
-import java.io.Reader;
-import java.io.StringReader;
-import java.security.Key;
-import java.security.PrivateKey;
-import java.security.Security;
-
-public class RSAEncrypt {
-
-    public static String decryptRSA(String str, String privateKey) throws Exception {
-        Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
-        Cipher rsa = Cipher.getInstance("RSA/ECB/PKCS1Padding", "BC");
-        rsa.init(Cipher.DECRYPT_MODE, getPrivateKey(privateKey));
-        byte[] utf8 = rsa.doFinal(Base64.decodeBase64(str));
-        String result = new String(utf8,"UTF-8");
-        return result;
-    }
-
-    public static Key getPrivateKey (String privateKey) throws Exception {
-        Reader privateKeyReader = new StringReader(privateKey);
-        PEMParser privatePemParser = new PEMParser(privateKeyReader);
-        Object privateObject = privatePemParser.readObject();
-        if (privateObject instanceof PEMKeyPair) {
-            PEMKeyPair pemKeyPair = (PEMKeyPair) privateObject;
-            JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC");
-            PrivateKey privKey = converter.getPrivateKey(pemKeyPair.getPrivateKeyInfo());
-            return privKey;
-        }
-        return null;
-    }
-
-}

+ 0 - 29
src/main/java/com/goafanti/weChat/controller/ConversationContentController.java

@@ -1,29 +0,0 @@
-package com.goafanti.weChat.controller;
-
-import com.goafanti.common.controller.CertifyApiController;
-import com.goafanti.weChat.service.ConversationContentService;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.Resource;
-
-@RestController
-@RequestMapping(value = "/api/admin/release")
-public class ConversationContentController extends CertifyApiController {
-
-    @Resource
-    private ConversationContentService conversationContentService;
-
-    /**
-     * 获取会话内容
-     * @return
-     */
-    @GetMapping(value = "/getChatData")
-    public String getChatData()
-    {
-    	return conversationContentService.getChatData();
-    }
-
-
-}

+ 0 - 5
src/main/java/com/goafanti/weChat/service/ConversationContentService.java

@@ -1,5 +0,0 @@
-package com.goafanti.weChat.service;
-
-public interface ConversationContentService {
-    String getChatData();
-}

+ 0 - 70
src/main/java/com/goafanti/weChat/service/impl/ConversationContentServiceImpl.java

@@ -1,70 +0,0 @@
-package com.goafanti.weChat.service.impl;
-
-import com.goafanti.common.utils.weChat.RSAEncrypt;
-import com.goafanti.weChat.service.ConversationContentService;
-import com.tencent.wework.Finance;
-import org.json.JSONArray;
-import org.json.JSONObject;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
-
-@Service("ConversationContentService")
-public class ConversationContentServiceImpl implements ConversationContentService {
-
-    @Value(value = "${conversationContent.corpid}")
-    private String corpid;
-    @Value(value = "${conversationContent.secret}")
-    private String secret;
-
-    static String priKey ="-----BEGIN PUBLIC KEY-----\n" +
-            "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp4eTf5Isnjcf8nQyntxT\n" +
-            "vB1o/LbkEFApAnPKJdUqpnLPXsu0ttfPVA22Tj3mNsYojA+gHRVVCuWND4G1/12R\n" +
-            "VYs4cF7HhPtSFdZNMNwvvuWOGZZe52aCdOQDTG4/nZWpgJTWDrrZnNJWXwhlzOaH\n" +
-            "rvlNFw1hNfrmO00QBldznAOxga2l4qLYZ3G5DX9GcHwRBlcizR3DTg4MMxAnNCib\n" +
-            "hBdlflALddR5aE+tGrUpnYpLcGyeijietkzP3lPhf+Xd1CS3cNF2/JBBZz2Cv9Zg\n" +
-            "/DxihQOhdMEmozS3Ooj4OZoIjkuY9NjdvpxDfJu7yHS+x3dMq4oH+ZBHZcfTwuzm\n" +
-            "KQIDAQAB\n" +
-            "-----END PUBLIC KEY-----";
-    @Override
-    public String getChatData() {
-        String message = null;
-        long sdk = Finance.NewSdk();
-        System.out.println(Finance.Init(sdk, corpid, secret));
-        long ret = 0;
-        int seq = 0;
-        int limit = 20;
-        long slice = Finance.NewSlice();
-        ret = Finance.GetChatData(sdk, seq, limit, null, null, 3, slice);
-        if (ret != 0) {
-            System.out.println("getchatdata ret " + ret);
-
-        }
-        String getchatdata = Finance.GetContentFromSlice(slice);
-        JSONObject jo = new JSONObject(getchatdata);
-        JSONArray chatdata = jo.getJSONArray("chatdata");
-        System.out.println("消息数:" + chatdata.length());
-        for (int i = 0; i < chatdata.length(); i++) {
-            String item = chatdata.get(i).toString();
-            JSONObject data = new JSONObject(item);
-            String encrypt_random_key = data.getString("encrypt_random_key");
-            String encrypt_chat_msg = data.getString("encrypt_chat_msg");
-            long msg = Finance.NewSlice();
-            try {
-                 message = RSAEncrypt.decryptRSA(encrypt_random_key, priKey);
-                ret = Finance.DecryptData(sdk, message, encrypt_chat_msg, msg);
-                if (ret != 0) {
-                    System.out.println("getchatdata ret " + ret);
-//                    return;
-                }
-                System.out.println("decrypt ret:" + ret + " msg:" + Finance.GetContentFromSlice(msg));
-                Finance.FreeSlice(msg);
-                System.out.println(message);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-
-        }
-        Finance.FreeSlice(slice);
-    return message;
-    }
-}

+ 0 - 185
src/main/java/com/tencent/wework/Finance.java

@@ -1,185 +0,0 @@
-package com.tencent.wework;
-
-/* sdk返回数据
-typedef struct Slice_t {
-    char* buf;
-    int len;
-} Slice_t;
-
-typedef struct MediaData {
-    char* outindexbuf;
-    int out_len;
-    char* data;
-    int data_len;
-    int is_finish;
-} MediaData_t;
-*/
-
-import org.apache.commons.io.IOUtils;
-import org.springframework.core.io.ClassPathResource;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-
-
-public class Finance {
-    public native static long NewSdk();
-
-    /**
-     * 初始化函数
-     * Return值=0表示该API调用成功
-     *
-     * @param   sdk			NewSdk返回的sdk指针
-     * @param   corpid      调用企业的企业id,例如:wwd08c8exxxx5ab44d,可以在企业微信管理端--我的企业--企业信息查看
-     * @param   secret		聊天内容存档的Secret,可以在企业微信管理端--管理工具--聊天内容存档查看
-     *
-     *
-     * @return 返回是否初始化成功
-     *      0   - 成功
-     *      !=0 - 失败
-     */
-    public native static int Init(long sdk, String corpid, String secret);
-
-    /**
-     * 拉取聊天记录函数
-     * Return值=0表示该API调用成功
-     *
-     *
-     * @param   sdk				NewSdk返回的sdk指针
-     * @param   seq				从指定的seq开始拉取消息,注意的是返回的消息从seq+1开始返回,seq为之前接口返回的最大seq值。首次使用请使用seq:0
-     * @param   limit			一次拉取的消息条数,最大值1000条,超过1000条会返回错误
-     * @param   proxy			使用代理的请求,需要传入代理的链接。如:socks5://10.0.0.1:8081 或者 http://10.0.0.1:8081
-     * @param   passwd			代理账号密码,需要传入代理的账号密码。如 user_name:passwd_123
-     * @param  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   sdk				NewSdk返回的sdk指针
-     * @param   sdkFileid		从GetChatData返回的聊天消息中,媒体消息包括的sdkfileid
-     * @param   proxy			使用代理的请求,需要传入代理的链接。如:socks5://10.0.0.1:8081 或者 http://10.0.0.1:8081
-     * @param   passwd			代理账号密码,需要传入代理的账号密码。如 user_name:passwd_123
-     * @param   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);
-
-    /**
-     * @brief 解析密文
-     * @param   encrypt_key, getchatdata返回的encrypt_key
-     * @param   encrypt_msg, getchatdata返回的content
-     * @param [out] msg, 解密的消息明文
-     * @return 返回是否调用成功
-     *      0   - 成功
-     *      !=0 - 失败
-     */
-    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();
-    /**
-     * @brief 释放slice,和NewSlice成对使用
-     * @return
-     */
-    public native static void FreeSlice(long slice);
-
-    /**
-     * @brief 获取slice内容
-     * @return 内容
-     */
-    public native static String GetContentFromSlice(long slice);
-
-    /**
-     * @brief 获取slice内容长度
-     * @return 内容
-     */
-    public native static int GetSliceLen(long slice);
-    public native static long NewMediaData();
-    public native static void FreeMediaData(long mediaData);
-
-    /**
-     * @brief 获取mediadata outindex
-     * @return outindex
-     */
-    public native static String GetOutIndexBuf(long mediaData);
-    /**
-     * @brief 获取mediadata data数据
-     * @return data
-     */
-    public native static byte[] GetData(long mediaData);
-    public native static int GetIndexLen(long mediaData);
-    public native static int GetDataLen(long mediaData);
-
-    /**
-     * @brief 判断mediadata是否结束
-     * @return 1完成、0未完成
-     */
-    public native static int IsMediaDataFinish(long mediaData);
-
-    static {
-        String osname = System.getProperties().getProperty("os.name");
-        if (osname.contains("Windows")) {
-            System.out.println("系统为Windows");
-            //windows下运行需要给资源文件夹下四个注册表存放在下面打印的目录任何一个地方即可,linux直接打包丢上去运行即可
-            System.out.println(System.getProperty("java.library.path"));
-            System.loadLibrary("WeWorkFinanceSdk");
-        } else if (osname.contains("Linux")) {
-            System.out.println("系统为Linux");
-//            loadLib(" /usr/local/tomcat-kede/webapps/test/WEB-INF/classes/jniLibs/libWeWorkFinanceSdk_Java.so");
-            System.loadLibrary("WeWorkFinanceSdk");
-        } else {
-            System.out.println(String.format("不兼容的系统:{%s}, osname"));
-        }
-    }
-
-    public static void loadLib(String libName) {
-        String folderName = System.getProperty("user.dir") + File.separator;
-        File libFile = new File(folderName, libName);
-        System.out.println("libFile:" + libFile.getAbsolutePath());
-        //文件存在 则直接加载
-        if (libFile.exists()) {
-            System.out.println("加载so库");
-            System.load(libFile.getAbsolutePath());
-        } else {
-            System.out.println("so库不存在");
-            try {
-                InputStream inputStream = new ClassPathResource(libName).getInputStream();
-                System.out.println("读取so文件 写入到系统目标路径中");
-                File parentFile = libFile.getParentFile();
-                if (null != parentFile && !parentFile.exists()) {
-                    parentFile.mkdirs();
-                }
-                libFile.createNewFile();
-
-                FileOutputStream fos = new FileOutputStream(libFile.getAbsolutePath());
-                IOUtils.copy(inputStream, fos);
-                //关闭流
-                inputStream.close();
-                fos.close();
-                System.out.println("so文件写入成功!  尝试重新加载");
-                System.load(libFile.getAbsolutePath());
-                System.out.println("so文件重新加载成功!");
-            } catch (Exception e) {
-                e.printStackTrace();
-//                Sentry.captureException(e);
-                throw new RuntimeException("Failed to load required lib", e);
-            }
-        }
-    }
-
-
-}

BIN
src/main/resources/jniLibs/libWeWorkFinanceSdk_Java.so