Просмотр исходного кода

add user black list api and impl

master
miller 8 лет назад
Родитель
Сommit
b941a57ccd
8 измененных файлов: 251 добавлений и 19 удалений
  1. +8
    -1
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java
  2. +35
    -0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpUserBlackListService.java
  3. +24
    -18
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceImpl.java
  4. +50
    -0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserBlackListServiceImpl.java
  5. +57
    -0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpUserBlackListGetResult.java
  6. +1
    -0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java
  7. +28
    -0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxUserBlackListGetResultGsonAdapter.java
  8. +48
    -0
      weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpUserBlackListServiceImplTest.java

+ 8
- 1
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java Просмотреть файл

@@ -327,7 +327,7 @@ public interface WxMpService {
*
* @return WxMpGroupService
*/
WxMpGroupService getGroupService();

/**
@@ -364,4 +364,11 @@ public interface WxMpService {
* @return WxMpDataCubeService
*/
WxMpDataCubeService getDataCubeService();

/**
* 返回用户黑名单管理相关接口的方法实现类,以方便调用其各种借口
*
* @return WxMpUserBlackListService
*/
WxMpUserBlackListService getBlackListService();
}

+ 35
- 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpUserBlackListService.java Просмотреть файл

@@ -0,0 +1,35 @@
package me.chanjar.weixin.mp.api;

import me.chanjar.weixin.common.exception.WxErrorException;
import me.chanjar.weixin.mp.bean.result.WxMpUserBlackListGetResult;

import java.util.List;

/**
* @author miller
*/
public interface WxMpUserBlackListService {
/**
* <pre>
* 获取公众号的黑名单列表
* 详情请见http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1471422259_pJMWA&token=&lang=zh_CN
* </pre>
*/
WxMpUserBlackListGetResult blackList(String nextOpenid) throws WxErrorException;

/**
* <pre>
* 拉黑用户
* 详情请见http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1471422259_pJMWA&token=&lang=zh_CN
* </pre>
*/
void pushToBlackList(List<String> openIdList) throws WxErrorException;

/**
* <pre>
* 取消拉黑用户
* 详情请见http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1471422259_pJMWA&token=&lang=zh_CN
* </pre>
*/
void pullFromBlackList(List<String> openIdList) throws WxErrorException;
}

+ 24
- 18
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceImpl.java Просмотреть файл

@@ -1,23 +1,9 @@
package me.chanjar.weixin.mp.api.impl;

import java.io.IOException;

import org.apache.http.HttpHost;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.ssl.DefaultHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.CloseableHttpClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

import me.chanjar.weixin.common.bean.WxAccessToken;
import me.chanjar.weixin.common.bean.WxJsapiSignature;
import me.chanjar.weixin.common.bean.result.WxError;
@@ -42,6 +28,7 @@ import me.chanjar.weixin.mp.api.WxMpMenuService;
import me.chanjar.weixin.mp.api.WxMpPayService;
import me.chanjar.weixin.mp.api.WxMpQrcodeService;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.WxMpUserBlackListService;
import me.chanjar.weixin.mp.api.WxMpUserService;
import me.chanjar.weixin.mp.api.WxMpUserTagService;
import me.chanjar.weixin.mp.bean.WxMpIndustry;
@@ -57,6 +44,18 @@ import me.chanjar.weixin.mp.bean.result.WxMpMassUploadResult;
import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken;
import me.chanjar.weixin.mp.bean.result.WxMpSemanticQueryResult;
import me.chanjar.weixin.mp.bean.result.WxMpUser;
import org.apache.http.HttpHost;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.ssl.DefaultHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.CloseableHttpClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;

