diff --git a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/WXBizDataCrypt.java b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/WXBizDataCrypt.java index 6c2ffe7d..361461a9 100644 --- a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/WXBizDataCrypt.java +++ b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/WXBizDataCrypt.java @@ -8,7 +8,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; /** - * 对微信小程序用户加密数据的解密. + * 对微信小程序用户加密数据的解密。 * * @since 1.8 * @see 加密数据解密算法 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..d86f10e0 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,14 +9,20 @@ 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; /** + * The facade of WXA APIs. + * * @since 1.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 +68,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 +80,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/LoginApi.java b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/LoginApi.java index 1a664931..ddb5500a 100644 --- a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/LoginApi.java +++ b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/LoginApi.java @@ -7,6 +7,8 @@ import com.foxinmy.weixin4j.model.WeixinAccount; import com.foxinmy.weixin4j.wxa.model.Session; /** + * 登录凭证校验。 + * * @since 1.8 */ public class LoginApi extends WxaApi { diff --git a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/QrCodeApi.java b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/QrCodeApi.java index 4f0890a4..85540a1a 100644 --- a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/QrCodeApi.java +++ b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/QrCodeApi.java @@ -1,7 +1,6 @@ package com.foxinmy.weixin4j.wxa.api; import java.awt.Color; -import java.io.IOException; import com.alibaba.fastjson.JSON; import com.foxinmy.weixin4j.exception.WeixinException; @@ -10,7 +9,7 @@ import com.foxinmy.weixin4j.http.weixin.WeixinResponse; import com.foxinmy.weixin4j.token.TokenManager; /** - * 获取二维码. + * 获取二维码。 * *

* 通过后台接口可以获取小程序任意页面的二维码,扫描该二维码可以直接进入小程序对应的页面。 @@ -20,12 +19,10 @@ import com.foxinmy.weixin4j.token.TokenManager; * @see 获取二维码 * @since 1.8 */ -public class QrCodeApi extends WxaApi { - - private final TokenManager tokenManager; +public class QrCodeApi extends TokenManagerApi { public QrCodeApi(TokenManager tokenManager) { - this.tokenManager = tokenManager; + super(tokenManager); } /** @@ -54,8 +51,7 @@ public class QrCodeApi extends WxaApi { Color lineColor, Boolean hyaline ) throws WeixinException { - final String accessToken = tokenManager.getAccessToken(); - final String getWxaCodeUri = this.getRequestUri("wxa_getwxacode", accessToken); + final String getWxaCodeUri = this.getAccessTokenRequestUri("wxa_getwxacode"); final WxaCodeParameter param = new WxaCodeParameter(path, width, autoColor, lineColor, hyaline); return this.postAsImageBytes(getWxaCodeUri, param); } @@ -105,8 +101,7 @@ public class QrCodeApi extends WxaApi { Color lineColor, Boolean hyaline ) throws WeixinException { - final String accessToken = tokenManager.getAccessToken(); - final String getWxaCodeUnlimitUri = this.getRequestUri("wxa_getwxacodeunlimit", accessToken); + final String getWxaCodeUnlimitUri = this.getAccessTokenRequestUri("wxa_getwxacodeunlimit"); final WxaCodeUnlimitParameter param = new WxaCodeUnlimitParameter(scene, page, width, autoColor, lineColor, hyaline); return this.postAsImageBytes(getWxaCodeUnlimitUri, param); } @@ -131,8 +126,7 @@ public class QrCodeApi extends WxaApi { String path, Integer width ) throws WeixinException { - final String accessToken = tokenManager.getAccessToken(); - final String createWxaQrCode = this.getRequestUri("wxaapp_createwxaqrcode", accessToken); + final String createWxaQrCode = this.getAccessTokenRequestUri("wxaapp_createwxaqrcode"); final WxaQrCodeParameter param = new WxaQrCodeParameter(path, width); return this.postAsImageBytes(createWxaQrCode, param); } @@ -144,20 +138,10 @@ public class QrCodeApi extends WxaApi { } private byte[] toImageBytes(WeixinResponse response) throws WeixinException { - try { - return readImageBytes(response); - } catch (IOException e) { - throw new WeixinException(e); - } catch (WxaCodeError e) { - throw new WeixinException(Integer.toString(e.getErrcode()), e.getErrmsg()); - } - } - - private byte[] readImageBytes(WeixinResponse response) throws IOException, WxaCodeError { final String contentType = response.getHeaders().getContentType(); if (contentType != null && contentType.equals(ContentType.APPLICATION_JSON.getMimeType().getType())) { - WxaCodeError wxaCodeError = JSON.parseObject(response.getContent(), WxaCodeError.class); - throw wxaCodeError; + final WxaApiResult r = response.getAsObject(WxaApiResult.TYPE_REFERENCE); + throw r.toWeixinException(); } else { return response.getContent(); } 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..e1bd0fac --- /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 TokenManagerApi { + + 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