mirror of
				https://gitee.com/binary/weixin-java-tools.git
				synced 2025-10-31 10:38:42 +08:00 
			
		
		
		
	add user black list api and impl
This commit is contained in:
		| @ -364,4 +364,11 @@ public interface WxMpService { | ||||
|    * @return WxMpDataCubeService | ||||
|    */ | ||||
|   WxMpDataCubeService getDataCubeService(); | ||||
|  | ||||
|   /** | ||||
|    * 返回用户黑名单管理相关接口的方法实现类,以方便调用其各种借口 | ||||
|    * | ||||
|    * @return WxMpUserBlackListService | ||||
|    */ | ||||
|   WxMpUserBlackListService getBlackListService(); | ||||
| } | ||||
|  | ||||
| @ -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; | ||||
| } | ||||
| @ -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 { | ||||
|  | ||||
| @ -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; | ||||
| @ -580,4 +581,9 @@ public class WxMpServiceImpl implements WxMpService { | ||||
|     return this.dataCubeService; | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public WxMpUserBlackListService getBlackListService() { | ||||
|     return this.blackListService; | ||||
|   } | ||||
|  | ||||
| } | ||||
|  | ||||
| @ -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)); | ||||
|   } | ||||
| } | ||||
| @ -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); | ||||
|   } | ||||
| } | ||||
| @ -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() { | ||||
|  | ||||
| @ -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; | ||||
|   } | ||||
| } | ||||
| @ -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); | ||||
|   } | ||||
|  | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 miller
					miller