From e8ac8f594f6489cef91468c54b6dc94ebe787e25 Mon Sep 17 00:00:00 2001
From: Niko <1377382065@qq.com>
Date: Mon, 6 Jan 2020 18:08:50 +0800
Subject: [PATCH 1/3] add SubscribeMessageApi
---
.../foxinmy/weixin4j/wxa/WeixinAppFacade.java | 12 +++
.../weixin4j/wxa/api/SubscribeMessageApi.java | 42 ++++++++
.../wxa/api/SubscribeMessageParameter.java | 101 ++++++++++++++++++
.../model/subscribemessage/ParameterType.java | 90 ++++++++++++++++
.../model/subscribemessage/package-info.java | 6 ++
.../weixin4j/wxa/api/weixin.properties | 2 +
6 files changed, 253 insertions(+)
create mode 100644 weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageApi.java
create mode 100644 weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageParameter.java
create mode 100644 weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/model/subscribemessage/ParameterType.java
create mode 100644 weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/model/subscribemessage/package-info.java
diff --git a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/WeixinAppFacade.java b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/WeixinAppFacade.java
index 70984cb2..aae4a24f 100644
--- a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/WeixinAppFacade.java
+++ b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/WeixinAppFacade.java
@@ -15,6 +15,7 @@ import com.foxinmy.weixin4j.wxa.api.QrCodeApi;
import com.foxinmy.weixin4j.wxa.api.SecCheckApi;
import com.foxinmy.weixin4j.wxa.api.TemplateApi;
import com.foxinmy.weixin4j.wxa.api.TemplateMessageApi;
+import com.foxinmy.weixin4j.wxa.api.SubscribeMessageApi;
/**
* The facade of WeChat Mini Program APIs.
@@ -29,6 +30,7 @@ public class WeixinAppFacade {
private final TemplateMessageApi templateMessageApi;
private final CustomMessageApi customMessageApi;
private final SecCheckApi secCheckApi;
+ private final SubscribeMessageApi subscribeMessageApi;
/**
* Constructs {@link WeixinAppFacade} using {@link FileCacheStorager}.
@@ -111,6 +113,7 @@ public class WeixinAppFacade {
this.templateMessageApi = new TemplateMessageApi(tokenManager, properties);
this.customMessageApi = new CustomMessageApi(tokenManager, properties);
this.secCheckApi = new SecCheckApi(tokenManager, properties);
+ this.subscribeMessageApi = new SubscribeMessageApi(tokenManager, properties);
}
/**
@@ -149,6 +152,15 @@ public class WeixinAppFacade {
return templateMessageApi;
}
+ /**
+ * 获取订阅消息相关的 API。
+ *
+ * @return 模板消息相关的 API。
+ */
+ public SubscribeMessageApi getSubscribeMessageApi() {
+ return subscribeMessageApi;
+ }
+
/**
* 获取客服消息相关的 API。
*
diff --git a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageApi.java b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageApi.java
new file mode 100644
index 00000000..b815e276
--- /dev/null
+++ b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageApi.java
@@ -0,0 +1,42 @@
+package com.foxinmy.weixin4j.wxa.api;
+
+import com.foxinmy.weixin4j.exception.WeixinException;
+import com.foxinmy.weixin4j.token.TokenManager;
+
+import java.util.Map;
+import java.util.Properties;
+
+public class SubscribeMessageApi extends TokenManagerApi {
+
+ public SubscribeMessageApi(TokenManager tokenManager) {
+ super(tokenManager, null);
+ }
+
+ public SubscribeMessageApi(TokenManager tokenManager, Properties properties) {
+ super(tokenManager, properties);
+ }
+ /**
+ * 发送订阅消息
+ *
+ * @param toUser 接收者(用户)的 openid。
+ * @param templateId 所需下发的订阅模板id
+ * @param page 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。
+ * @param data 模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any } }
+ * @throws WeixinException indicates getting access token failed, or sending template message failed.
+ * @see 发送订阅消息
+ */
+ public void sendSubscribeMessageMessage(
+ String toUser,
+ String templateId,
+ String page,
+ Map data
+ ) throws WeixinException {
+
+ final SubscribeMessageParameter message = new SubscribeMessageParameter(
+ toUser, templateId, page, data
+ );
+ WxaApiResult r = this.post("wxopen_subscribe_message_send", message, WxaApiResult.TYPE_REFERENCE);
+ r.checkErrCode();
+ }
+
+}
diff --git a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageParameter.java b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageParameter.java
new file mode 100644
index 00000000..1a683f96
--- /dev/null
+++ b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageParameter.java
@@ -0,0 +1,101 @@
+package com.foxinmy.weixin4j.wxa.api;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+public class SubscribeMessageParameter {
+
+ private static final long serialVersionUID = 2018052601L;
+
+ private String toUser;
+ private String templateId;
+ private String page;
+ private Map data;
+
+ public SubscribeMessageParameter() {
+
+ }
+
+ public SubscribeMessageParameter(
+ String toUser,
+ String templateId,
+ String page,
+ Map data
+ ) {
+ this.toUser = toUser;
+ this.templateId = templateId;
+ this.page = page;
+ if (data != null) {
+ this.data = new HashMap(data.size());
+ for (Map.Entry entry : data.entrySet()) {
+ this.data.put(entry.getKey(), new SubscribeMessageData(entry.getValue()));
+ }
+ }
+ }
+
+ @JSONField(name = "touser")
+ public String getToUser() {
+ return toUser;
+ }
+
+ public void setToUser(String toUser) {
+ this.toUser = toUser;
+ }
+
+ @JSONField(name = "template_id")
+ public String getTemplateId() {
+ return templateId;
+ }
+
+ public void setTemplateId(String templateId) {
+ this.templateId = templateId;
+ }
+
+ public String getPage() {
+ return page;
+ }
+
+ public void setPage(String page) {
+ this.page = page;
+ }
+
+ public Map getData() {
+ return data;
+ }
+
+ public void setData(Map data) {
+ this.data = data;
+ }
+
+
+ /**
+ * SubscribeMessageData
+ */
+ public static class SubscribeMessageData implements Serializable {
+
+ private static final long serialVersionUID = 2018052601L;
+
+ private String value;
+
+ public SubscribeMessageData() {
+
+ }
+
+ public SubscribeMessageData(String value) {
+ this.value = value;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ }
+
+}
diff --git a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/model/subscribemessage/ParameterType.java b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/model/subscribemessage/ParameterType.java
new file mode 100644
index 00000000..16507e0c
--- /dev/null
+++ b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/model/subscribemessage/ParameterType.java
@@ -0,0 +1,90 @@
+package com.foxinmy.weixin4j.wxa.model.subscribemessage;
+
+/**
+ * https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html
+ */
+public enum ParameterType {
+
+ /**
+ * 20个以内字符 可汉字、数字、字母或符号组合
+ * 可汉字、数字、字母或符号组合
+ */
+ THING("thing"),
+
+ /**
+ * 24小时制时间格式(支持+年月日)
+ * 例如:15:01,或:2019年10月1日 15:01
+ */
+ TIME("time"),
+
+ /**
+ * 年月日格式(支持+24小时制时间)
+ * 例如:2019年10月1日,或:2019年10月1日 15:01
+ */
+ DATE("date"),
+
+ /**
+ * 10个以内纯汉字或20个以内纯字母或符号
+ * 中文名10个汉字内;纯英文名20个字母内;中文和字母混合按中文名算,10个字内
+ */
+ NAME("name"),
+
+ /**
+ * 32位以内数字
+ * 只能数字,可带小数
+ */
+ NUMBER("number"),
+
+ /**
+ * 32位以内字母
+ * 只能字母
+ */
+ LETTER("letter"),
+
+ /**
+ * 5位以内符号
+ * 只能符号
+ */
+ SYMBOL("symbol"),
+
+ /**
+ * 5个以内汉字
+ * 5个以内纯汉字,例如:配送中
+ */
+ PHRASE("phrase"),
+
+ /**
+ * 1个币种符号+10位以内纯数字,可带小数,结尾可带“元”
+ * 可带小数
+ */
+ AMOUNT("amount"),
+
+ /**
+ * 8位以内,第一位与最后一位可为汉字,其余为字母或数字
+ * 车牌号码:粤A8Z888挂
+ */
+ CAR_NUMBER("car_number"),
+
+ /**
+ * 17位以内,数字、符号
+ * 电话号码,例:+86-0766-66888866
+ */
+ PHONE_NUMBER("phone_number"),
+
+ /**
+ * 32位以内数字、字母或符号
+ * 可数字、字母或符号组合
+ */
+ CHARACTER_STRING("character_string");
+
+ private final String value;
+
+ ParameterType(final String value) {
+ this.value = value;
+ }
+
+ @Override
+ public String toString() {
+ return this.value;
+ }
+}
diff --git a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/model/subscribemessage/package-info.java b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/model/subscribemessage/package-info.java
new file mode 100644
index 00000000..90c16f6e
--- /dev/null
+++ b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/model/subscribemessage/package-info.java
@@ -0,0 +1,6 @@
+/**
+ * Models for {@link com.foxinmy.weixin4j.wxa.api.TemplateApi}.
+ *
+ * @since 1.8
+ */
+package com.foxinmy.weixin4j.wxa.model.subscribemessage;
diff --git a/weixin4j-wxa/src/main/resources/com/foxinmy/weixin4j/wxa/api/weixin.properties b/weixin4j-wxa/src/main/resources/com/foxinmy/weixin4j/wxa/api/weixin.properties
index 0c1a3b25..3e869824 100644
--- a/weixin4j-wxa/src/main/resources/com/foxinmy/weixin4j/wxa/api/weixin.properties
+++ b/weixin4j-wxa/src/main/resources/com/foxinmy/weixin4j/wxa/api/weixin.properties
@@ -38,6 +38,8 @@ wxopen_template_del={api_cgi_url}/wxopen/template/del?access_token=%s
# \u53d1\u9001\u6a21\u7248\u6d88\u606f
wxopen_template_message_send={api_cgi_url}/message/wxopen/template/send?access_token=%s
+# \u53d1\u9001\u8ba2\u9605\u6d88\u606f
+wxopen_subscribe_message_send={api_cgi_url}/message/subscribe/send?access_token=%s
# \u53d1\u9001\u5ba2\u670d\u6d88\u606f
message_custom_send={api_cgi_url}/message/custom/send?access_token=%s
From d3044f045d47d8d19a3194e3373f2e67fe020e9b Mon Sep 17 00:00:00 2001
From: Niko <1377382065@qq.com>
Date: Tue, 7 Jan 2020 10:13:52 +0800
Subject: [PATCH 2/3] SubscribeMessageParameter public to package
---
.../com/foxinmy/weixin4j/wxa/api/SubscribeMessageParameter.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageParameter.java b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageParameter.java
index 1a683f96..f7c07fb2 100644
--- a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageParameter.java
+++ b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageParameter.java
@@ -6,7 +6,7 @@ import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
-public class SubscribeMessageParameter {
+class SubscribeMessageParameter {
private static final long serialVersionUID = 2018052601L;
From 9dcef8c5962db8df343bc3c009ea2b81933f8797 Mon Sep 17 00:00:00 2001
From: Niko <1377382065@qq.com>
Date: Tue, 7 Jan 2020 10:36:27 +0800
Subject: [PATCH 3/3] sendSubscribeMessageMessage to sendSubscribeMessage
---
.../java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageApi.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageApi.java b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageApi.java
index b815e276..582fb334 100644
--- a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageApi.java
+++ b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageApi.java
@@ -25,7 +25,7 @@ public class SubscribeMessageApi extends TokenManagerApi {
* @throws WeixinException indicates getting access token failed, or sending template message failed.
* @see 发送订阅消息
*/
- public void sendSubscribeMessageMessage(
+ public void sendSubscribeMessage(
String toUser,
String templateId,
String page,