diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpKefuService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpKefuService.java index 38eaa8a00..7e14cb8f3 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpKefuService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpKefuService.java @@ -136,7 +136,7 @@ public interface WxMpKefuService { //*******************获取聊天记录的接口***********************// /** *
- * 获取聊天记录 + * 获取聊天记录(原始接口) * 此接口返回的聊天记录中,对于图片、语音、视频,分别展示成文本格式的[image]、[voice]、[video] * 详情请见:获取聊天记录 * 接口url格式: https://api.weixin.qq.com/customservice/msgrecord/getmsglist?access_token=ACCESS_TOKEN @@ -149,6 +149,21 @@ public interface WxMpKefuService { * @return 聊天记录对象 * @throws WxErrorException */ - WxMpKfMsgList kfMsgList(Date startTime, Date endTime, Integer msgId, Integer number) throws WxErrorException; + WxMpKfMsgList kfMsgList(Date startTime, Date endTime, Long msgId, Integer number) throws WxErrorException; + + /** + *+ * 获取聊天记录(优化接口,返回指定时间段内所有的聊天记录) + * 此接口返回的聊天记录中,对于图片、语音、视频,分别展示成文本格式的[image]、[voice]、[video] + * 详情请见:获取聊天记录 + * 接口url格式: https://api.weixin.qq.com/customservice/msgrecord/getmsglist?access_token=ACCESS_TOKEN + *+ * + * @param startTime 起始时间 + * @param endTime 结束时间 + * @return 聊天记录对象 + * @throws WxErrorException + */ + WxMpKfMsgList kfMsgList(Date startTime, Date endTime) throws WxErrorException; } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpKefuServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpKefuServiceImpl.java index d38577007..f3df9af05 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpKefuServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpKefuServiceImpl.java @@ -133,7 +133,11 @@ public class WxMpKefuServiceImpl implements WxMpKefuService { } @Override - public WxMpKfMsgList kfMsgList(Date startTime, Date endTime, Integer msgId, Integer number) throws WxErrorException { + public WxMpKfMsgList kfMsgList(Date startTime, Date endTime, Long msgId, Integer number) throws WxErrorException { + if(number > 10000){ + throw new WxErrorException(WxError.newBuilder().setErrorMsg("非法参数请求,每次最多查询10000条记录!").build()); + } + if(startTime.after(endTime)){ throw new WxErrorException(WxError.newBuilder().setErrorMsg("起始时间不能晚于结束时间!").build()); } @@ -150,4 +154,23 @@ public class WxMpKefuServiceImpl implements WxMpKefuService { return WxMpKfMsgList.fromJson(responseContent); } + @Override + public WxMpKfMsgList kfMsgList(Date startTime, Date endTime) throws WxErrorException { + int number = 10000; + WxMpKfMsgList result = this.kfMsgList(startTime,endTime, 1L, number); + Long msgId = result.getMsgId(); + + if(result != null && result.getNumber() >= number){ + WxMpKfMsgList followingResult = this.kfMsgList(startTime,endTime, msgId, number); + while(followingResult != null && followingResult.getRecords().size() > 0){ + result.getRecords().addAll(followingResult.getRecords()); + result.setNumber(result.getNumber() + followingResult.getNumber()); + result.setMsgId(followingResult.getMsgId()); + followingResult = this.kfMsgList(startTime,endTime, followingResult.getMsgId(), number); + } + } + + return result; + } + } diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpKefuServiceImplTest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpKefuServiceImplTest.java index 3f3e32dd6..edfdc0b6b 100644 --- a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpKefuServiceImplTest.java +++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpKefuServiceImplTest.java @@ -147,12 +147,19 @@ public class WxMpKefuServiceImplTest { @Test public void testKfMsgList() throws WxErrorException, JsonProcessingException { - BasicConfigurator.configureDefaultContext(); Date startTime = DateTime.now().minusDays(1).toDate(); - Date endTime = DateTime.now().toDate(); - WxMpKfMsgList result = this.wxService.getKefuService().kfMsgList(startTime,endTime, 0, 20); + Date endTime = DateTime.now().minusDays(0).toDate(); + WxMpKfMsgList result = this.wxService.getKefuService().kfMsgList(startTime,endTime, 1L, 50); Assert.assertNotNull(result); System.err.println(new ObjectMapper().writeValueAsString(result)); } + @Test + public void testKfMsgListAll() throws WxErrorException, JsonProcessingException { + Date startTime = DateTime.now().minusDays(1).toDate(); + Date endTime = DateTime.now().minusDays(0).toDate(); + WxMpKfMsgList result = this.wxService.getKefuService().kfMsgList(startTime,endTime); + Assert.assertNotNull(result); + System.err.println(new ObjectMapper().writeValueAsString(result)); + } }