diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java
index 952cf8f5d..8816b34d5 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java
+++ b/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();
 }
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpUserBlackListService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpUserBlackListService.java
new file mode 100644
index 000000000..17dd5821e
--- /dev/null
+++ b/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 {
+  /**
+   * 
+   * 获取公众号的黑名单列表
+   * 详情请见http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1471422259_pJMWA&token=&lang=zh_CN
+   * 
+   */
+  WxMpUserBlackListGetResult blackList(String nextOpenid) throws WxErrorException;
+
+  /**
+   * 
+   *   拉黑用户
+   *   详情请见http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1471422259_pJMWA&token=&lang=zh_CN
+   * 
+   */
+  void pushToBlackList(List openIdList) throws WxErrorException;
+
+  /**
+   * 
+   *   取消拉黑用户
+   *   详情请见http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1471422259_pJMWA&token=&lang=zh_CN
+   * 
+   */
+  void pullFromBlackList(List openIdList) throws WxErrorException;
+}
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceImpl.java
index 3f2c9808b..96031b6c0 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceImpl.java
+++ b/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;
+  }
+
 }
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserBlackListServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserBlackListServiceImpl.java
new file mode 100644
index 000000000..d749ed8c7
--- /dev/null
+++ b/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 openIdList) throws WxErrorException {
+    Map 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 openIdList) throws WxErrorException {
+    Map 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));
+  }
+}
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpUserBlackListGetResult.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpUserBlackListGetResult.java
new file mode 100644
index 000000000..12a48e3da
--- /dev/null
+++ b/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 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 getOpenIds() {
+    return this.openIds;
+  }
+
+  public void setOpenIds(List 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);
+  }
+}
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java
index bf920fff3..4152a8da5 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java
+++ b/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() {
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxUserBlackListGetResultGsonAdapter.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxUserBlackListGetResultGsonAdapter.java
new file mode 100644
index 000000000..5f68f12ae
--- /dev/null
+++ b/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 {
+  @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;
+  }
+}
diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpUserBlackListServiceImplTest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpUserBlackListServiceImplTest.java
new file mode 100644
index 000000000..b511f5e78
--- /dev/null
+++ b/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 openIdList = new ArrayList<>();
+    openIdList.add(TEST_OPENID);
+    this.wxService.getBlackListService().pushToBlackList(openIdList);
+  }
+
+  @Test
+  public void testPullFromBlackList() throws Exception {
+    List openIdList = new ArrayList<>();
+    openIdList.add(TEST_OPENID);
+    this.wxService.getBlackListService().pullFromBlackList(openIdList);
+  }
+
+}