diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaPluginService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaPluginService.java
new file mode 100644
index 00000000..83e2b1c5
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaPluginService.java
@@ -0,0 +1,50 @@
+package cn.binarywang.wx.miniapp.api;
+
+import cn.binarywang.wx.miniapp.bean.WxMaPluginListResult;
+import me.chanjar.weixin.common.error.WxErrorException;
+
+/**
+ * 小程序插件管理 API
+ *
+ * 详情请见:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/plugin-management/pluginManager.applyPlugin.html
+ * 或者:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/Mini_Programs/Plug-ins_Management.html
+ */
+public interface WxMaPluginService {
+
+ String PLUGIN_URL = "https://api.weixin.qq.com/wxa/plugin";
+
+ /**
+ * 向插件开发者发起使用插件的申请
+ *
+ * @param pluginAppId 插件 appId
+ * @param reason 申请使用理由
+ * @throws WxErrorException 异常
+ */
+ void applyPlugin(String pluginAppId, String reason) throws WxErrorException;
+
+ /**
+ * 查询已添加的插件
+ *
+ * @return
+ * @throws WxErrorException
+ */
+ WxMaPluginListResult getPluginList() throws WxErrorException;
+
+ /**
+ * 删除已添加的插件
+ *
+ * @param pluginAppId 插件 appId
+ * @throws WxErrorException
+ */
+ void unbindPlugin(String pluginAppId) throws WxErrorException;
+
+ /**
+ * 快速更新插件版本号(第三方平台代小程序管理插件)
+ *
+ * @param pluginAppId 插件 appid
+ * @param userVersion 升级至版本号,要求此插件版本支持快速更新
+ * @throws WxErrorException
+ */
+ void updatePlugin(String pluginAppId, String userVersion) throws WxErrorException;
+
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java
index 578acc56..52988f36 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java
@@ -207,6 +207,13 @@ public interface WxMaService {
*/
WxMaSecCheckService getSecCheckService();
+ /**
+ * 返回插件相关接口服务对象.
+ *
+ * @return WxMaPluginService
+ */
+ WxMaPluginService getPluginService();
+
/**
* 初始化http请求对象.
*/
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaPluginServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaPluginServiceImpl.java
new file mode 100644
index 00000000..052a0caa
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaPluginServiceImpl.java
@@ -0,0 +1,57 @@
+package cn.binarywang.wx.miniapp.api.impl;
+
+import cn.binarywang.wx.miniapp.api.WxMaPluginService;
+import cn.binarywang.wx.miniapp.api.WxMaService;
+import cn.binarywang.wx.miniapp.bean.WxMaPluginListResult;
+import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
+import me.chanjar.weixin.common.error.WxErrorException;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class WxMaPluginServiceImpl implements WxMaPluginService {
+
+ private WxMaService wxMaService;
+
+ public WxMaPluginServiceImpl(WxMaService wxMaService) {
+ this.wxMaService = wxMaService;
+ }
+
+ @Override
+ public void applyPlugin(String pluginAppId, String reason) throws WxErrorException {
+ Map params = new HashMap<>();
+ params.put("action", "apply");
+ params.put("plugin_appid", pluginAppId);
+ params.put("reason", reason);
+
+ this.wxMaService.post(PLUGIN_URL, WxMaGsonBuilder.create().toJson(params));
+ }
+
+ @Override
+ public WxMaPluginListResult getPluginList() throws WxErrorException {
+ Map params = new HashMap<>();
+ params.put("action", "list");
+
+ String responseContent = this.wxMaService.post(PLUGIN_URL, WxMaGsonBuilder.create().toJson(params));
+ return WxMaPluginListResult.fromJson(responseContent);
+ }
+
+ @Override
+ public void unbindPlugin(String pluginAppId) throws WxErrorException {
+ Map params = new HashMap<>();
+ params.put("action", "unbind");
+ params.put("plugin_appid", pluginAppId);
+
+ this.wxMaService.post(PLUGIN_URL, WxMaGsonBuilder.create().toJson(params));
+ }
+
+ @Override
+ public void updatePlugin(String pluginAppId, String userVersion) throws WxErrorException {
+ Map params = new HashMap<>();
+ params.put("action", "update");
+ params.put("plugin_appid", pluginAppId);
+ params.put("user_version", userVersion);
+
+ this.wxMaService.post(PLUGIN_URL, WxMaGsonBuilder.create().toJson(params));
+ }
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceImpl.java
index d4f97218..797dc6b9 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceImpl.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceImpl.java
@@ -53,6 +53,7 @@ public class WxMaServiceImpl implements WxMaService, RequestHttp pluginList;
+
+ public static WxMaPluginListResult fromJson(String json) {
+ return WxGsonBuilder.create().fromJson(json, WxMaPluginListResult.class);
+ }
+
+ @Data
+ public static class PluginInfo {
+
+ @SerializedName("appid")
+ private String appId;
+
+ private String status;
+
+ @SerializedName("nickname")
+ private String nickName;
+
+ @SerializedName("headimgurl")
+ private String headImgUrl;
+ }
+}
diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaPluginServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaPluginServiceImplTest.java
new file mode 100644
index 00000000..ef5882e8
--- /dev/null
+++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaPluginServiceImplTest.java
@@ -0,0 +1,39 @@
+package cn.binarywang.wx.miniapp.api.impl;
+
+import cn.binarywang.wx.miniapp.api.WxMaService;
+import cn.binarywang.wx.miniapp.bean.WxMaPluginListResult;
+import cn.binarywang.wx.miniapp.test.ApiTestModule;
+import com.google.inject.Inject;
+import org.testng.annotations.Guice;
+import org.testng.annotations.Test;
+
+import static org.testng.Assert.assertNotNull;
+
+@Test
+@Guice(modules = ApiTestModule.class)
+public class WxMaPluginServiceImplTest {
+ @Inject
+ private WxMaService wxService;
+
+ @Test
+ public void testApplyPlugin() throws Exception {
+ this.wxService.getPluginService().applyPlugin("wx4418e3e031e551be", null);
+ }
+
+ @Test
+ public void testGetPluginList() throws Exception {
+ WxMaPluginListResult result = this.wxService.getPluginService().getPluginList();
+ assertNotNull(result);
+ System.out.println(result.toString());
+ }
+
+ @Test
+ public void testUnbindPlugin() throws Exception {
+ this.wxService.getPluginService().unbindPlugin("wx4418e3e031e551be");
+ }
+
+ @Test
+ public void testUpdatePlugin() throws Exception {
+ this.wxService.getPluginService().updatePlugin("wx4418e3e031e551be", "2.0.2");
+ }
+}