mirror of
https://gitee.com/binary/weixin-java-tools.git
synced 2025-04-05 17:38:05 +08:00
🎨 #3178【企业微信】修复会话存档反序列化接口中uint64相关字段定义,使用BigInteger类型
This commit is contained in:
parent
1fe8fe4caa
commit
69df6f1bcf
@ -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。
|
||||
* 3、indexbuf一般格式如右侧所示,”Range:bytes=524288-1048575“:表示这次拉取的是从524288到1048575的分片。单个文件首次拉取填写的indexbuf
|
||||
* 为空字符串,拉取后续分片时直接填入上次返回的indexbuf即可。
|
||||
*/
|
||||
/**
|
||||
* 1、媒体文件每次拉取的最大size为512k,因此超过512k的文件需要分片拉取。
|
||||
* 2、若该文件未拉取完整,sdk的IsMediaDataFinish接口会返回0,同时通过GetOutIndexBuf接口返回下次拉取需要传入GetMediaData的indexbuf。
|
||||
* 3、indexbuf一般格式如右侧所示,”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的文件会分片拉取,此处需要使用追加写,避免后面的分片覆盖之前的数据。
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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.
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user