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,