Skip to content

Commit 175bf9b

Browse files
committed
重构代码,将菜单管理相关的接口移到单独一个类中管理
1 parent a3fcaa0 commit 175bf9b

File tree

6 files changed

+165
-145
lines changed

6 files changed

+165
-145
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package me.chanjar.weixin.mp.api;
2+
3+
import me.chanjar.weixin.common.bean.WxMenu;
4+
import me.chanjar.weixin.common.exception.WxErrorException;
5+
import me.chanjar.weixin.mp.bean.kefu.request.WxMpKfAccountRequest;
6+
import me.chanjar.weixin.mp.bean.kefu.result.*;
7+
8+
import java.io.File;
9+
import java.util.Date;
10+
11+
/**
12+
* 菜单相关操作接口
13+
* @author Binary Wang
14+
*
15+
*/
16+
public interface WxMpMenuService {
17+
18+
/**
19+
* <pre>
20+
* 自定义菜单创建接口
21+
* 详情请见: http://mp.weixin.qq.com/wiki/index.php?title=自定义菜单创建接口
22+
* 如果要创建个性化菜单,请设置matchrule属性
23+
* 详情请见:http://mp.weixin.qq.com/wiki/0/c48ccd12b69ae023159b4bfaa7c39c20.html
24+
* </pre>
25+
*/
26+
public void menuCreate(WxMenu menu) throws WxErrorException;
27+
28+
/**
29+
* <pre>
30+
* 自定义菜单删除接口
31+
* 详情请见: http://mp.weixin.qq.com/wiki/index.php?title=自定义菜单删除接口
32+
* </pre>
33+
*/
34+
public void menuDelete() throws WxErrorException;
35+
36+
/**
37+
* <pre>
38+
* 删除个性化菜单接口
39+
* 详情请见: http://mp.weixin.qq.com/wiki/0/c48ccd12b69ae023159b4bfaa7c39c20.html
40+
* </pre>
41+
* @param menuid
42+
*/
43+
public void menuDelete(String menuid) throws WxErrorException;
44+
45+
/**
46+
* <pre>
47+
* 自定义菜单查询接口
48+
* 详情请见: http://mp.weixin.qq.com/wiki/index.php?title=自定义菜单查询接口
49+
* </pre>
50+
*/
51+
public WxMenu menuGet() throws WxErrorException;
52+
53+
/**
54+
* <pre>
55+
* 测试个性化菜单匹配结果
56+
* 详情请见: http://mp.weixin.qq.com/wiki/0/c48ccd12b69ae023159b4bfaa7c39c20.html
57+
* </pre>
58+
* @param userid 可以是粉丝的OpenID,也可以是粉丝的微信号。
59+
*/
60+
public WxMenu menuTryMatch(String userid) throws WxErrorException;
61+
62+
}

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java

Lines changed: 7 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,13 @@
11
package me.chanjar.weixin.mp.api;
22

33
import java.io.File;
4-
import java.io.IOException;
5-
import java.io.InputStream;
64
import java.text.SimpleDateFormat;
75
import java.util.Date;
86
import java.util.List;
97
import java.util.Map;
108

