From 1241072a1b740cac3596e3ef03f83ff0550f7c16 Mon Sep 17 00:00:00 2001 From: Sutra Zhou Date: Sat, 26 May 2018 17:55:32 +0800 Subject: [PATCH] Implement template management and template message sending for WXA. --- .../com/foxinmy/weixin4j/wxa/WeixinProxy.java | 14 ++ .../wxa/api/AddTemplateParameter.java | 39 ++++++ .../foxinmy/weixin4j/wxa/api/NoticeApi.java | 30 +++++ .../foxinmy/weixin4j/wxa/api/TemplateApi.java | 122 ++++++++++++++++++ .../weixin4j/wxa/api/TemplateListResult.java | 55 ++++++++ .../weixin4j/wxa/api/TemplateMessageApi.java | 51 ++++++++ .../wxa/api/TemplateMessageParameter.java | 116 +++++++++++++++++ .../weixin4j/wxa/api/TemplateResult.java | 54 ++++++++ .../com/foxinmy/weixin4j/wxa/api/WxaApi.java | 5 +- .../weixin4j/wxa/api/WxaApiResult.java | 48 +++++++ .../weixin4j/wxa/model/template/Keyword.java | 40 ++++++ .../weixin4j/wxa/model/template/Template.java | 68 ++++++++++ .../wxa/model/template/package-info.java | 4 + .../weixin4j/wxa/api/weixin.properties | 21 +++ .../wxa/api/AddTemplateParameterTest.java | 18 +++ .../wxa/api/TemplateListResultTest.java | 52 ++++++++ .../wxa/api/TemplateMessageParameterTest.java | 39 ++++++ .../weixin4j/wxa/api/TemplateResultTest.java | 38 ++++++ .../foxinmy/weixin4j/wxa/api/Template.json | 23 ++++ .../weixin4j/wxa/api/TemplateList.json | 12 ++ .../wxa/api/TemplateListInLibrary.json | 27 ++++ 21 files changed, 874 insertions(+), 2 deletions(-) create mode 100644 weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/AddTemplateParameter.java create mode 100644 weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/NoticeApi.java create mode 100644 weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/TemplateApi.java create mode 100644 weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/TemplateListResult.java create mode 100644 weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/TemplateMessageApi.java create mode 100644 weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/TemplateMessageParameter.java create mode 100644 weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/TemplateResult.java create mode 100644 weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/WxaApiResult.java create mode 100644 weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/model/template/Keyword.java create mode 100644 weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/model/template/Template.java create mode 100644 weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/model/template/package-info.java rename weixin4j-wxa/src/main/{java => resources}/com/foxinmy/weixin4j/wxa/api/weixin.properties (52%) create mode 100644 weixin4j-wxa/src/test/java/com/foxinmy/weixin4j/wxa/api/AddTemplateParameterTest.java create mode 100644 weixin4j-wxa/src/test/java/com/foxinmy/weixin4j/wxa/api/TemplateListResultTest.java create mode 100644 weixin4j-wxa/src/test/java/com/foxinmy/weixin4j/wxa/api/TemplateMessageParameterTest.java create mode 100644 weixin4j-wxa/src/test/java/com/foxinmy/weixin4j/wxa/api/TemplateResultTest.java create mode 100644 weixin4j-wxa/src/test/resources/com/foxinmy/weixin4j/wxa/api/Template.json create mode 100644 weixin4j-wxa/src/test/resources/com/foxinmy/weixin4j/wxa/api/TemplateList.json create mode 100644 weixin4j-wxa/src/test/resources/com/foxinmy/weixin4j/wxa/api/TemplateListInLibrary.json diff --git a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/WeixinProxy.java b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/WeixinProxy.java index e21ded07..df9fc2fd 100644 --- a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/WeixinProxy.java +++ b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/WeixinProxy.java @@ -9,6 +9,8 @@ import com.foxinmy.weixin4j.token.TokenCreator; import com.foxinmy.weixin4j.token.TokenManager; import com.foxinmy.weixin4j.wxa.api.LoginApi; import com.foxinmy.weixin4j.wxa.api.QrCodeApi; +import com.foxinmy.weixin4j.wxa.api.TemplateApi; +import com.foxinmy.weixin4j.wxa.api.TemplateMessageApi; /** * @since 1.8 @@ -17,6 +19,8 @@ public class WeixinProxy { private final LoginApi loginApi; private final QrCodeApi qrCodeApi; + private final TemplateApi templateApi; + private final TemplateMessageApi templateMessageApi; public WeixinProxy( WeixinAccount weixinAccount @@ -62,6 +66,8 @@ public class WeixinProxy { this.loginApi = new LoginApi(weixinAccount); this.qrCodeApi = new QrCodeApi(tokenManager); + this.templateApi = new TemplateApi(tokenManager); + this.templateMessageApi = new TemplateMessageApi(tokenManager); } public LoginApi getLoginApi() { @@ -72,4 +78,12 @@ public class WeixinProxy { return qrCodeApi; } + public TemplateApi getTemplateApi() { + return templateApi; + } + + public TemplateMessageApi getTemplateMessageApi() { + return templateMessageApi; + } + } diff --git a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/AddTemplateParameter.java b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/AddTemplateParameter.java new file mode 100644 index 00000000..c4bf016b --- /dev/null +++ b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/AddTemplateParameter.java @@ -0,0 +1,39 @@ +package com.foxinmy.weixin4j.wxa.api; + +import java.io.Serializable; + +import com.alibaba.fastjson.annotation.JSONField; + +class AddTemplateParameter implements Serializable { + + private static final long serialVersionUID = 2018052601L; + + private String id; + private int[] keywordIds; + + public AddTemplateParameter() { + } + + public AddTemplateParameter(String id, int[] keywordIds) { + this.id = id; + this.keywordIds = keywordIds; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + @JSONField(name = "keyword_id_list") + public int[] getKeywordIds() { + return keywordIds; + } + + public void setKeywordIds(int[] keywordIds) { + this.keywordIds = keywordIds; + } + +} diff --git a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/NoticeApi.java b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/NoticeApi.java new file mode 100644 index 00000000..b1ccb6bf --- /dev/null +++ b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/NoticeApi.java @@ -0,0 +1,30 @@ +package com.foxinmy.weixin4j.wxa.api; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.foxinmy.weixin4j.exception.WeixinException; +import com.foxinmy.weixin4j.http.weixin.WeixinResponse; +import com.foxinmy.weixin4j.token.TokenManager; + +abstract class NoticeApi extends WxaApi { + + private final TokenManager tokenManager; + + public NoticeApi(final TokenManager tokenManager) { + this.tokenManager = tokenManager; + } + + T post(String key, Object params, TypeReference typeReference) throws WeixinException { + final String uri = this.getAccessTokenRequestUri(key); + final String body = JSON.toJSONString(params); + final WeixinResponse response = this.weixinExecutor.post(uri, body); + return response.getAsObject(typeReference); + } + + String getAccessTokenRequestUri(String key) throws WeixinException { + final String accessToken = tokenManager.getAccessToken(); + final String uri = this.getRequestUri(key, accessToken); + return uri; + } + +} diff --git a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/TemplateApi.java b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/TemplateApi.java new file mode 100644 index 00000000..50af65ed --- /dev/null +++ b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/TemplateApi.java @@ -0,0 +1,122 @@ +package com.foxinmy.weixin4j.wxa.api; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.foxinmy.weixin4j.exception.WeixinException; +import com.foxinmy.weixin4j.model.paging.Pageable; +import com.foxinmy.weixin4j.model.paging.Pagedata; +import com.foxinmy.weixin4j.token.TokenManager; +import com.foxinmy.weixin4j.wxa.model.template.Template; + +/** + * 模版消息管理 + * + * @see 模版消息管理 + * @since 1.8 + */ +public class TemplateApi extends NoticeApi { + + public TemplateApi(TokenManager tokenManager) { + super(tokenManager); + } + + /** + * 获取小程序模板库标题列表 + * + * @param pageable the pagination information. + * @return templates in library. + * @throws WeixinException indicates getting access token failed or getting templates failed. + * @see 获取小程序模板库标题列表 + */ + public Pagedata