🎨 #3178【企业微信】修复会话存档反序列化接口中uint64相关字段定义,使用BigInteger类型

This commit is contained in:
0katekate0 2023-12-07 16:20:26 +08:00 committed by GitHub
parent 1fe8fe4caa
commit 69df6f1bcf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 71 additions and 18 deletions

View File

@ -196,12 +196,11 @@ public class WxCpMsgAuditServiceImpl implements WxCpMsgAuditService {
@Override
public void getMediaFile(@NonNull long sdk, @NonNull String sdkfileid, String proxy, String passwd, @NonNull long timeout, @NonNull Consumer<byte[]> action) throws WxErrorException {
/**
* 1媒体文件每次拉取的最大size为512k因此超过512k的文件需要分片拉取
* 2若该文件未拉取完整sdk的IsMediaDataFinish接口会返回0同时通过GetOutIndexBuf接口返回下次拉取需要传入GetMediaData的indexbuf
* 3indexbuf一般格式如右侧所示Range:bytes=524288-1048575:表示这次拉取的是从524288到1048575的分片单个文件首次拉取填写的indexbuf
* 为空字符串拉取后续分片时直接填入上次返回的indexbuf即可
*/
/**
* 1媒体文件每次拉取的最大size为512k因此超过512k的文件需要分片拉取
* 2若该文件未拉取完整sdk的IsMediaDataFinish接口会返回0同时通过GetOutIndexBuf接口返回下次拉取需要传入GetMediaData的indexbuf
* 3indexbuf一般格式如右侧所示Range:bytes=524288-1048575:表示这次拉取的是从524288到1048575的分片单个文件首次拉取填写的indexbuf为空字符串拉取后续分片时直接填入上次返回的indexbuf即可
*/
String indexbuf = "";
int ret, data_len = 0;
log.debug("正在分片拉取媒体文件 sdkFileId为{}", sdkfileid);
@ -215,8 +214,7 @@ public class WxCpMsgAuditServiceImpl implements WxCpMsgAuditService {
}
data_len += Finance.GetDataLen(mediaData);
log.info("正在分片拉取媒体文件 len:{}, data_len:{}, is_finis:{} \n", Finance.GetIndexLen(mediaData), data_len,
Finance.IsMediaDataFinish(mediaData));
log.debug("正在分片拉取媒体文件 len:{}, data_len:{}, is_finish:{} \n", Finance.GetIndexLen(mediaData), data_len, Finance.IsMediaDataFinish(mediaData));
try {
// 大于512k的文件会分片拉取此处需要使用追加写避免后面的分片覆盖之前的数据

View File

@ -25,7 +25,7 @@ public class WxCpChatDatas implements Serializable {
private String errMsg;
@SerializedName("sdk")
private long sdk;
private Long sdk;
@SerializedName("chatdata")
private List<WxCpChatData> chatData;

View File

@ -7,6 +7,7 @@ import lombok.Setter;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
import java.io.Serializable;
import java.math.BigInteger;
import java.util.List;
/**
@ -844,8 +845,11 @@ public class WxCpChatModel implements Serializable {
public static class Details implements Serializable {
private static final long serialVersionUID = -5028321625140879571L;
/**
* 表项id Uint64类型
*/
@SerializedName("id")
private Long id;
private BigInteger id;
@SerializedName("ques")
private String ques;
@ -943,8 +947,11 @@ public class WxCpChatModel implements Serializable {
@SerializedName("meetingtype")
private Integer meetingType;
/**
* 会议id Uint64类型
*/
@SerializedName("meetingid")
private Long meetingId;
private BigInteger meetingId;
@SerializedName("status")
private Integer status;

View File

@ -5,6 +5,7 @@ import lombok.Data;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
import java.io.Serializable;
import java.math.BigInteger;
/**
* 会话存档 文档信息对象
@ -25,8 +26,11 @@ public class WxCpFileItem implements Serializable {
@SerializedName("sdkfileid")
private String sdkFileId;
/**
* 共享文件的大小 Uint64类型
*/
@SerializedName("filesize")
private Long fileSize;
private BigInteger fileSize;
/**
* From json wx cp file item.

View File

@ -14,9 +14,11 @@ import java.security.PrivateKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.RSAPrivateCrtKeySpec;
import java.util.Base64;
import java.util.Objects;
/**
* The type Wx cp crypt util.
*
* @author qian
*/
public class WxCpCryptUtil extends WxCryptUtil {
@ -50,11 +52,11 @@ public class WxCpCryptUtil extends WxCryptUtil {
* @throws Exception the exception
*/
public static String decryptPriKey(String encryptRandomKey, String msgAuditPriKey, Integer pkcs1) throws Exception {
if (pkcs1 == null) {
if (Objects.isNull(pkcs1)) {
throw new WxErrorException("请配置会话存档解密方式");
}
if (pkcs1 == 1) {
if (Objects.equals(pkcs1, 1)) {
return decryptPriKeyByPKCS1(encryptRandomKey, msgAuditPriKey);
}

View File

@ -18,10 +18,8 @@ import org.testng.annotations.Test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.math.BigInteger;
import java.util.*;
/**
* 企业微信会话内容存档测试类.
@ -755,4 +753,48 @@ public class WxCpMsgAuditTest {
}
Finance.DestroySdk(chatDatas.getSdk());
}
// 测试Uint64类型
public static void main(String[] args){
/*
* 会议邀请信息
*/
String meeting = "{\"msgid\":\"5935786683775673543_1603877328\",\"action\":\"send\",\"from\":\"ken\"," +
"\"tolist\":[\"icef\",\"test\"],\"roomid\":\"wr2vOpDgAAN4zVWKbS\",\"msgtime\":1603877328914," +
"\"msgtype\":\"meeting\",\"meeting\":{\"topic\":\"夕会\",\"starttime\":1603877400,\"endtime\":1603881000," +
"\"address\":\"\",\"remarks\":\"\",\"meetingtype\":102,\"meetingid\":11101571002822706744,\"status\":1}}";
WxCpChatModel modelMeeting = WxCpChatModel.fromJson(meeting);
modelMeeting.getMeeting().getMeetingId();
System.out.println(modelMeeting.toJson());
/*
* 音频共享文档消息
*/
String voipDocShare = "{\"msgid\":\"16527954622422422847_1594199256\",\"action\":\"send\"," +
"\"from\":\"18002520162\",\"tolist\":[\"wo137MCgAAYW6pIiKKrDe5SlzEhSgwbA\"],\"msgtime\":1594199235014," +
"\"msgtype\":\"voip_doc_share\",\"voipid\":\"gr2751c98b19300571f8afb3b74514bd32\"," +
"\"voip_doc_share\":{\"filename\":\"欢迎使用微盘.pdf.pdf\",\"md5sum\":\"ff893900f24e55e216e617a40e5c4648\"," +
"\"filesize\":11101571002822706744," +
"\"sdkfileid" +
"\":\"CpsBKjAqZUlLdWJMd2gvQ1JxMzd0ZjlpdW5mZzJOOE9JZm5kbndvRmRqdnBETjY0QlcvdGtHSFFTYm95dHM2VlllQXhkUUN5KzRmSy9KT3pudnA2aHhYZFlPemc2aVZ6YktzaVh3YkFPZHlqNnl2L2MvcGlqcVRjRTlhZEZsOGlGdHJpQ2RWSVNVUngrVFpuUmo3TGlPQ1BJemlRPT0SOE5EZGZNVFk0T0RnMU16YzVNVGt5T1RJMk9GODFNelUyTlRBd01qQmZNVFU1TkRFNU9USTFOZz09GiA3YTcwNmQ2Zjc5NjY3MDZjNjY2Zjc4NzI3NTZmN2E2YQ==\"}}";
WxCpChatModel modelVoipDocShare = WxCpChatModel.fromJson(voipDocShare);
System.out.println(modelVoipDocShare.toJson());
/*
* 填表消息
*/
String collect = "{\"msgid\":\"2500536226619379797_1576034482\",\"action\":\"send\",\"from\":\"nick\"," +
"\"tolist\":[\"XuJinSheng\",\"15108264797\"],\"roomid\":\"wrjc7bDwYAOAhf9quEwRRxyyoMm0QAAA\"," +
"\"msgtime\":1576034482344,\"msgtype\":\"collect\",\"collect\":{\"room_name\":\"这是一个群\",\"creator\":\"nick\"," +
"\"create_time\":\"2019-12-11 11:21:22\",\"title\":\"这是填表title\",\"details\":[{\"id\":11101571002822706744,\"ques\":\"表项1文本\"," +
"\"type\":\"Text\"},{\"id\":2,\"ques\":\"表项2数字\",\"type\":\"Number\"},{\"id\":3,\"ques\":\"表项3日期\"," +
"\"type\":\"Date\"},{\"id\":4,\"ques\":\"表项4时间\",\"type\":\"Time\"}]}}";
WxCpChatModel modelCollect = WxCpChatModel.fromJson(collect);
System.out.println(modelCollect.toJson());
BigInteger id = modelCollect.getCollect().getDetails().get(0).getId();
System.out.println(id);
}
}