119
import me.chanjar.weixin.common.bean.WxCardApiSignature;
1210
import me.chanjar.weixin.common.bean.WxJsapiSignature;
13-
import me.chanjar.weixin.common.bean.WxMenu;
14-
import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
1511
import me.chanjar.weixin.common.exception.WxErrorException;
1612
import me.chanjar.weixin.common.util.http.RequestExecutor;
1713
import me.chanjar.weixin.mp.bean.WxMpCustomMessage;
@@ -22,20 +18,11 @@
2218
import me.chanjar.weixin.mp.bean.WxMpMassOpenIdsMessage;
2319
import me.chanjar.weixin.mp.bean.WxMpMassPreviewMessage;
2420
import me.chanjar.weixin.mp.bean.WxMpMassVideo;
25-
import me.chanjar.weixin.mp.bean.WxMpMaterial;
26-
import me.chanjar.weixin.mp.bean.WxMpMaterialArticleUpdate;
27-
import me.chanjar.weixin.mp.bean.WxMpMaterialNews;
2821
import me.chanjar.weixin.mp.bean.WxMpSemanticQuery;
2922
import me.chanjar.weixin.mp.bean.WxMpTemplateMessage;
30-
import me.chanjar.weixin.mp.bean.result.WxMediaImgUploadResult;
3123
import me.chanjar.weixin.mp.bean.result.WxMpCardResult;
3224
import me.chanjar.weixin.mp.bean.result.WxMpMassSendResult;
3325
import me.chanjar.weixin.mp.bean.result.WxMpMassUploadResult;
34-
import me.chanjar.weixin.mp.bean.result.WxMpMaterialCountResult;
35-
import me.chanjar.weixin.mp.bean.result.WxMpMaterialFileBatchGetResult;
36-
import me.chanjar.weixin.mp.bean.result.WxMpMaterialNewsBatchGetResult;
37-
import me.chanjar.weixin.mp.bean.result.WxMpMaterialUploadResult;
38-
import me.chanjar.weixin.mp.bean.result.WxMpMaterialVideoInfoResult;
3926
import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken;
4027
import me.chanjar.weixin.mp.bean.result.WxMpPayCallback;
4128
import me.chanjar.weixin.mp.bean.result.WxMpPayRefundResult;
@@ -161,50 +148,6 @@ public interface WxMpService {
161148
*/
162149
public WxMpMassSendResult massOpenIdsMessageSend(WxMpMassOpenIdsMessage message) throws WxErrorException;
163150

164-
/**
165-
* <pre>
166-
* 自定义菜单创建接口
167-
* 详情请见: http://mp.weixin.qq.com/wiki/index.php?title=自定义菜单创建接口
168-
* 如果要创建个性化菜单,请设置matchrule属性
169-
* 详情请见:http://mp.weixin.qq.com/wiki/0/c48ccd12b69ae023159b4bfaa7c39c20.html
170-
* </pre>
171-
*/
172-
public void menuCreate(WxMenu menu) throws WxErrorException;
173-
174-
/**
175-
* <pre>
176-
* 自定义菜单删除接口
177-
* 详情请见: http://mp.weixin.qq.com/wiki/index.php?title=自定义菜单删除接口
178-
* </pre>
179-
*/
180-
public void menuDelete() throws WxErrorException;
181-
182-
/**
183-
* <pre>
184-
* 删除个性化菜单接口
185-
* 详情请见: http://mp.weixin.qq.com/wiki/0/c48ccd12b69ae023159b4bfaa7c39c20.html
186-
* </pre>
187-
* @param menuid
188-
*/
189-
public void menuDelete(String menuid) throws WxErrorException;
190-
191-
/**
192-
* <pre>
193-
* 自定义菜单查询接口
194-
* 详情请见: http://mp.weixin.qq.com/wiki/index.php?title=自定义菜单查询接口
195-
* </pre>
196-
*/
197-
public WxMenu menuGet() throws WxErrorException;
198-
199-
/**
200-
* <pre>
201-
* 测试个性化菜单匹配结果
202-
* 详情请见: http://mp.weixin.qq.com/wiki/0/c48ccd12b69ae023159b4bfaa7c39c20.html
203-
* </pre>
204-
* @param userid 可以是粉丝的OpenID,也可以是粉丝的微信号。
205-
*/
206-
public WxMenu menuTryMatch(String userid) throws WxErrorException;
207-
208151
/**
209152
* <pre>
210153
* 分组管理接口 - 创建分组
@@ -760,11 +703,17 @@ public void markCardCode(String code, String cardId, String openId, boolean isMa
760703
WxMpKefuService getKefuService();
761704

762705
/**
763-
* 返回客服接口方法实现类,以方便调用个其各种接口
706+
* 返回素材相关接口的方法实现类,以方便调用个其各种接口
764707
* @return WxMpMaterialService
765708
*/
766709
WxMpMaterialService getMaterialService();
767710

711+
/**
712+
* 返回素材相关接口的方法实现类,以方便调用个其各种接口
713+
* @return WxMpMenuService
714+
*/
715+
WxMpMenuService getMenuService();
716+
768717
/**
769718
* 获取WxMpConfigStorage 对象
770719
* @return WxMpConfigStorage

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java

Lines changed: 10 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import java.io.File;
44
import java.io.IOException;
5-
import java.io.InputStream;
65
import java.io.StringReader;
76
import java.io.UnsupportedEncodingException;
87
import java.net.URLEncoder;
@@ -16,9 +15,7 @@
1615
import java.util.Map.Entry;
1716
import java.util.SortedMap;
1817
import java.util.TreeMap;
19-
import java.util.UUID;
2018

21-
import me.chanjar.weixin.mp.api.impl.WxMpMaterialServiceImpl;
2219
import org.apache.http.Consts;
2320
import org.apache.http.HttpHost;
2421
import org.apache.http.client.ClientProtocolException;
@@ -44,33 +41,28 @@
4441
import com.google.gson.stream.JsonReader;
4542
import com.thoughtworks.xstream.XStream;
4643

47-
import me.chanjar.weixin.common.api.WxConsts;
4844
import me.chanjar.weixin.common.bean.WxAccessToken;
4945
import me.chanjar.weixin.common.bean.WxCardApiSignature;
5046
import me.chanjar.weixin.common.bean.WxJsapiSignature;
51-
import me.chanjar.weixin.common.bean.WxMenu;
5247
import me.chanjar.weixin.common.bean.result.WxError;
53-
import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
5448
import me.chanjar.weixin.common.exception.WxErrorException;
5549
import me.chanjar.weixin.common.session.StandardSessionManager;
5650
import me.chanjar.weixin.common.session.WxSessionManager;
5751
import me.chanjar.weixin.common.util.RandomUtils;
5852
import me.chanjar.weixin.common.util.crypto.SHA1;
5953
import me.chanjar.weixin.common.util.crypto.WxCryptUtil;
60-
import me.chanjar.weixin.common.util.fs.FileUtils;
6154
import me.chanjar.weixin.common.util.http.ApacheHttpClientBuilder;
6255
import me.chanjar.weixin.common.util.http.DefaultApacheHttpHttpClientBuilder;
63-
import me.chanjar.weixin.common.util.http.MediaDownloadRequestExecutor;
64-
import me.chanjar.weixin.common.util.http.MediaUploadRequestExecutor;
6556
import me.chanjar.weixin.common.util.http.RequestExecutor;
6657
import me.chanjar.weixin.common.util.http.SimpleGetRequestExecutor;
6758
import me.chanjar.weixin.common.util.http.SimplePostRequestExecutor;
6859
import me.chanjar.weixin.common.util.http.URIUtil;
6960
import me.chanjar.weixin.common.util.http.Utf8ResponseHandler;
7061
import me.chanjar.weixin.common.util.json.GsonHelper;
71-
import me.chanjar.weixin.common.util.json.WxGsonBuilder;
7262
import me.chanjar.weixin.common.util.xml.XStreamInitializer;
7363
import me.chanjar.weixin.mp.api.impl.WxMpKefuServiceImpl;
64+
import me.chanjar.weixin.mp.api.impl.WxMpMaterialServiceImpl;
65+
import me.chanjar.weixin.mp.api.impl.WxMpMenuServiceImpl;
7466
import me.chanjar.weixin.mp.bean.WxMpCustomMessage;
7567
import me.chanjar.weixin.mp.bean.WxMpGroup;
7668
import me.chanjar.weixin.mp.bean.WxMpIndustry;
@@ -79,20 +71,11 @@
7971
import me.chanjar.weixin.mp.bean.WxMpMassOpenIdsMessage;
8072
import me.chanjar.weixin.mp.bean.WxMpMassPreviewMessage;
8173
import me.chanjar.weixin.mp.bean.WxMpMassVideo;
82-
import me.chanjar.weixin.mp.bean.WxMpMaterial;
83-
import me.chanjar.weixin.mp.bean.WxMpMaterialArticleUpdate;
84-
import me.chanjar.weixin.mp.bean.WxMpMaterialNews;
8574
import me.chanjar.weixin.mp.bean.WxMpSemanticQuery;
8675
import me.chanjar.weixin.mp.bean.WxMpTemplateMessage;
87-
import me.chanjar.weixin.mp.bean.result.WxMediaImgUploadResult;
8876
import me.chanjar.weixin.mp.bean.result.WxMpCardResult;
8977
import me.chanjar.weixin.mp.bean.result.WxMpMassSendResult;
9078
import me.chanjar.weixin.mp.bean.result.WxMpMassUploadResult;
91-
import me.chanjar.weixin.mp.bean.result.WxMpMaterialCountResult;
92-
import me.chanjar.weixin.mp.bean.result.WxMpMaterialFileBatchGetResult;
93-
import me.chanjar.weixin.mp.bean.result.WxMpMaterialNewsBatchGetResult;
94-
import me.chanjar.weixin.mp.bean.result.WxMpMaterialUploadResult;
95-
import me.chanjar.weixin.mp.bean.result.WxMpMaterialVideoInfoResult;
9679
import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken;
9780
import me.chanjar.weixin.mp.bean.result.WxMpPayCallback;
9881
import me.chanjar.weixin.mp.bean.result.WxMpPayRefundResult;
@@ -105,12 +88,6 @@
10588
import me.chanjar.weixin.mp.bean.result.WxMpUserList;
10689
import me.chanjar.weixin.mp.bean.result.WxMpUserSummary;
10790
import me.chanjar.weixin.mp.bean.result.WxRedpackResult;
108-
import me.chanjar.weixin.mp.util.http.MaterialDeleteRequestExecutor;
109-
import me.chanjar.weixin.mp.util.http.MaterialNewsInfoRequestExecutor;
110-
import me.chanjar.weixin.mp.util.http.MaterialUploadRequestExecutor;
111-
import me.chanjar.weixin.mp.util.http.MaterialVideoInfoRequestExecutor;
112-
import me.chanjar.weixin.mp.util.http.MaterialVoiceAndImageDownloadRequestExecutor;
113-
import me.chanjar.weixin.mp.util.http.MediaImgUploadRequestExecutor;
11491
import me.chanjar.weixin.mp.util.http.QrCodeRequestExecutor;
11592
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
11693

@@ -139,6 +116,8 @@ public class WxMpServiceImpl implements WxMpService {
139116

140117
protected WxMpMaterialService materialService = new WxMpMaterialServiceImpl(this);
141118

119+
protected WxMpMenuService menuService = new WxMpMenuServiceImpl(this);
120+
142121
protected CloseableHttpClient httpClient;
143122

144123
protected HttpHost httpProxy;
@@ -259,59 +238,6 @@ public void customMessageSend(WxMpCustomMessage message) throws WxErrorException
259238
execute(new SimplePostRequestExecutor(), url, message.toJson());
260239
}
261240

262-
@Override
263-
public void menuCreate(WxMenu menu) throws WxErrorException {
264-
if (menu.getMatchRule() != null) {
265-
String url = "https://api.weixin.qq.com/cgi-bin/menu/addconditional";
266-
execute(new SimplePostRequestExecutor(), url, menu.toJson());
267-
} else {
268-
String url = "https://api.weixin.qq.com/cgi-bin/menu/create";
269-
execute(new SimplePostRequestExecutor(), url, menu.toJson());
270-
}
271-
}
272-
273-
@Override
274-
public void menuDelete() throws WxErrorException {
275-
String url = "https://api.weixin.qq.com/cgi-bin/menu/delete";
276-
execute(new SimpleGetRequestExecutor(), url, null);
277-
}
278-
279-
@Override
280-
public void menuDelete(String menuid) throws WxErrorException {
281-
String url = "https://api.weixin.qq.com/cgi-bin/menu/delconditional";
282-
execute(new SimpleGetRequestExecutor(), url, "menuid=" + menuid);
283-
}
284-
285-
@Override
286-
public WxMenu menuGet() throws WxErrorException {
287-
String url = "https://api.weixin.qq.com/cgi-bin/menu/get";
288-
try {
289-
String resultContent = execute(new SimpleGetRequestExecutor(), url, null);
290-
return WxMenu.fromJson(resultContent);
291-
} catch (WxErrorException e) {
292-
// 46003 不存在的菜单数据
293-
if (e.getError().getErrorCode() == 46003) {
294-
return null;
295-
}
296-
throw e;
297-
}
298-
}
299-
300-
@Override
301-
public WxMenu menuTryMatch(String userid) throws WxErrorException {
302-
String url = "https://api.weixin.qq.com/cgi-bin/menu/trymatch";
303-
try {
304-
String resultContent = execute(new SimpleGetRequestExecutor(), url, "user_id=" + userid);
305-
return WxMenu.fromJson(resultContent);
306-
} catch (WxErrorException e) {
307-
// 46003 不存在的菜单数据 46002 不存在的菜单版本
308-
if (e.getError().getErrorCode() == 46003 || e.getError().getErrorCode() == 46002) {
309-
return null;
310-
}
311-
throw e;
312-
}
313-
}
314-
315241
@Override
316242
public WxMpMassUploadResult massNewsUpload(WxMpMassNews news) throws WxErrorException {
317243
String url = "https://api.weixin.qq.com/cgi-bin/media/uploadnews";
@@ -1323,5 +1249,10 @@ public WxMpKefuService getKefuService() {
13231249
public WxMpMaterialService getMaterialService() {
13241250
return this.materialService;
13251251
}
1326-
1252+
1253+
@Override
1254+
public WxMpMenuService getMenuService() {
1255+
return this.menuService;
1256+
}
1257+
13271258
}

0 commit comments

Comments
 (0)