Bläddra i källkod

issue #100 用户分析数据接口

master
Daniel Qian 10 år sedan
förälder
incheckning
978c51b90d
8 ändrade filer med 280 tillägg och 2 borttagningar
  1. +28
    -1
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java
  2. +24
    -0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java
  3. +41
    -0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpUserCumulate.java
  4. +63
    -0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpUserSummary.java
  5. +2
    -0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java
  6. +47
    -0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpUserCumulateGsonAdapter.java
  7. +47
    -0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpUserSummaryGsonAdapter.java
  8. +28
    -1
      weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMiscAPITest.java

+ 28
- 1
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java Visa fil

@@ -11,13 +11,16 @@ import me.chanjar.weixin.mp.bean.result.*;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
* 微信API的Service
*/
public interface WxMpService {

public static final SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
/**
* <pre>
* 验证推送过来的消息的正确性
@@ -431,6 +434,30 @@ public interface WxMpService {
*/
String[] getCallbackIP() throws WxErrorException;

/**
* <pre>
* 获取用户增减数据
* http://mp.weixin.qq.com/wiki/3/ecfed6e1a0a03b5f35e5efac98e864b7.html
* </pre>
* @param beginDate 最大时间跨度7天
* @param endDate endDate不能早于begingDate
* @return
* @throws WxErrorException
*/
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
* @return
* @throws WxErrorException
*/
List<WxMpUserCumulate> getUserCumulate(Date beginDate, Date endDate) throws WxErrorException;

/**
* 当本Service没有实现某个API的时候,可以用这个,针对所有微信API中的GET请求
* @param url


+ 24
- 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java Visa fil

@@ -44,6 +44,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.security.NoSuchAlgorithmException;
import java.util.Date;
import java.util.List;
import java.util.UUID;

@@ -465,6 +466,29 @@ public class WxMpServiceImpl implements WxMpService {
return ipArray;
}


@Override
public List<WxMpUserSummary> getUserSummary(Date beginDate, Date endDate) throws WxErrorException {
String url = "https://api.weixin.qq.com/datacube/getusersummary";
JsonObject param = new JsonObject();
param.addProperty("begin_date", SIMPLE_DATE_FORMAT.format(beginDate));
param.addProperty("end_date", SIMPLE_DATE_FORMAT.format(endDate));
String responseContent = 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> getUserCumulate(Date beginDate, Date endDate) throws WxErrorException {
String url = "https://api.weixin.qq.com/datacube/getusercumulate";
JsonObject param = new JsonObject();
param.addProperty("begin_date", SIMPLE_DATE_FORMAT.format(beginDate));
param.addProperty("end_date", SIMPLE_DATE_FORMAT.format(endDate));
String responseContent = 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());
}

public String get(String url, String queryParam) throws WxErrorException {
return execute(new SimpleGetRequestExecutor(), url, queryParam);
}


+ 41
- 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpUserCumulate.java Visa fil

@@ -0,0 +1,41 @@
package me.chanjar.weixin.mp.bean.result;

import java.io.Serializable;
import java.util.Date;

/**
* <pre>
* 累计用户数据接口的返回JSON数据包
* http://mp.weixin.qq.com/wiki/3/ecfed6e1a0a03b5f35e5efac98e864b7.html
* </pre>
*/
public class WxMpUserCumulate implements Serializable {

private Date refDate;

private Integer cumulateUser;

public Date getRefDate() {
return refDate;
}

public void setRefDate(Date refDate) {
this.refDate = refDate;
}

public Integer getCumulateUser() {
return cumulateUser;
}

public void setCumulateUser(Integer cumulateUser) {
this.cumulateUser = cumulateUser;
}

@Override
public String toString() {
return "WxMpUserCumulate{" +
"refDate=" + refDate +
", cumulateUser=" + cumulateUser +
'}';
}
}

+ 63
- 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpUserSummary.java Visa fil

@@ -0,0 +1,63 @@
package me.chanjar.weixin.mp.bean.result;

import java.io.Serializable;
import java.util.Date;

/**
* <pre>
* 用户增减数据接口的返回JSON数据包
* http://mp.weixin.qq.com/wiki/3/ecfed6e1a0a03b5f35e5efac98e864b7.html
* </pre>
*/
public class WxMpUserSummary implements Serializable {

private Date refDate;

private Integer userSource;

private Integer newUser;

private Integer cancelUser;

public Date getRefDate() {
return refDate;
}

public void setRefDate(Date refDate) {
this.refDate = refDate;
}

public Integer getUserSource() {
return userSource;
}

public void setUserSource(Integer userSource) {
this.userSource = userSource;
}

public Integer getNewUser() {
return newUser;
}

public void setNewUser(Integer newUser) {
this.newUser = newUser;
}

public Integer getCancelUser() {
return cancelUser;
}

public void setCancelUser(Integer cancelUser) {
this.cancelUser = cancelUser;
}

@Override
public String toString() {
return "WxMpUserSummary{" +
"refDate=" + refDate +
", userSource=" + userSource +
", newUser=" + newUser +
", cancelUser=" + cancelUser +
'}';
}
}

+ 2
- 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java Visa fil

@@ -25,6 +25,8 @@ public class WxMpGsonBuilder {
INSTANCE.registerTypeAdapter(WxMpTemplateMessage.class, new WxMpTemplateMessageGsonAdapter());
INSTANCE.registerTypeAdapter(WxMpSemanticQueryResult.class, new WxMpSemanticQueryResultAdapter());
INSTANCE.registerTypeAdapter(WxMpOAuth2AccessToken.class, new WxMpOAuth2AccessTokenAdapter());
INSTANCE.registerTypeAdapter(WxMpUserSummary.class, new WxMpUserSummaryGsonAdapter());
INSTANCE.registerTypeAdapter(WxMpUserCumulate.class, new WxMpUserCumulateGsonAdapter());
}
public static Gson create() {


+ 47
- 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpUserCumulateGsonAdapter.java Visa fil

@@ -0,0 +1,47 @@
/*
* KINGSTAR MEDIA SOLUTIONS Co.,LTD. Copyright c 2005-2013. All rights reserved.
*
* This source code is the property of KINGSTAR MEDIA SOLUTIONS LTD. It is intended
* only for the use of KINGSTAR MEDIA application development. Reengineering, reproduction
* arose from modification of the original source, or other redistribution of this source
* is not permitted without written permission of the KINGSTAR MEDIA SOLUTIONS LTD.
*/
package me.chanjar.weixin.mp.util.json;

import com.google.gson.*;
import me.chanjar.weixin.common.util.json.GsonHelper;
import me.chanjar.weixin.mp.bean.result.WxMpMassUploadResult;
import me.chanjar.weixin.mp.bean.result.WxMpUserCumulate;
import me.chanjar.weixin.mp.bean.result.WxMpUserSummary;

import java.lang.reflect.Type;
import java.text.ParseException;
import java.text.SimpleDateFormat;

/**
*
* @author Daniel Qian
*
*/
public class WxMpUserCumulateGsonAdapter implements JsonDeserializer<WxMpUserCumulate> {

private static final SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");

public WxMpUserCumulate deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
WxMpUserCumulate cumulate = new WxMpUserCumulate();
JsonObject summaryJsonObject = json.getAsJsonObject();

try {
String refDate = GsonHelper.getString(summaryJsonObject, "ref_date");
if (refDate != null) {
cumulate.setRefDate(SIMPLE_DATE_FORMAT.parse(refDate));
}
cumulate.setCumulateUser(GsonHelper.getInteger(summaryJsonObject, "cumulate_user"));
} catch (ParseException e) {
throw new JsonParseException(e);
}
return cumulate;

}
}

+ 47
- 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpUserSummaryGsonAdapter.java Visa fil

@@ -0,0 +1,47 @@
/*
* KINGSTAR MEDIA SOLUTIONS Co.,LTD. Copyright c 2005-2013. All rights reserved.
*
* This source code is the property of KINGSTAR MEDIA SOLUTIONS LTD. It is intended
* only for the use of KINGSTAR MEDIA application development. Reengineering, reproduction
* arose from modification of the original source, or other redistribution of this source
* is not permitted without written permission of the KINGSTAR MEDIA SOLUTIONS LTD.
*/
package me.chanjar.weixin.mp.util.json;

import com.google.gson.*;
import me.chanjar.weixin.common.util.json.GsonHelper;
import me.chanjar.weixin.mp.bean.result.WxMpMassUploadResult;
import me.chanjar.weixin.mp.bean.result.WxMpUserSummary;

import java.lang.reflect.Type;
import java.text.ParseException;
import java.text.SimpleDateFormat;

/**
* @author Daniel Qian
*/
public class WxMpUserSummaryGsonAdapter implements JsonDeserializer<WxMpUserSummary> {

private static final SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");

public WxMpUserSummary deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
throws JsonParseException {
WxMpUserSummary summary = new WxMpUserSummary();
JsonObject summaryJsonObject = json.getAsJsonObject();

try {
String refDate = GsonHelper.getString(summaryJsonObject, "ref_date");
if (refDate != null) {
summary.setRefDate(SIMPLE_DATE_FORMAT.parse(refDate));
}
summary.setUserSource(GsonHelper.getInteger(summaryJsonObject, "user_source"));
summary.setNewUser(GsonHelper.getInteger(summaryJsonObject, "new_user"));
summary.setCancelUser(GsonHelper.getInteger(summaryJsonObject, "cancel_user"));
} catch (ParseException e) {
throw new JsonParseException(e);
}

return summary;
}

}

+ 28
- 1
weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMiscAPITest.java Visa fil

@@ -4,12 +4,15 @@ import com.google.inject.Inject;
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
import me.chanjar.weixin.common.exception.WxErrorException;
import me.chanjar.weixin.common.session.WxSession;
import me.chanjar.weixin.mp.bean.WxMpMassGroupMessage;
import me.chanjar.weixin.mp.bean.WxMpMassNews;
import me.chanjar.weixin.mp.bean.WxMpMassOpenIdsMessage;
import me.chanjar.weixin.mp.bean.WxMpMassVideo;
import me.chanjar.weixin.mp.bean.result.WxMpMassSendResult;
import me.chanjar.weixin.mp.bean.result.WxMpMassUploadResult;
import me.chanjar.weixin.mp.bean.result.WxMpUserCumulate;
import me.chanjar.weixin.mp.bean.result.WxMpUserSummary;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Guice;
@@ -17,7 +20,11 @@ import org.testng.annotations.Test;

import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

/**
*
@@ -32,11 +39,31 @@ public class WxMpMiscAPITest {
protected WxMpServiceImpl wxService;

@Test
public void getCallbackIP() throws WxErrorException {
public void testGetCallbackIP() throws WxErrorException {
String[] ipArray = wxService.getCallbackIP();
System.out.println(Arrays.toString(ipArray));
Assert.assertNotNull(ipArray);
Assert.assertNotEquals(ipArray.length, 0);
}

@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 = wxService.getUserSummary(beginDate, endDate);
System.out.println(summaries);
Assert.assertNotNull(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 = wxService.getUserCumulate(beginDate, endDate);
System.out.println(cumulates);
Assert.assertNotNull(cumulates);
}

}

Laddar…
Avbryt
Spara