diff --git a/CHANGE.md b/CHANGE.md index 0bc21e83..e6522680 100644 --- a/CHANGE.md +++ b/CHANGE.md @@ -551,3 +551,5 @@ * 2015-12-18 + weixin4j-mp:新增个性化菜单接口 + + + weixin4j-mp:WeixinProxy.getCustomRecord 参数变更为 Date startTime, Date endTime, Pageable pageable diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java index dd2d0a90..d8be9897 100644 --- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java +++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java @@ -440,16 +440,12 @@ public class WeixinProxy { /** * 客服聊天记录 * - * @param openId - * 用户标识 为空时则查询全部记录 - * @param starttime + * @param startTime * 查询开始时间 - * @param endtime + * @param endTime * 查询结束时间 每次查询不能跨日查询 - * @param pagesize - * 每页大小 每页最多拉取50条 - * @param pageindex - * 查询第几页 从1开始 + * @param pageable + * 分页数据 * @see com.foxinmy.weixin4j.mp.model.CustomRecord * @see com.foxinmy.weixin4j.mp.api.CustomApi * @see 查询客服聊天记录 @@ -457,10 +453,9 @@ public class WeixinProxy { * href="http://mp.weixin.qq.com/wiki/19/7c129ec71ddfa60923ea9334557e8b23.html">查询客服聊天记录 * @throws WeixinException */ - public List getCustomRecord(String openId, Date starttime, - Date endtime, int pagesize, int pageindex) throws WeixinException { - return customApi.getCustomRecord(openId, starttime, endtime, pagesize, - pageindex); + public List getCustomRecord(Date startTime, Date endTime, + Pageable pageable) throws WeixinException { + return customApi.getCustomRecord(startTime, endTime, pageable); } /** diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/CustomApi.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/CustomApi.java index b84cc4b4..2d5fca39 100644 --- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/CustomApi.java +++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/CustomApi.java @@ -3,6 +3,7 @@ package com.foxinmy.weixin4j.mp.api; import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -14,6 +15,7 @@ import com.foxinmy.weixin4j.http.apache.ByteArrayBody; import com.foxinmy.weixin4j.http.apache.FormBodyPart; import com.foxinmy.weixin4j.http.weixin.JsonResult; import com.foxinmy.weixin4j.http.weixin.WeixinResponse; +import com.foxinmy.weixin4j.model.Pageable; import com.foxinmy.weixin4j.model.Token; import com.foxinmy.weixin4j.mp.model.CustomRecord; import com.foxinmy.weixin4j.mp.model.KfAccount; @@ -21,6 +23,7 @@ import com.foxinmy.weixin4j.mp.model.KfSession; import com.foxinmy.weixin4j.token.TokenHolder; import com.foxinmy.weixin4j.util.DigestUtil; import com.foxinmy.weixin4j.util.IOUtil; +import com.foxinmy.weixin4j.util.StringUtil; /** * 多客服API @@ -45,38 +48,43 @@ public class CustomApi extends MpApi { /** * 客服聊天记录 * - * @param openId - * 用户标识 可为空 - * @param starttime + * @param startTime * 查询开始时间 - * @param endtime + * @param endTime * 查询结束时间 每次查询不能跨日查询 - * @param pagesize - * 每页大小 每页最多拉取50条 - * @param pageindex - * 查询第几页 从1开始 + * @param pageable + * 分页数据 * @throws WeixinException * @see com.foxinmy.weixin4j.mp.model.CustomRecord * @see 查询客服聊天记录 * @see 查询客服聊天记录 */ - public List getCustomRecord(String openId, Date starttime, - Date endtime, int pagesize, int pageindex) throws WeixinException { - JSONObject obj = new JSONObject(); - obj.put("openId", openId == null ? "" : openId); - obj.put("starttime", starttime.getTime() / 1000); - obj.put("endtime", endtime.getTime() / 1000); - obj.put("pagesize", pagesize > 1000 ? 1000 : pagesize); - obj.put("pageindex", pageindex); + public List getCustomRecord(Date startTime, Date endTime, + Pageable pageable) throws WeixinException { + List records = new ArrayList(); String custom_record_uri = getRequestUri("custom_record_uri"); Token token = tokenHolder.getToken(); - WeixinResponse response = weixinExecutor.post( - String.format(custom_record_uri, token.getAccessToken()), - obj.toJSONString()); + JSONObject obj = new JSONObject(); + obj.put("starttime", startTime.getTime() / 1000); + obj.put("endtime", endTime.getTime() / 1000); + for (int i = 0; i < (int) Math.ceil(pageable.getPageSize() / 50d); i++) { + obj.put("pagesize", Math.min(50, pageable.getPageSize())); + obj.put("pageindex", pageable.getPageNumber()); + WeixinResponse response = weixinExecutor.post( + String.format(custom_record_uri, token.getAccessToken()), + obj.toJSONString()); - String text = response.getAsJson().getString("recordlist"); - return JSON.parseArray(text, CustomRecord.class); + String text = response.getAsJson().getString("recordlist"); + if (StringUtil.isBlank(text) || "[]".equals(text)) { + break; + } + records.addAll(JSON.parseArray(text, CustomRecord.class)); + + pageable = new Pageable(pageable.getPageNumber() + 1, Math.min(50, + Math.max(1, pageable.getPageSize() - ((i + 1) * 50)))); + } + return records; } /** @@ -101,13 +109,13 @@ public class CustomApi extends MpApi { String text = ""; if (isOnline) { String getonlinekflist_uri = getRequestUri("getonlinekflist_uri"); - WeixinResponse response = weixinExecutor.get(String.format(getonlinekflist_uri, - token.getAccessToken())); + WeixinResponse response = weixinExecutor.get(String.format( + getonlinekflist_uri, token.getAccessToken())); text = response.getAsJson().getString("kf_online_list"); } else { String getkflist_uri = getRequestUri("getkflist_uri"); - WeixinResponse response = weixinExecutor.get(String.format(getkflist_uri, - token.getAccessToken())); + WeixinResponse response = weixinExecutor.get(String.format( + getkflist_uri, token.getAccessToken())); text = response.getAsJson().getString("kf_list"); } return JSON.parseArray(text, KfAccount.class); @@ -219,8 +227,8 @@ public class CustomApi extends MpApi { public JsonResult deleteAccount(String id) throws WeixinException { Token token = tokenHolder.getToken(); String custom_delete_uri = getRequestUri("custom_delete_uri"); - WeixinResponse response = weixinExecutor.get(String.format(custom_delete_uri, - token.getAccessToken(), id)); + WeixinResponse response = weixinExecutor.get(String.format( + custom_delete_uri, token.getAccessToken(), id)); return response.getAsJsonResult(); } @@ -301,8 +309,8 @@ public class CustomApi extends MpApi { public KfSession getKfSession(String userOpenId) throws WeixinException { Token token = tokenHolder.getToken(); String kfsession_get_uri = getRequestUri("kfsession_get_uri"); - WeixinResponse response = weixinExecutor.get(String.format(kfsession_get_uri, - token.getAccessToken(), userOpenId)); + WeixinResponse response = weixinExecutor.get(String.format( + kfsession_get_uri, token.getAccessToken(), userOpenId)); KfSession session = response .getAsObject(new TypeReference() { @@ -326,8 +334,8 @@ public class CustomApi extends MpApi { throws WeixinException { Token token = tokenHolder.getToken(); String kfsession_list_uri = getRequestUri("kfsession_list_uri"); - WeixinResponse response = weixinExecutor.get(String.format(kfsession_list_uri, - token.getAccessToken(), kfAccount)); + WeixinResponse response = weixinExecutor.get(String.format( + kfsession_list_uri, token.getAccessToken(), kfAccount)); List sessionList = JSON.parseArray(response.getAsJson() .getString("sessionlist"), KfSession.class); @@ -335,8 +343,9 @@ public class CustomApi extends MpApi { } /** - * 获取未接入会话列表:获取当前正在等待队列中的会话列表,此接口最多返回最早进入队列的100个未接入会话。
- * 缺陷:没有count字段 + * 获取未接入会话列表:获取当前正在等待队列中的会话列表,此接口最多返回最早进入队列的100个未接入会话。
缺陷:没有count字段 + * * @return 会话列表 * @throws WeixinException * @see com.foxinmy.weixin4j.mp.model.KfSession @@ -346,8 +355,8 @@ public class CustomApi extends MpApi { public List listKfSessionWait() throws WeixinException { Token token = tokenHolder.getToken(); String kfsession_wait_uri = getRequestUri("kfsession_wait_uri"); - WeixinResponse response = weixinExecutor.get(String.format(kfsession_wait_uri, - token.getAccessToken())); + WeixinResponse response = weixinExecutor.get(String.format( + kfsession_wait_uri, token.getAccessToken())); List sessionList = JSON.parseArray(response.getAsJson() .getString("waitcaselist"), KfSession.class); diff --git a/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/CustomTest.java b/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/CustomTest.java index fa221a94..4176207e 100644 --- a/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/CustomTest.java +++ b/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/CustomTest.java @@ -12,6 +12,7 @@ import org.junit.Test; import com.foxinmy.weixin4j.exception.WeixinException; import com.foxinmy.weixin4j.http.weixin.JsonResult; +import com.foxinmy.weixin4j.model.Pageable; import com.foxinmy.weixin4j.mp.api.CustomApi; import com.foxinmy.weixin4j.mp.model.CustomRecord; import com.foxinmy.weixin4j.mp.model.KfAccount; @@ -37,17 +38,14 @@ public class CustomTest extends TokenTest { @Test public void customRecord() throws WeixinException { - String openId = ""; Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 9); calendar.add(Calendar.DAY_OF_MONTH, -2); Date starttime = calendar.getTime(); calendar.set(Calendar.HOUR_OF_DAY, 21); Date endtime = calendar.getTime(); - int pagesize = 10; - int pageindex = 1; - List recordList = customApi.getCustomRecord(openId, - starttime, endtime, pagesize, pageindex); + List recordList = customApi.getCustomRecord(starttime, + endtime, new Pageable(1, 70)); System.out.println(recordList); } @@ -61,7 +59,8 @@ public class CustomTest extends TokenTest { @Test public void addAccount() throws WeixinException { - JsonResult result = customApi.createAccount("test@test", "test", "123456"); + JsonResult result = customApi.createAccount("test@test", "test", + "123456"); Assert.assertEquals(0, result.getCode()); }