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"); + } +}