Skip to content

Commit 0196764

Browse files
arbingbinarywang
authored andcommitted
#1129 新增小程序插件管理相关接口
1 parent 364aa05 commit 0196764

File tree

6 files changed

+196
-1
lines changed

6 files changed

+196
-1
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package cn.binarywang.wx.miniapp.api;
2+
3+
import cn.binarywang.wx.miniapp.bean.WxMaPluginListResult;
4+
import me.chanjar.weixin.common.error.WxErrorException;
5+
6+
/**
7+
* 小程序插件管理 API
8+
* <p>
9+
* 详情请见:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/plugin-management/pluginManager.applyPlugin.html
10+
* 或者:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/Mini_Programs/Plug-ins_Management.html
11+
*/
12+
public interface WxMaPluginService {
13+
14+
String PLUGIN_URL = "https://api.weixin.qq.com/wxa/plugin";
15+
16+
/**
17+
* 向插件开发者发起使用插件的申请
18+
*
19+
* @param pluginAppId 插件 appId
20+
* @param reason 申请使用理由
21+
* @throws WxErrorException 异常
22+
*/
23+
void applyPlugin(String pluginAppId, String reason) throws WxErrorException;
24+
25+
/**
26+
* 查询已添加的插件
27+
*
28+
* @return
29+
* @throws WxErrorException
30+
*/
31+
WxMaPluginListResult getPluginList() throws WxErrorException;
32+
33+
/**
34+
* 删除已添加的插件
35+
*
36+
* @param pluginAppId 插件 appId
37+
* @throws WxErrorException
38+
*/
39+
void unbindPlugin(String pluginAppId) throws WxErrorException;
40+
41+
/**
42+
* 快速更新插件版本号(第三方平台代小程序管理插件)
43+
*
44+
* @param pluginAppId 插件 appid
45+
* @param userVersion 升级至版本号,要求此插件版本支持快速更新
46+
* @throws WxErrorException
47+
*/
48+
void updatePlugin(String pluginAppId, String userVersion) throws WxErrorException;
49+
50+
}

weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,13 @@ public interface WxMaService {
207207
*/
208208
WxMaSecCheckService getSecCheckService();
209209

210+
/**
211+
* 返回插件相关接口服务对象.
212+
*
213+
* @return WxMaPluginService
214+
*/
215+
WxMaPluginService getPluginService();
216+
210217
/**
211218
* 初始化http请求对象.
212219
*/
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package cn.binarywang.wx.miniapp.api.impl;
2+
3+
import cn.binarywang.wx.miniapp.api.WxMaPluginService;
4+
import cn.binarywang.wx.miniapp.api.WxMaService;
5+
import cn.binarywang.wx.miniapp.bean.WxMaPluginListResult;
6+
import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
7+
import me.chanjar.weixin.common.error.WxErrorException;
8+
9+
import java.util.HashMap;
10+
import java.util.Map;
11+
12+
public class WxMaPluginServiceImpl implements WxMaPluginService {
13+
14+
private WxMaService wxMaService;
15+
16+
public WxMaPluginServiceImpl(WxMaService wxMaService) {
17+
this.wxMaService = wxMaService;
18+
}
19+
20+
@Override
21+
public void applyPlugin(String pluginAppId, String reason) throws WxErrorException {
22+
Map<String, String> params = new HashMap<>();
23+
params.put("action", "apply");
24+
params.put("plugin_appid", pluginAppId);
25+
params.put("reason", reason);
26+
27+
this.wxMaService.post(PLUGIN_URL, WxMaGsonBuilder.create().toJson(params));
28+
}
29+
30+
@Override
31+
public WxMaPluginListResult getPluginList() throws WxErrorException {
32+
Map<String, String> params = new HashMap<>();
33+
params.put("action", "list");
34+
35+
String responseContent = this.wxMaService.post(PLUGIN_URL, WxMaGsonBuilder.create().toJson(params));
36+
return WxMaPluginListResult.fromJson(responseContent);
37+
}
38+
39+
@Override
40+
public void unbindPlugin(String pluginAppId) throws WxErrorException {
41+
Map<String, String> params = new HashMap<>();
42+
params.put("action", "unbind");
43+
params.put("plugin_appid", pluginAppId);
44+
45+
this.wxMaService.post(PLUGIN_URL, WxMaGsonBuilder.create().toJson(params));
46+
}
47+
48+
@Override
49+
public void updatePlugin(String pluginAppId, String userVersion) throws WxErrorException {
50+
Map<String, String> params = new HashMap<>();
51+
params.put("action", "update");
52+
params.put("plugin_appid", pluginAppId);
53+
params.put("user_version", userVersion);
54+
55+
this.wxMaService.post(PLUGIN_URL, WxMaGsonBuilder.create().toJson(params));
56+
}
57+
}

weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceImpl.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public class WxMaServiceImpl implements WxMaService, RequestHttp<CloseableHttpCl
5353
private WxMaShareService shareService = new WxMaShareServiceImpl(this);
5454
private WxMaRunService runService = new WxMaRunServiceImpl(this);
5555
private WxMaSecCheckService secCheckService = new WxMaSecCheckServiceImpl(this);
56+
private WxMaPluginService pluginService = new WxMaPluginServiceImpl(this);
5657

5758
private int retrySleepMillis = 1000;
5859
private int maxRetryTimes = 5;
@@ -124,7 +125,7 @@ public String getAccessToken(boolean forceRefresh) throws WxErrorException {
124125
}
125126
WxAccessToken accessToken = WxAccessToken.fromJson(resultContent);
126127
this.getWxMaConfig().updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn());
127-
128+
128129
return this.getWxMaConfig().getAccessToken();
129130
} finally {
130131
httpGet.releaseConnection();
@@ -359,4 +360,9 @@ public WxMaRunService getRunService() {
359360
public WxMaSecCheckService getSecCheckService() {
360361
return this.secCheckService;
361362
}
363+
364+
@Override
365+
public WxMaPluginService getPluginService() {
366+
return this.pluginService;
367+
}
362368
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package cn.binarywang.wx.miniapp.bean;
2+
3+
import com.google.gson.annotations.SerializedName;
4+
import lombok.Data;
5+
import me.chanjar.weixin.common.util.json.WxGsonBuilder;
6+
7+
import java.io.Serializable;
8+
import java.util.List;
9+
10+
@Data
11+
public class WxMaPluginListResult implements Serializable {
12+
13+
private static final long serialVersionUID = -5898572369543593656L;
14+
15+
@SerializedName("plugin_list")
16+
private List<PluginInfo> pluginList;
17+
18+
public static WxMaPluginListResult fromJson(String json) {
19+
return WxGsonBuilder.create().fromJson(json, WxMaPluginListResult.class);
20+
}
21+
22+
@Data
23+
public static class PluginInfo {
24+
25+
@SerializedName("appid")
26+
private String appId;
27+
28+
private String status;
29+
30+
@SerializedName("nickname")
31+
private String nickName;
32+
33+
@SerializedName("headimgurl")
34+
private String headImgUrl;
35+
}
36+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package cn.binarywang.wx.miniapp.api.impl;
2+
3+
import cn.binarywang.wx.miniapp.api.WxMaService;
4+
import cn.binarywang.wx.miniapp.bean.WxMaPluginListResult;
5+
import cn.binarywang.wx.miniapp.test.ApiTestModule;
6+
import com.google.inject.Inject;
7+
import org.testng.annotations.Guice;
8+
import org.testng.annotations.Test;
9+
10+
import static org.testng.Assert.assertNotNull;
11+
12+
@Test
13+
@Guice(modules = ApiTestModule.class)
14+
public class WxMaPluginServiceImplTest {
15+
@Inject
16+
private WxMaService wxService;
17+
18+
@Test
19+
public void testApplyPlugin() throws Exception {
20+
this.wxService.getPluginService().applyPlugin("wx4418e3e031e551be", null);
21+
}
22+
23+
@Test
24+
public void testGetPluginList() throws Exception {
25+
WxMaPluginListResult result = this.wxService.getPluginService().getPluginList();
26+
assertNotNull(result);
27+
System.out.println(result.toString());
28+
}
29+
30+
@Test
31+
public void testUnbindPlugin() throws Exception {
32+
this.wxService.getPluginService().unbindPlugin("wx4418e3e031e551be");
33+
}
34+
35+
@Test
36+
public void testUpdatePlugin() throws Exception {
37+
this.wxService.getPluginService().updatePlugin("wx4418e3e031e551be", "2.0.2");
38+
}
39+
}

0 commit comments

Comments
 (0)