| @@ -0,0 +1,37 @@ | |||||
| package me.chanjar.weixin.mp.api; | |||||
| import java.util.Date; | |||||
| import java.util.List; | |||||
| import me.chanjar.weixin.common.exception.WxErrorException; | |||||
| import me.chanjar.weixin.mp.bean.result.WxMpUserCumulate; | |||||
| import me.chanjar.weixin.mp.bean.result.WxMpUserSummary; | |||||
| /** | |||||
| * 统计分析相关接口 | |||||
| * Created by Binary Wang on 2016/8/23. | |||||
| * @author binarywang (https://github.com/binarywang) | |||||
| */ | |||||
| public interface WxMpDataCubeService { | |||||
| /** | |||||
| * <pre> | |||||
| * 获取用户增减数据 | |||||
| * http://mp.weixin.qq.com/wiki/3/ecfed6e1a0a03b5f35e5efac98e864b7.html | |||||
| * </pre> | |||||
| * | |||||
| * @param beginDate 最大时间跨度7天 | |||||
| * @param endDate endDate不能早于begingDate | |||||
| */ | |||||
| List<WxMpUserSummary> getUserSummary(Date beginDate, Date endDate) throws WxErrorException; | |||||
| /** | |||||
| * <pre> | |||||
| * 获取累计用户数据 | |||||
| * http://mp.weixin.qq.com/wiki/3/ecfed6e1a0a03b5f35e5efac98e864b7.html | |||||
| * </pre> | |||||
| * | |||||
| * @param beginDate 最大时间跨度7天 | |||||
| * @param endDate endDate不能早于begingDate | |||||
| */ | |||||
| List<WxMpUserCumulate> getUserCumulate(Date beginDate, Date endDate) throws WxErrorException; | |||||
| } | |||||
| @@ -336,4 +336,11 @@ public interface WxMpService { | |||||
| * @return WxMpPayService | * @return WxMpPayService | ||||
| */ | */ | ||||
| WxMpPayService getPayService(); | WxMpPayService getPayService(); | ||||
| /** | |||||
| * 返回数据分析统计相关接口的方法实现类,以方便调用个其各种接口 | |||||
| * | |||||
| * @return WxMpDataCubeService | |||||
| */ | |||||
| WxMpDataCubeService getDataCubeService(); | |||||
| } | } | ||||
| @@ -2,12 +2,7 @@ package me.chanjar.weixin.mp.api; | |||||
| import me.chanjar.weixin.common.exception.WxErrorException; | import me.chanjar.weixin.common.exception.WxErrorException; | ||||
| import me.chanjar.weixin.mp.bean.result.WxMpUser; | import me.chanjar.weixin.mp.bean.result.WxMpUser; | ||||
| import me.chanjar.weixin.mp.bean.result.WxMpUserCumulate; | |||||
| import me.chanjar.weixin.mp.bean.result.WxMpUserList; | import me.chanjar.weixin.mp.bean.result.WxMpUserList; | ||||
| import me.chanjar.weixin.mp.bean.result.WxMpUserSummary; | |||||
| import java.util.Date; | |||||
| import java.util.List; | |||||
| /** | /** | ||||
| * 用户管理和统计相关操作接口 | * 用户管理和统计相关操作接口 | ||||
| @@ -47,26 +42,4 @@ public interface WxMpUserService { | |||||
| * @param next_openid 可选,第一个拉取的OPENID,null为从头开始拉取 | * @param next_openid 可选,第一个拉取的OPENID,null为从头开始拉取 | ||||
| */ | */ | ||||
| WxMpUserList userList(String next_openid) throws WxErrorException; | WxMpUserList userList(String next_openid) throws WxErrorException; | ||||
| /** | |||||
| * <pre> | |||||
| * 获取用户增减数据 | |||||
| * http://mp.weixin.qq.com/wiki/3/ecfed6e1a0a03b5f35e5efac98e864b7.html | |||||
| * </pre> | |||||
| * | |||||
| * @param beginDate 最大时间跨度7天 | |||||
| * @param endDate endDate不能早于begingDate | |||||
| */ | |||||
| List<WxMpUserSummary> dataCubeUserSummary(Date beginDate, Date endDate) throws WxErrorException; | |||||
| /** | |||||
| * <pre> | |||||
| * 获取累计用户数据 | |||||
| * http://mp.weixin.qq.com/wiki/3/ecfed6e1a0a03b5f35e5efac98e864b7.html | |||||
| * </pre> | |||||
| * | |||||
| * @param beginDate 最大时间跨度7天 | |||||
| * @param endDate endDate不能早于begingDate | |||||
| */ | |||||
| List<WxMpUserCumulate> dataCubeUserCumulate(Date beginDate, Date endDate) throws WxErrorException; | |||||
| } | } | ||||
| @@ -0,0 +1,52 @@ | |||||
| package me.chanjar.weixin.mp.api.impl; | |||||
| import java.util.Date; | |||||
| import java.util.List; | |||||
| import com.google.gson.JsonObject; | |||||
| import com.google.gson.JsonParser; | |||||
| import com.google.gson.reflect.TypeToken; | |||||
| import me.chanjar.weixin.common.exception.WxErrorException; | |||||
| import me.chanjar.weixin.mp.api.WxMpDataCubeService; | |||||
| import me.chanjar.weixin.mp.api.WxMpService; | |||||
| import me.chanjar.weixin.mp.bean.result.WxMpUserCumulate; | |||||
| import me.chanjar.weixin.mp.bean.result.WxMpUserSummary; | |||||
| import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; | |||||
| /** | |||||
| * Created by Binary Wang on 2016/8/23. | |||||
| * @author binarywang (https://github.com/binarywang) | |||||
| */ | |||||
| public class WxMpDataCubeServiceImpl implements WxMpDataCubeService { | |||||
| private static final String API_URL_PREFIX = "https://api.weixin.qq.com/datacube"; | |||||
| private WxMpService wxMpService; | |||||
| public WxMpDataCubeServiceImpl(WxMpService wxMpService) { | |||||
| this.wxMpService = wxMpService; | |||||
| } | |||||
| @Override | |||||
| public List<WxMpUserSummary> getUserSummary(Date beginDate, Date endDate) throws WxErrorException { | |||||
| String url = API_URL_PREFIX + "/getusersummary"; | |||||
| JsonObject param = new JsonObject(); | |||||
| param.addProperty("begin_date", WxMpService.SIMPLE_DATE_FORMAT.format(beginDate)); | |||||
| param.addProperty("end_date", WxMpService.SIMPLE_DATE_FORMAT.format(endDate)); | |||||
| String responseContent = this.wxMpService.post(url, param.toString()); | |||||
| return WxMpGsonBuilder.INSTANCE.create().fromJson(new JsonParser().parse(responseContent).getAsJsonObject().get("list"), | |||||
| new TypeToken<List<WxMpUserSummary>>() { | |||||
| }.getType()); | |||||
| } | |||||
| @Override | |||||
| public List<WxMpUserCumulate> getUserCumulate(Date beginDate, Date endDate) throws WxErrorException { | |||||
| String url = API_URL_PREFIX + "/getusercumulate"; | |||||
| JsonObject param = new JsonObject(); | |||||
| param.addProperty("begin_date", WxMpService.SIMPLE_DATE_FORMAT.format(beginDate)); | |||||
| param.addProperty("end_date", WxMpService.SIMPLE_DATE_FORMAT.format(endDate)); | |||||
| String responseContent = this.wxMpService.post(url, param.toString()); | |||||
| return WxMpGsonBuilder.INSTANCE.create().fromJson(new JsonParser().parse(responseContent).getAsJsonObject().get("list"), | |||||
| new TypeToken<List<WxMpUserCumulate>>() { | |||||
| }.getType()); | |||||
| } | |||||
| } | |||||
| @@ -64,6 +64,8 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| private WxMpPayService payService = new WxMpPayServiceImpl(this); | private WxMpPayService payService = new WxMpPayServiceImpl(this); | ||||
| private WxMpDataCubeService dataCubeService = new WxMpDataCubeServiceImpl(this); | |||||
| private CloseableHttpClient httpClient; | private CloseableHttpClient httpClient; | ||||
| private HttpHost httpProxy; | private HttpHost httpProxy; | ||||
| @@ -527,4 +529,9 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| return this.payService; | return this.payService; | ||||
| } | } | ||||
| @Override | |||||
| public WxMpDataCubeService getDataCubeService() { | |||||
| return this.dataCubeService; | |||||
| } | |||||
| } | } | ||||
| @@ -1,24 +1,14 @@ | |||||
| package me.chanjar.weixin.mp.api.impl; | package me.chanjar.weixin.mp.api.impl; | ||||
| import com.google.gson.JsonElement; | |||||
| import com.google.gson.JsonObject; | import com.google.gson.JsonObject; | ||||
| import com.google.gson.internal.Streams; | |||||
| import com.google.gson.reflect.TypeToken; | |||||
| import com.google.gson.stream.JsonReader; | |||||
| import me.chanjar.weixin.common.exception.WxErrorException; | import me.chanjar.weixin.common.exception.WxErrorException; | ||||
| import me.chanjar.weixin.common.util.http.SimpleGetRequestExecutor; | import me.chanjar.weixin.common.util.http.SimpleGetRequestExecutor; | ||||
| import me.chanjar.weixin.common.util.http.SimplePostRequestExecutor; | import me.chanjar.weixin.common.util.http.SimplePostRequestExecutor; | ||||
| import me.chanjar.weixin.mp.api.WxMpService; | import me.chanjar.weixin.mp.api.WxMpService; | ||||
| import me.chanjar.weixin.mp.api.WxMpUserService; | import me.chanjar.weixin.mp.api.WxMpUserService; | ||||
| import me.chanjar.weixin.mp.bean.result.WxMpUser; | import me.chanjar.weixin.mp.bean.result.WxMpUser; | ||||
| import me.chanjar.weixin.mp.bean.result.WxMpUserCumulate; | |||||
| import me.chanjar.weixin.mp.bean.result.WxMpUserList; | import me.chanjar.weixin.mp.bean.result.WxMpUserList; | ||||
| import me.chanjar.weixin.mp.bean.result.WxMpUserSummary; | |||||
| import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; | |||||
| import java.io.StringReader; | |||||
| import java.util.Date; | |||||
| import java.util.List; | |||||
| /** | /** | ||||
| * Created by Binary Wang on 2016/7/21. | * Created by Binary Wang on 2016/7/21. | ||||
| @@ -55,29 +45,4 @@ public class WxMpUserServiceImpl implements WxMpUserService { | |||||
| return WxMpUserList.fromJson(responseContent); | return WxMpUserList.fromJson(responseContent); | ||||
| } | } | ||||
| @Override | |||||
| public List<WxMpUserSummary> dataCubeUserSummary(Date beginDate, Date endDate) throws WxErrorException { | |||||
| String url = "https://api.weixin.qq.com/datacube/getusersummary"; | |||||
| JsonObject param = new JsonObject(); | |||||
| param.addProperty("begin_date", WxMpService.SIMPLE_DATE_FORMAT.format(beginDate)); | |||||
| param.addProperty("end_date", WxMpService.SIMPLE_DATE_FORMAT.format(endDate)); | |||||
| String responseContent = this.wxMpService.post(url, param.toString()); | |||||
| JsonElement tmpJsonElement = Streams.parse(new JsonReader(new StringReader(responseContent))); | |||||
| return WxMpGsonBuilder.INSTANCE.create().fromJson(tmpJsonElement.getAsJsonObject().get("list"), | |||||
| new TypeToken<List<WxMpUserSummary>>() { | |||||
| }.getType()); | |||||
| } | |||||
| @Override | |||||
| public List<WxMpUserCumulate> dataCubeUserCumulate(Date beginDate, Date endDate) throws WxErrorException { | |||||
| String url = "https://api.weixin.qq.com/datacube/getusercumulate"; | |||||
| JsonObject param = new JsonObject(); | |||||
| param.addProperty("begin_date", WxMpService.SIMPLE_DATE_FORMAT.format(beginDate)); | |||||
| param.addProperty("end_date", WxMpService.SIMPLE_DATE_FORMAT.format(endDate)); | |||||
| String responseContent = this.wxMpService.post(url, param.toString()); | |||||
| JsonElement tmpJsonElement = Streams.parse(new JsonReader(new StringReader(responseContent))); | |||||
| return WxMpGsonBuilder.INSTANCE.create().fromJson(tmpJsonElement.getAsJsonObject().get("list"), | |||||
| new TypeToken<List<WxMpUserCumulate>>() { | |||||
| }.getType()); | |||||
| } | |||||
| } | } | ||||
| @@ -0,0 +1,51 @@ | |||||
| package me.chanjar.weixin.mp.api.impl; | |||||
| import java.text.ParseException; | |||||
| import java.text.SimpleDateFormat; | |||||
| import java.util.Date; | |||||
| import java.util.List; | |||||
| import org.testng.Assert; | |||||
| import org.testng.annotations.Guice; | |||||
| import org.testng.annotations.Test; | |||||
| import com.google.inject.Inject; | |||||
| import me.chanjar.weixin.common.exception.WxErrorException; | |||||
| import me.chanjar.weixin.mp.api.ApiTestModule; | |||||
| import me.chanjar.weixin.mp.bean.result.WxMpUserCumulate; | |||||
| import me.chanjar.weixin.mp.bean.result.WxMpUserSummary; | |||||
| /** | |||||
| * 测试统计分析相关的接口 | |||||
| * Created by Binary Wang on 2016/8/23. | |||||
| * @author binarywang (https://github.com/binarywang) | |||||
| */ | |||||
| @Guice(modules = ApiTestModule.class) | |||||
| public class WxMpDataCubeServiceImplTest { | |||||
| private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); | |||||
| @Inject | |||||
| protected WxMpServiceImpl wxService; | |||||
| @Test | |||||
| public void testGetUserSummary() throws WxErrorException, ParseException { | |||||
| Date beginDate = simpleDateFormat.parse("2016-08-20"); | |||||
| Date endDate = simpleDateFormat.parse("2016-08-22"); | |||||
| List<WxMpUserSummary> summaries = this.wxService.getDataCubeService() | |||||
| .getUserSummary(beginDate, endDate); | |||||
| Assert.assertNotNull(summaries); | |||||
| System.out.println(summaries); | |||||
| } | |||||
| @Test | |||||
| public void testGetUserCumulate() throws WxErrorException, ParseException { | |||||
| Date beginDate = simpleDateFormat.parse("2016-08-21"); | |||||
| Date endDate = simpleDateFormat.parse("2016-08-22"); | |||||
| List<WxMpUserCumulate> cumulates = this.wxService.getDataCubeService() | |||||
| .getUserCumulate(beginDate, endDate); | |||||
| Assert.assertNotNull(cumulates); | |||||
| System.out.println(cumulates); | |||||
| } | |||||
| } | |||||
| @@ -1,20 +1,15 @@ | |||||
| package me.chanjar.weixin.mp.api.impl; | package me.chanjar.weixin.mp.api.impl; | ||||
| import org.testng.Assert; | |||||
| import org.testng.annotations.Guice; | |||||
| import org.testng.annotations.Test; | |||||
| import com.google.inject.Inject; | import com.google.inject.Inject; | ||||
| import me.chanjar.weixin.common.exception.WxErrorException; | import me.chanjar.weixin.common.exception.WxErrorException; | ||||
| import me.chanjar.weixin.mp.api.ApiTestModule; | import me.chanjar.weixin.mp.api.ApiTestModule; | ||||
| import me.chanjar.weixin.mp.bean.result.WxMpUser; | import me.chanjar.weixin.mp.bean.result.WxMpUser; | ||||
| import me.chanjar.weixin.mp.bean.result.WxMpUserCumulate; | |||||
| import me.chanjar.weixin.mp.bean.result.WxMpUserList; | import me.chanjar.weixin.mp.bean.result.WxMpUserList; | ||||
| import me.chanjar.weixin.mp.bean.result.WxMpUserSummary; | |||||
| import org.testng.Assert; | |||||
| import org.testng.annotations.Guice; | |||||
| import org.testng.annotations.Test; | |||||
| import java.text.ParseException; | |||||
| import java.text.SimpleDateFormat; | |||||
| import java.util.Date; | |||||
| import java.util.List; | |||||
| /** | /** | ||||
| * 测试用户相关的接口 | * 测试用户相关的接口 | ||||
| @@ -61,24 +56,4 @@ public class WxMpUserServiceImplTest { | |||||
| this.wxService.getGroupService().userUpdateGroup(configStorage.getOpenId(), this.wxService.getGroupService().groupGet().get(3).getId()); | this.wxService.getGroupService().userUpdateGroup(configStorage.getOpenId(), this.wxService.getGroupService().groupGet().get(3).getId()); | ||||
| } | } | ||||
| @Test | |||||
| public void testGetUserSummary() throws WxErrorException, ParseException { | |||||
| SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); | |||||
| Date beginDate = simpleDateFormat.parse("2015-01-01"); | |||||
| Date endDate = simpleDateFormat.parse("2015-01-02"); | |||||
| List<WxMpUserSummary> summaries = this.wxService.getUserService().dataCubeUserSummary(beginDate, endDate); | |||||
| Assert.assertNotNull(summaries); | |||||
| System.out.println(summaries); | |||||
| } | |||||
| @Test | |||||
| public void testGetUserCumulate() throws WxErrorException, ParseException { | |||||
| SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); | |||||
| Date beginDate = simpleDateFormat.parse("2015-01-01"); | |||||
| Date endDate = simpleDateFormat.parse("2015-01-02"); | |||||
| List<WxMpUserCumulate> cumulates = this.wxService.getUserService().dataCubeUserCumulate(beginDate, endDate); | |||||
| Assert.assertNotNull(cumulates); | |||||
| System.out.println(cumulates); | |||||
| } | |||||
| } | } | ||||