Skip to content

Commit 06a1726

Browse files
committed
🆕 #1983 【微信公众号】增加订阅通知相关接口
1 parent fa179f6 commit 06a1726

File tree

15 files changed

+336
-58
lines changed

15 files changed

+336
-58
lines changed

weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/subscribemsg/CategoryData.java weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/subscribemsg/CategoryData.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package cn.binarywang.wx.miniapp.bean.subscribemsg;
1+
package me.chanjar.weixin.common.bean.subscribemsg;
22

33
import lombok.Data;
44

weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/subscribemsg/PubTemplateKeyword.java weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/subscribemsg/PubTemplateKeyword.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package cn.binarywang.wx.miniapp.bean.subscribemsg;
1+
package me.chanjar.weixin.common.bean.subscribemsg;
22

33
import lombok.Data;
44

weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/template/WxMaPubTemplateTitleListResult.java weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/subscribemsg/PubTemplateTitleListResult.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package cn.binarywang.wx.miniapp.bean.template;
1+
package me.chanjar.weixin.common.bean.subscribemsg;
22

33
import lombok.Data;
44
import me.chanjar.weixin.common.util.json.WxGsonBuilder;
@@ -10,15 +10,15 @@
1010
* @author ArBing
1111
*/
1212
@Data
13-
public class WxMaPubTemplateTitleListResult implements Serializable {
13+
public class PubTemplateTitleListResult implements Serializable {
1414
private static final long serialVersionUID = -7718911668757837527L;
1515

1616
private int count;
1717

1818
private List<TemplateItem> data;
1919

20-
public static WxMaPubTemplateTitleListResult fromJson(String json) {
21-
return WxGsonBuilder.create().fromJson(json, WxMaPubTemplateTitleListResult.class);
20+
public static PubTemplateTitleListResult fromJson(String json) {
21+
return WxGsonBuilder.create().fromJson(json, PubTemplateTitleListResult.class);
2222
}
2323

2424
@Data

weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/subscribemsg/TemplateInfo.java weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/subscribemsg/TemplateInfo.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package cn.binarywang.wx.miniapp.bean.subscribemsg;
1+
package me.chanjar.weixin.common.bean.subscribemsg;
22

33
import lombok.Data;
44

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

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package cn.binarywang.wx.miniapp.api;
22

33
import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage;
4-
import cn.binarywang.wx.miniapp.bean.subscribemsg.CategoryData;
5-
import cn.binarywang.wx.miniapp.bean.subscribemsg.PubTemplateKeyword;
6-
import cn.binarywang.wx.miniapp.bean.subscribemsg.TemplateInfo;
7-
import cn.binarywang.wx.miniapp.bean.template.WxMaPubTemplateTitleListResult;
4+
import me.chanjar.weixin.common.bean.subscribemsg.CategoryData;
5+
import me.chanjar.weixin.common.bean.subscribemsg.PubTemplateKeyword;
6+
import me.chanjar.weixin.common.bean.subscribemsg.TemplateInfo;
7+
import me.chanjar.weixin.common.bean.subscribemsg.PubTemplateTitleListResult;
88
import me.chanjar.weixin.common.error.WxErrorException;
99

1010
import java.util.List;
@@ -31,7 +31,7 @@ public interface WxMaSubscribeService {
3131
* @return .
3232
* @throws WxErrorException .
3333
*/
34-
WxMaPubTemplateTitleListResult getPubTemplateTitleList(String[] ids, int start, int limit) throws WxErrorException;
34+
PubTemplateTitleListResult getPubTemplateTitleList(String[] ids, int start, int limit) throws WxErrorException;
3535

3636
/**
3737
* <pre>

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

+6-6
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
import cn.binarywang.wx.miniapp.api.WxMaService;
44
import cn.binarywang.wx.miniapp.api.WxMaSubscribeService;
55
import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage;
6-
import cn.binarywang.wx.miniapp.bean.subscribemsg.CategoryData;
7-
import cn.binarywang.wx.miniapp.bean.subscribemsg.PubTemplateKeyword;
8-
import cn.binarywang.wx.miniapp.bean.subscribemsg.TemplateInfo;
9-
import cn.binarywang.wx.miniapp.bean.template.WxMaPubTemplateTitleListResult;
6+
import me.chanjar.weixin.common.bean.subscribemsg.CategoryData;
7+
import me.chanjar.weixin.common.bean.subscribemsg.PubTemplateKeyword;
8+
import me.chanjar.weixin.common.bean.subscribemsg.TemplateInfo;
9+
import me.chanjar.weixin.common.bean.subscribemsg.PubTemplateTitleListResult;
1010
import cn.binarywang.wx.miniapp.constant.WxMaConstants;
1111
import cn.binarywang.wx.miniapp.json.WxMaGsonBuilder;
1212
import com.google.common.base.Joiner;
@@ -34,12 +34,12 @@ public class WxMaSubscribeServiceImpl implements WxMaSubscribeService {
3434
private final WxMaService service;
3535

3636
@Override
37-
public WxMaPubTemplateTitleListResult getPubTemplateTitleList(String[] ids, int start, int limit) throws WxErrorException {
37+
public PubTemplateTitleListResult getPubTemplateTitleList(String[] ids, int start, int limit) throws WxErrorException {
3838
ImmutableMap<String, ? extends Serializable> params = ImmutableMap.of("ids", StringUtils.join(ids, ","),
3939
"start", start, "limit", limit);
4040
String responseText = this.service.get(GET_PUB_TEMPLATE_TITLE_LIST_URL,
4141
Joiner.on("&").withKeyValueSeparator("=").join(params));
42-
return WxMaPubTemplateTitleListResult.fromJson(responseText);
42+
return PubTemplateTitleListResult.fromJson(responseText);
4343
}
4444

4545
@Override

weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaSubscribeServiceImplTest.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package cn.binarywang.wx.miniapp.api.impl;
22

33
import cn.binarywang.wx.miniapp.api.WxMaService;
4-
import cn.binarywang.wx.miniapp.bean.subscribemsg.CategoryData;
5-
import cn.binarywang.wx.miniapp.bean.subscribemsg.PubTemplateKeyword;
6-
import cn.binarywang.wx.miniapp.bean.subscribemsg.TemplateInfo;
7-
import cn.binarywang.wx.miniapp.bean.template.WxMaPubTemplateTitleListResult;
4+
import me.chanjar.weixin.common.bean.subscribemsg.CategoryData;
5+
import me.chanjar.weixin.common.bean.subscribemsg.PubTemplateKeyword;
6+
import me.chanjar.weixin.common.bean.subscribemsg.TemplateInfo;
7+
import me.chanjar.weixin.common.bean.subscribemsg.PubTemplateTitleListResult;
88
import cn.binarywang.wx.miniapp.test.ApiTestModule;
99
import com.google.common.collect.Lists;
1010
import com.google.inject.Inject;
@@ -30,7 +30,7 @@ public class WxMaSubscribeServiceImplTest {
3030

3131
@Test
3232
public void testGetPubTemplateTitleList() throws WxErrorException {
33-
WxMaPubTemplateTitleListResult result = this.wxService.getSubscribeService().getPubTemplateTitleList(new String[]{"2", "616"}, 0, 30);
33+
PubTemplateTitleListResult result = this.wxService.getSubscribeService().getPubTemplateTitleList(new String[]{"2", "616"}, 0, 30);
3434
System.out.println(result);
3535

3636
}

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

+10
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,16 @@ public interface WxMpService extends WxService {
259259
*/
260260
String post(WxMpApiUrl url, String postData) throws WxErrorException;
261261

262+
/**
263+
* 当本Service没有实现某个API的时候,可以用这个,针对所有微信API中的POST请求.
264+
*
265+
* @param url 请求接口地址
266+
* @param obj 请求参数
267+
* @return 接口响应字符串 string
268+
* @throws WxErrorException 异常
269+
*/
270+
String post(WxMpApiUrl url, Object obj) throws WxErrorException;
271+
262272
/**
263273
* 当本Service没有实现某个API的时候,可以用这个,针对所有微信API中的POST请求.
264274
*
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,21 @@
11
package me.chanjar.weixin.mp.api;
22

3+
import me.chanjar.weixin.common.bean.subscribemsg.CategoryData;
4+
import me.chanjar.weixin.common.bean.subscribemsg.PubTemplateKeyword;
5+
import me.chanjar.weixin.common.bean.subscribemsg.PubTemplateTitleListResult;
6+
import me.chanjar.weixin.common.bean.subscribemsg.TemplateInfo;
37
import me.chanjar.weixin.common.error.WxErrorException;
48
import me.chanjar.weixin.mp.bean.subscribe.WxMpSubscribeMessage;
59

10+
import java.util.List;
11+
612
/**
713
* <pre>
8-
* 一次性订阅消息接口
9-
* https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1500374289_66bvB
14+
* 订阅消息服务接口
1015
* </pre>
1116
*
1217
* @author Mklaus
13-
* @date 2018-01-22 上午11:07
18+
* @date 2018 -01-22 上午11:07
1419
*/
1520
public interface WxMpSubscribeMsgService {
1621
/**
@@ -20,9 +25,9 @@ public interface WxMpSubscribeMsgService {
2025
* </pre>
2126
*
2227
* @param redirectURI 用户授权完成后的重定向链接,无需urlencode, 方法内会进行encode
23-
* @param scene 重定向后会带上scene参数,开发者可以填0-10000的整形值,用来标识订阅场景值
24-
* @param reserved 用于保持请求和回调的状态,授权请后原样带回给第三方 (最多128字节,要求做urlencode)
25-
* @return url
28+
* @param scene 重定向后会带上scene参数,开发者可以填0-10000的整形值,用来标识订阅场景值
29+
* @param reserved 用于保持请求和回调的状态,授权请后原样带回给第三方 (最多128字节,要求做urlencode)
30+
* @return url string
2631
*/
2732
String subscribeMsgAuthorizationUrl(String redirectURI, int scene, String reserved);
2833

@@ -32,8 +37,106 @@ public interface WxMpSubscribeMsgService {
3237
* 详情请见: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1500374289_66bvB
3338
* </pre>
3439
*
35-
* @return 消息Id
40+
* @param message the message
41+
* @return 消息Id boolean
42+
* @throws WxErrorException the wx error exception
43+
*/
44+
boolean sendOnce(WxMpSubscribeMessage message) throws WxErrorException;
45+
46+
/**
47+
* <pre>
48+
* 获取帐号所属类目下的公共模板标题
49+
*
50+
* 详情请见: <a href="https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.getPubTemplateTitleList.html">获取帐号所属类目下的公共模板标题</a>
51+
* 接口url格式: https://api.weixin.qq.com/wxaapi/newtmpl/getpubtemplatetitles?access_token=ACCESS_TOKEN
52+
* </pre>
53+
*
54+
* @param ids 类目 id,多个用逗号隔开
55+
* @param start 用于分页,表示从 start 开始。从 0 开始计数。
56+
* @param limit 用于分页,表示拉取 limit 条记录。最大为 30。
57+
* @return . pub template title list
58+
* @throws WxErrorException .
59+
*/
60+
PubTemplateTitleListResult getPubTemplateTitleList(String[] ids, int start, int limit) throws WxErrorException;
61+
62+
/**
63+
* <pre>
64+
* 获取模板库某个模板标题下关键词库
65+
*
66+
* 详情请见: https://developers.weixin.qq.com/doc/offiaccount/Subscription_Messages/api.html
67+
* 接口url格式: GET https://api.weixin.qq.com/wxaapi/newtmpl/getpubtemplatekeywords?access_token=ACCESS_TOKEN
68+
* </pre>
69+
*
70+
* @param id 模板标题 id,可通过接口获取
71+
* @return . pub template key words by id
72+
* @throws WxErrorException .
73+
*/
74+
List<PubTemplateKeyword> getPubTemplateKeyWordsById(String id) throws WxErrorException;
75+
76+
/**
77+
* <pre>
78+
* 组合模板并添加至帐号下的个人模板库
79+
*
80+
* 详情请见: https://developers.weixin.qq.com/doc/offiaccount/Subscription_Messages/api.html
81+
* 接口url格式: POST https://api.weixin.qq.com/wxaapi/newtmpl/addtemplate?access_token=ACCESS_TOKEN
82+
* </pre>
83+
*
84+
* @param id 模板标题 id,可通过接口获取,也可登录小程序后台查看获取
85+
* @param keywordIdList 模板关键词列表
86+
* @param sceneDesc 服务场景描述,15个字以内
87+
* @return 添加至帐号下的模板id ,发送小程序订阅消息时所需
88+
* @throws WxErrorException .
89+
*/
90+
String addTemplate(String id, List<Integer> keywordIdList, String sceneDesc) throws WxErrorException;
91+
92+
/**
93+
* <pre>
94+
* 获取当前帐号下的个人模板列表
95+
*
96+
* 详情请见: https://developers.weixin.qq.com/doc/offiaccount/Subscription_Messages/api.html
97+
* 接口url格式: GET https://api.weixin.qq.com/wxaapi/newtmpl/gettemplate?access_token=ACCESS_TOKEN
98+
* </pre>
99+
*
100+
* @return . template list
101+
* @throws WxErrorException .
102+
*/
103+
List<TemplateInfo> getTemplateList() throws WxErrorException;
104+
105+
/**
106+
* <pre>
107+
* 删除帐号下的某个模板
108+
*
109+
* 详情请见: https://developers.weixin.qq.com/doc/offiaccount/Subscription_Messages/api.html
110+
* 接口url格式: POST https://api.weixin.qq.com/wxaapi/newtmpl/deltemplate?access_token=ACCESS_TOKEN
111+
* </pre>
112+
*
113+
* @param templateId 要删除的模板id
114+
* @return 删除是否成功 boolean
115+
* @throws WxErrorException .
116+
*/
117+
boolean delTemplate(String templateId) throws WxErrorException;
118+
119+
/**
120+
* <pre>
121+
* 获取公众号类目
122+
* https://developers.weixin.qq.com/doc/offiaccount/Subscription_Messages/api.html
123+
* GET https://api.weixin.qq.com/wxaapi/newtmpl/getcategory?access_token=ACCESS_TOKEN
124+
* </pre>
125+
*
126+
* @return . category
127+
* @throws WxErrorException .
128+
*/
129+
List<CategoryData> getCategory() throws WxErrorException;
130+
131+
/**
132+
* <pre>
133+
* 发送订阅消息
134+
* https://developers.weixin.qq.com/doc/offiaccount/Subscription_Messages/api.html
135+
* </pre>
136+
*
137+
* @param subscribeMessage 订阅消息
138+
* @throws WxErrorException .
36139
*/
37-
boolean sendSubscribeMessage(WxMpSubscribeMessage message) throws WxErrorException;
140+
void send(WxMpSubscribeMessage subscribeMessage) throws WxErrorException;
38141

39142
}

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java

+5
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,11 @@ public String post(WxMpApiUrl url, String postData) throws WxErrorException {
287287
return this.post(url.getUrl(this.getWxMpConfigStorage()), postData);
288288
}
289289

290+
@Override
291+
public String post(WxMpApiUrl url, Object obj) throws WxErrorException {
292+
return this.execute(SimplePostRequestExecutor.create(this), url, WxGsonBuilder.create().toJson(obj));
293+
}
294+
290295
@Override
291296
public String post(WxMpApiUrl url, JsonObject jsonObject) throws WxErrorException {
292297
return this.post(url.getUrl(this.getWxMpConfigStorage()), jsonObject.toString());

0 commit comments

Comments
 (0)