diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/Utf8ResponseHandler.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/Utf8ResponseHandler.java index 697d4695..035726d4 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/Utf8ResponseHandler.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/Utf8ResponseHandler.java @@ -25,7 +25,7 @@ public class Utf8ResponseHandler implements ResponseHandler { final HttpEntity entity = response.getEntity(); if (statusLine.getStatusCode() >= 300) { EntityUtils.consume(entity); - throw new HttpResponseException(statusLine.getStatusCode(), statusLine.getReasonPhrase()); + throw new HttpResponseException(statusLine.getStatusCode(), statusLine.toString()); } return entity == null ? null : EntityUtils.toString(entity, Consts.UTF_8); } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMsgService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMsgService.java index 3dec5140..2dc627eb 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMsgService.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMsgService.java @@ -33,16 +33,23 @@ public interface WxMaMsgService { * 发送模板消息 * 详情请见: 发送模板消息 * 接口url格式:https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=ACCESS_TOKEN + * 小程序模板消息接口将于2020年1月10日下线,开发者可使用订阅消息功能 * + * + * @param templateMessage 模版消息 + * @throws WxErrorException . */ + @Deprecated void sendTemplateMsg(WxMaTemplateMessage templateMessage) throws WxErrorException; - /** *
+   * 发送订阅消息
    * https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html
    * 
- * 发送订阅消息 + * + * @param subscribeMessage 订阅消息 + * @throws WxErrorException . */ void sendSubscribeMsg(WxMaSubscribeMessage subscribeMessage) throws WxErrorException; diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java index 695590a6..49cf5940 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java @@ -158,6 +158,13 @@ public interface WxMaService { */ WxMaTemplateService getTemplateService(); + /** + * 返回订阅消息配置相关接口方法的实现类对象, 以方便调用其各个接口. + * + * @return WxMaSubscribeService + */ + WxMaSubscribeService getSubscribeService(); + /** * 数据分析相关查询服务. * @@ -226,6 +233,7 @@ public interface WxMaService { /** * 获取物流助手接口服务对象 + * * @return */ WxMaExpressService getExpressService(); diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaSubscribeService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaSubscribeService.java new file mode 100644 index 00000000..9aa6cea2 --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaSubscribeService.java @@ -0,0 +1,153 @@ +package cn.binarywang.wx.miniapp.api; + +import cn.binarywang.wx.miniapp.bean.template.WxMaTemplateLibraryListResult; +import lombok.Data; +import me.chanjar.weixin.common.error.WxErrorException; + +import java.util.List; + +/** + * 订阅消息类 + * + * @author Binary Wang + * @date 2019-12-15 + */ +public interface WxMaSubscribeService { + /** + * 获取模板标题下的关键词列表. + */ + String GET_PUB_TEMPLATE_TITLE_LIST_URL = "https://api.weixin.qq.com/wxaapi/newtmpl/getpubtemplatetitles"; + + /** + * 获取模板标题下的关键词列表. + */ + String GET_PUB_TEMPLATE_KEY_WORDS_BY_ID_URL = "https://api.weixin.qq.com/wxaapi/newtmpl/getpubtemplatekeywords"; + + /** + * 组合模板并添加至帐号下的个人模板库. + */ + String TEMPLATE_ADD_URL = "https://api.weixin.qq.com/wxaapi/newtmpl/addtemplate"; + + /** + * 获取当前帐号下的个人模板列表. + */ + String TEMPLATE_LIST_URL = "https://api.weixin.qq.com/wxaapi/newtmpl/gettemplate"; + + /** + * 删除帐号下的某个模板. + */ + String TEMPLATE_DEL_URL = "https://api.weixin.qq.com/wxaapi/newtmpl/deltemplate"; + + /** + * 获取小程序账号的类目 + */ + String GET_CATEGORY_URL = "https://api.weixin.qq.com/wxaapi/newtmpl/getcategory"; + + /** + *
+   * 获取帐号所属类目下的公共模板标题
+   *
+   * 详情请见: 获取帐号所属类目下的公共模板标题
+   * 接口url格式: https://api.weixin.qq.com/wxaapi/newtmpl/getpubtemplatetitles?access_token=ACCESS_TOKEN
+   * 
+ * + * @param ids 类目 id,多个用逗号隔开 + * @param limit 用于分页,表示拉取 limit 条记录。最大为 30。 + * @param start 用于分页,表示从 start 开始。从 0 开始计数。 + * @return . + * @throws WxErrorException . + */ + WxMaTemplateLibraryListResult getPubTemplateTitleList(Integer[] ids, int start, int limit) throws WxErrorException; + + /** + *
+   * 获取模板库某个模板标题下关键词库
+   *
+   * 详情请见: 获取模板标题下的关键词列表
+   * 接口url格式: GET https://api.weixin.qq.com/wxaapi/newtmpl/getpubtemplatekeywords?access_token=ACCESS_TOKEN
+   * 
+ * + * @param id 模板标题 id,可通过接口获取 + * @return . + * @throws WxErrorException . + */ + List getPubTemplateKeyWordsById(String id) throws WxErrorException; + + /** + *
+   * 组合模板并添加至帐号下的个人模板库
+   *
+   * 详情请见: 获取小程序模板库标题列表
+   * 接口url格式: POST https://api.weixin.qq.com/wxaapi/newtmpl/addtemplate?access_token=ACCESS_TOKEN
+   * 
+ * + * @param id 模板标题 id,可通过接口获取,也可登录小程序后台查看获取 + * @param keywordIdList 模板关键词列表 + * @param sceneDesc 服务场景描述,15个字以内 + * @return 添加至帐号下的模板id,发送小程序订阅消息时所需 + * @throws WxErrorException . + */ + String addTemplate(String id, List keywordIdList, String sceneDesc) throws WxErrorException; + + /** + *
+   * 获取当前帐号下的个人模板列表
+   *
+   * 详情请见: 获取当前帐号下的个人模板列表
+   * 接口url格式: GET https://api.weixin.qq.com/wxaapi/newtmpl/gettemplate?access_token=ACCESS_TOKEN
+   * 
+ * + * @return . + * @throws WxErrorException . + */ + List getTemplateList() throws WxErrorException; + + /** + *
+   * 删除帐号下的某个模板
+   *
+   * 详情请见: 删除帐号下的个人模板
+   * 接口url格式: POST https://api.weixin.qq.com/wxaapi/newtmpl/deltemplate?access_token=ACCESS_TOKEN
+   * 
+ * + * @param templateId 要删除的模板id + * @return 删除是否成功 + * @throws WxErrorException . + */ + boolean delTemplate(String templateId) throws WxErrorException; + + /** + *
+   * 获取小程序账号的类目
+   * https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.getCategory.html
+   * GET https://api.weixin.qq.com/wxaapi/newtmpl/getcategory?access_token=ACCESS_TOKEN
+   * 
+ * + * @return . + * @throws WxErrorException . + */ + List getCategory() throws WxErrorException; + + @Data + class CategoryData { + int id; + String name; + } + + @Data + class TemplateInfo { + private String priTmplId; + private String title; + private String content; + private String example; + private int type; + } + + @Data + class PubTemplateKeyword{ + private int kid; + private String name; + private String example; + private String rule; + } +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaTemplateService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaTemplateService.java index 3973774f..cbdd3c75 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaTemplateService.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaTemplateService.java @@ -8,6 +8,10 @@ import me.chanjar.weixin.common.error.WxErrorException; import java.util.List; +/** + * @author IOMan(lewis.lynn1006@gmail.com) + */ +@Deprecated public interface WxMaTemplateService { /** * 获取小程序模板库标题列表. diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImpl.java index 26ebd74b..1a059983 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImpl.java @@ -28,11 +28,6 @@ public class WxMaMsgServiceImpl implements WxMaMsgService { return responseContent != null; } - /** - *
-   * 小程序模板消息接口将于2020年1月10日下线,开发者可使用订阅消息功能
-   * 
- */ @Override public void sendTemplateMsg(WxMaTemplateMessage templateMessage) throws WxErrorException { String responseContent = this.wxMaService.post(TEMPLATE_MSG_SEND_URL, templateMessage.toJson()); diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceImpl.java index 0a6da861..6899e708 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceImpl.java @@ -55,6 +55,7 @@ public class WxMaServiceImpl implements WxMaService, RequestHttpBinary Wang + * @date 2019-12-15 + */ +@AllArgsConstructor +public class WxMaSubscribeServiceImpl implements WxMaSubscribeService { + private WxMaService wxMaService; + + @Override + public WxMaTemplateLibraryListResult getPubTemplateTitleList(Integer[] ids, int start, int limit) throws WxErrorException { + ImmutableMap params = ImmutableMap.of("ids", StringUtils.join(ids, ","), + "start", start, "limit", limit); + String responseText = this.wxMaService.post(GET_PUB_TEMPLATE_TITLE_LIST_URL, WxGsonBuilder.create().toJson(params)); + return WxMaTemplateLibraryListResult.fromJson(responseText); + } + + @Override + public List getPubTemplateKeyWordsById(String id) throws WxErrorException { + String responseText = this.wxMaService.post(GET_PUB_TEMPLATE_KEY_WORDS_BY_ID_URL, + WxGsonBuilder.create().toJson(ImmutableMap.of("tid", id))); + return WxMaGsonBuilder.create().fromJson(new JsonParser().parse(responseText).getAsJsonObject() + .getAsJsonArray("data"), new TypeToken>() { + }.getType()); + } + + @Override + public String addTemplate(String id, List keywordIdList, String sceneDesc) throws WxErrorException { + String responseText = this.wxMaService.post(TEMPLATE_ADD_URL, WxGsonBuilder.create().toJson(ImmutableMap.of("tid", id, + "kidList", keywordIdList.toArray(), + "sceneDesc", sceneDesc))); + return new JsonParser().parse(responseText).getAsJsonObject().get("priTmplId").getAsString(); + } + + @Override + public List getTemplateList() throws WxErrorException { + String responseText = this.wxMaService.get(TEMPLATE_LIST_URL, null); + return WxMaGsonBuilder.create().fromJson(new JsonParser().parse(responseText).getAsJsonObject() + .getAsJsonArray("data"), new TypeToken>() { + }.getType()); + } + + @Override + public boolean delTemplate(String templateId) throws WxErrorException { + Map params = ImmutableMap.of("priTmplId", templateId); + this.wxMaService.post(TEMPLATE_DEL_URL, WxGsonBuilder.create().toJson(params)); + return true; + } + + @Override + public List getCategory() throws WxErrorException { + String responseText = this.wxMaService.get(GET_CATEGORY_URL, null); + return WxMaGsonBuilder.create().fromJson(new JsonParser().parse(responseText).getAsJsonObject() + .getAsJsonArray("data"), new TypeToken>() { + }.getType()); + } +} diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaSubscribeServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaSubscribeServiceImplTest.java new file mode 100644 index 00000000..706a13db --- /dev/null +++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaSubscribeServiceImplTest.java @@ -0,0 +1,62 @@ +package cn.binarywang.wx.miniapp.api.impl; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.api.WxMaSubscribeService; +import cn.binarywang.wx.miniapp.test.ApiTestModule; +import com.google.common.collect.Lists; +import com.google.inject.Inject; +import me.chanjar.weixin.common.error.WxErrorException; +import org.testng.annotations.Guice; +import org.testng.annotations.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * 测试类. + * + * @author Binary Wang + * @date 2019-12-15 + */ +@Test +@Guice(modules = ApiTestModule.class) +public class WxMaSubscribeServiceImplTest { + @Inject + protected WxMaService wxService; + + @Test + public void testGetPubTemplateTitleList() throws WxErrorException { + this.wxService.getSubscribeService().getPubTemplateTitleList(new Integer[]{578}, 1, 1); + } + + @Test + public void testGetPubTemplateKeyWordsById() throws WxErrorException { + final List result = this.wxService.getSubscribeService().getPubTemplateKeyWordsById("578"); + System.out.println(result); + } + + @Test + public void testAddTemplate() throws WxErrorException { + final String templateId = this.wxService.getSubscribeService().addTemplate("1", Lists.newArrayList(1), ""); + System.out.println(templateId); + } + + @Test + public void testGetTemplateList() throws WxErrorException { + final List templateList = this.wxService.getSubscribeService().getTemplateList(); + System.out.println(templateList); + } + + @Test + public void testDelTemplate() throws WxErrorException { + this.wxService.getSubscribeService().delTemplate("priTmplId"); + } + + @Test + public void testGetCategory() throws WxErrorException { + final List categoryData = this.wxService.getSubscribeService().getCategory(); + assertThat(categoryData).isNotNull(); + System.out.println(categoryData); + } +} diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaTemplateServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaTemplateServiceImplTest.java index 5dfa86a8..57896685 100644 --- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaTemplateServiceImplTest.java +++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaTemplateServiceImplTest.java @@ -17,7 +17,6 @@ import java.util.List; @Test @Guice(modules = ApiTestModule.class) public class WxMaTemplateServiceImplTest { - @Inject protected WxMaService wxService; @@ -36,7 +35,7 @@ public class WxMaTemplateServiceImplTest { } @Test - public void testAddTemplate() throws Exception{ + public void testAddTemplate() throws Exception { List list = Lists.newArrayList(); list.add(1); list.add(20); @@ -48,7 +47,7 @@ public class WxMaTemplateServiceImplTest { } @Test - public void testFindTemplateList() throws Exception{ + public void testFindTemplateList() throws Exception { WxMaTemplateListResult result = this.wxService.getTemplateService().findTemplateList(0, 20); System.out.println(result); }