public class WxMpServiceImpl implements WxMpService {

@@ -75,7 +74,7 @@ public class WxMpServiceImpl implements WxMpService {
private final Object globalJsapiTicketRefreshLock = new Object();

private WxMpConfigStorage configStorage;
private WxMpKefuService kefuService = new WxMpKefuServiceImpl(this);

private WxMpMaterialService materialService = new WxMpMaterialServiceImpl(this);
@@ -96,6 +95,8 @@ public class WxMpServiceImpl implements WxMpService {

private WxMpDataCubeService dataCubeService = new WxMpDataCubeServiceImpl(this);

private WxMpUserBlackListService blackListService = new WxMpUserBlackListServiceImpl(this);

private CloseableHttpClient httpClient;

private HttpHost httpProxy;
@@ -312,7 +313,7 @@ public class WxMpServiceImpl implements WxMpService {
if (state != null) {
url.append("&state=").append(state);
}
url.append("#wechat_redirect");
return url.toString();
}
@@ -474,7 +475,7 @@ public class WxMpServiceImpl implements WxMpService {
throw new RuntimeException(e);
}
}
public HttpHost getHttpProxy() {
return this.httpProxy;
}
@@ -495,7 +496,7 @@ public class WxMpServiceImpl implements WxMpService {
if (null == apacheHttpClientBuilder) {
apacheHttpClientBuilder = DefaultApacheHttpClientBuilder.get();
}
apacheHttpClientBuilder.httpProxyHost(this.configStorage.getHttpProxyHost())
.httpProxyPort(this.configStorage.getHttpProxyPort())
.httpProxyUsername(this.configStorage.getHttpProxyUsername())
@@ -580,4 +581,9 @@ public class WxMpServiceImpl implements WxMpService {
return this.dataCubeService;
}

@Override
public WxMpUserBlackListService getBlackListService() {
return this.blackListService;
}

}

+ 50
- 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserBlackListServiceImpl.java Просмотреть файл

@@ -0,0 +1,50 @@
package me.chanjar.weixin.mp.api.impl;

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import me.chanjar.weixin.common.exception.WxErrorException;
import me.chanjar.weixin.common.util.http.SimplePostRequestExecutor;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.WxMpUserBlackListService;
import me.chanjar.weixin.mp.bean.result.WxMpUserBlackListGetResult;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* @author miller
*/
public class WxMpUserBlackListServiceImpl implements WxMpUserBlackListService {
private static final String API_BLACK_LIST_PREFIX = "https://api.weixin.qq.com/cgi-bin/tags/members";
private WxMpService wxMpService;

public WxMpUserBlackListServiceImpl(WxMpService wxMpService) {
this.wxMpService = wxMpService;
}

@Override
public WxMpUserBlackListGetResult blackList(String nextOpenid) throws WxErrorException {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("begin_openid", nextOpenid);
String url = API_BLACK_LIST_PREFIX + "/getblacklist";
String responseContent = this.wxMpService.execute(new SimplePostRequestExecutor(), url, jsonObject.toString());
return WxMpUserBlackListGetResult.fromJson(responseContent);
}

@Override
public void pushToBlackList(List<String> openIdList) throws WxErrorException {
Map<String, Object> map = new HashMap<>();
map.put("openid_list", openIdList);
String url = API_BLACK_LIST_PREFIX + "/batchblacklist";
this.wxMpService.execute(new SimplePostRequestExecutor(), url, new Gson().toJson(map));
}

@Override
public void pullFromBlackList(List<String> openIdList) throws WxErrorException {
Map<String, Object> map = new HashMap<>();
map.put("openid_list", openIdList);
String url = API_BLACK_LIST_PREFIX + "/batchunblacklist";
this.wxMpService.execute(new SimplePostRequestExecutor(), url, new Gson().toJson(map));
}
}

+ 57
- 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpUserBlackListGetResult.java Просмотреть файл

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

import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;

import java.util.ArrayList;
import java.util.List;

/**
* @author miller
*/
public class WxMpUserBlackListGetResult {
protected int total = -1;
protected int count = -1;
protected List<String> openIds = new ArrayList<>();
protected String nextOpenId;

public static WxMpUserBlackListGetResult fromJson(String json) {
return WxMpGsonBuilder.INSTANCE.create().fromJson(json, WxMpUserBlackListGetResult.class);
}

public int getTotal() {
return this.total;
}

public void setTotal(int total) {
this.total = total;
}

public int getCount() {
return this.count;
}

public void setCount(int count) {
this.count = count;
}

public List<String> getOpenIds() {
return this.openIds;
}

public void setOpenIds(List<String> openIds) {
this.openIds = openIds;
}

public String getNextOpenId() {
return this.nextOpenId;
}

public void setNextOpenId(String nextOpenId) {
this.nextOpenId = nextOpenId;
}

@Override
public String toString() {
return WxMpGsonBuilder.INSTANCE.create().toJson(this);
}
}

+ 1
- 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java Просмотреть файл

@@ -45,6 +45,7 @@ public class WxMpGsonBuilder {
INSTANCE.registerTypeAdapter(WxMpMassPreviewMessage.class, new WxMpMassPreviewMessageGsonAdapter());
INSTANCE.registerTypeAdapter(WxMediaImgUploadResult.class, new WxMediaImgUploadResultGsonAdapter());
INSTANCE.registerTypeAdapter(WxMpIndustry.class, new WxMpIndustryGsonAdapter());
INSTANCE.registerTypeAdapter(WxMpUserBlackListGetResult.class, new WxUserBlackListGetResultGsonAdapter());
}

public static Gson create() {


+ 28
- 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxUserBlackListGetResultGsonAdapter.java Просмотреть файл

@@ -0,0 +1,28 @@
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.WxMpUserBlackListGetResult;

import java.lang.reflect.Type;

/**
* @author miller
*/
public class WxUserBlackListGetResultGsonAdapter implements JsonDeserializer<WxMpUserBlackListGetResult> {
@Override
public WxMpUserBlackListGetResult deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
JsonObject o = json.getAsJsonObject();
WxMpUserBlackListGetResult wxMpUserBlackListGetResult = new WxMpUserBlackListGetResult();
wxMpUserBlackListGetResult.setTotal(GsonHelper.getInteger(o, "total"));
wxMpUserBlackListGetResult.setCount(GsonHelper.getInteger(o, "count"));
wxMpUserBlackListGetResult.setNextOpenId(GsonHelper.getString(o, "next_openid"));
if (o.get("data") != null && !o.get("data").isJsonNull() && !o.get("data").getAsJsonObject().get("openid").isJsonNull()) {
JsonArray data = o.get("data").getAsJsonObject().get("openid").getAsJsonArray();
for (int i = 0; i < data.size(); i++) {
wxMpUserBlackListGetResult.getOpenIds().add(GsonHelper.getAsString(data.get(i)));
}
}
return wxMpUserBlackListGetResult;
}
}

+ 48
- 0
weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpUserBlackListServiceImplTest.java Просмотреть файл

@@ -0,0 +1,48 @@
package me.chanjar.weixin.mp.api.impl;

import me.chanjar.weixin.mp.api.ApiTestModule;
import me.chanjar.weixin.mp.bean.result.WxMpUserBlackListGetResult;
import org.testng.Assert;
import org.testng.annotations.Guice;
import org.testng.annotations.Test;

import javax.inject.Inject;
import java.util.ArrayList;
import java.util.List;

/**
* @author miller
*/
@Test(groups = "userAPI")
@Guice(modules = ApiTestModule.class)
public class WxMpUserBlackListServiceImplTest {
//此处openid只是开发的时候测试用 使用者测试的时候请替换自己公众号的openid
private final String TEST_OPENID = "o9VAswOI0KSXFUtFHgk9Kb9Rtkys";
@Inject
protected WxMpServiceImpl wxService;

@Test
public void testBlackList() throws Exception {
WxMpUserBlackListGetResult wxMpUserBlackListGetResult = this.wxService.getBlackListService().blackList(TEST_OPENID);
Assert.assertNotNull(wxMpUserBlackListGetResult);
Assert.assertFalse(wxMpUserBlackListGetResult.getCount() == -1);
Assert.assertFalse(wxMpUserBlackListGetResult.getTotal() == -1);
Assert.assertFalse(wxMpUserBlackListGetResult.getOpenIds().size() == -1);
System.out.println(wxMpUserBlackListGetResult);
}

@Test
public void testPushToBlackList() throws Exception {
List<String> openIdList = new ArrayList<>();
openIdList.add(TEST_OPENID);
this.wxService.getBlackListService().pushToBlackList(openIdList);
}

@Test
public void testPullFromBlackList() throws Exception {
List<String> openIdList = new ArrayList<>();
openIdList.add(TEST_OPENID);
this.wxService.getBlackListService().pullFromBlackList(openIdList);
}

}

Загрузка…
Отмена
Сохранить