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 9098d4ac..beaa96a8 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 @@ -121,6 +121,12 @@ public interface WxMaService { */ WxMaQrcodeService getQrcodeService(); + /** + * 返回模板配置相关接口方法的实现类对象, 以方便调用其各个接口 + * @return WxMaTemplateService + */ + WxMaTemplateService getTemplateService(); + /** * 初始化http请求对象 */ 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 new file mode 100644 index 00000000..62be40ed --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaTemplateService.java @@ -0,0 +1,89 @@ +package cn.binarywang.wx.miniapp.api; + +import cn.binarywang.wx.miniapp.bean.template.WxMaTemplateAddResult; +import cn.binarywang.wx.miniapp.bean.template.WxMaTemplateLibraryGetResult; +import cn.binarywang.wx.miniapp.bean.template.WxMaTemplateLibraryListResult; +import cn.binarywang.wx.miniapp.bean.template.WxMaTemplateListResult; +import me.chanjar.weixin.common.exception.WxErrorException; + +import java.util.List; + +public interface WxMaTemplateService { + + //获取小程序模板库标题列表 + String TEMPLATE_LIBRARY_LIST_URL = "https://api.weixin.qq.com/cgi-bin/wxopen/template/library/list"; + + //获取模板库某个模板标题下关键词库 + String TEMPLATE_LIBRARY_KEYWORD_URL = "https://api.weixin.qq.com/cgi-bin/wxopen/template/library/get"; + + //组合模板并添加至帐号下的个人模板库 + String TEMPLATE_ADD_URL = "https://api.weixin.qq.com/cgi-bin/wxopen/template/add"; + + //获取帐号下已存在的模板列表 + String TEMPLATE_LIST_URL = "https://api.weixin.qq.com/cgi-bin/wxopen/template/list"; + + //删除帐号下的某个模板 + String TEMPLATE_DEL_URL = "https://api.weixin.qq.com/cgi-bin/wxopen/template/del"; + + /** + *
+   * 获取小程序模板库标题列表
+   *
+   * 详情请见: 获取小程序模板库标题列表
+   * 接口url格式: https://api.weixin.qq.com/cgi-bin/wxopen/template/library/list?access_token=ACCESS_TOKEN
+   * 
+ * @param offset + * @param count + * @return + */ + WxMaTemplateLibraryListResult findTemplateLibraryList(int offset, int count) throws WxErrorException; + + /** + *
+   * 获取模板库某个模板标题下关键词库
+   *
+   * 详情请见: 获取小程序模板库标题列表
+   * 接口url格式: https://api.weixin.qq.com/cgi-bin/wxopen/template/library/get?access_token=ACCESS_TOKEN
+   * 
+ * @param id + * @return + */ + WxMaTemplateLibraryGetResult findTemplateLibraryKeywordList(String id) throws WxErrorException; + + /** + *
+   * 组合模板并添加至帐号下的个人模板库
+   *
+   * 详情请见: 获取小程序模板库标题列表
+   * 接口url格式: https://api.weixin.qq.com/cgi-bin/wxopen/template/add?access_token=ACCESS_TOKEN
+   * 
+ * @param id + * @param keywordIdList + * @return + */ + WxMaTemplateAddResult addTemplate(String id, List keywordIdList) throws WxErrorException; + + /** + *
+   * 获取帐号下已存在的模板列表
+   *
+   * 详情请见: 获取小程序模板库标题列表
+   * 接口url格式: https://api.weixin.qq.com/cgi-bin/wxopen/template/list?access_token=ACCESS_TOKEN
+   * 
+ * @param offset + * @param count + * @return + */ + WxMaTemplateListResult findTemplateList(int offset, int count) throws WxErrorException; + + /** + *
+   * 删除帐号下的某个模板
+   *
+   * 详情请见: 获取小程序模板库标题列表
+   * 接口url格式: https://api.weixin.qq.com/cgi-bin/wxopen/template/list?access_token=ACCESS_TOKEN
+   * 
+ * @param templateId + */ + boolean delTemplate(String templateId) throws WxErrorException; +} 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 df3fad8e..380a15a1 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 @@ -38,6 +38,7 @@ public class WxMaServiceImpl implements WxMaService, RequestHttp params = new HashMap<>(); + params.put("offset", offset); + params.put("count", count); + + String responseText = this.wxMaService.post(TEMPLATE_LIBRARY_LIST_URL, WxGsonBuilder.create().toJson(params)); + WxError wxError = WxError.fromJson(responseText); + if(wxError.getErrorCode() == 0){ + return WxMaTemplateLibraryListResult.fromJson(responseText); + }else { + throw new WxErrorException(wxError); + } + } + + @Override + public WxMaTemplateLibraryGetResult findTemplateLibraryKeywordList(String id) throws WxErrorException { + + Map params = new HashMap<>(); + params.put("id", id); + + String responseText = this.wxMaService.post(TEMPLATE_LIBRARY_KEYWORD_URL, WxGsonBuilder.create().toJson(params)); + WxError wxError = WxError.fromJson(responseText); + if(wxError.getErrorCode() == 0){ + return WxMaTemplateLibraryGetResult.fromJson(responseText); + }else { + throw new WxErrorException(wxError); + } + } + + @Override + public WxMaTemplateAddResult addTemplate(String id, List keywordIdList) throws WxErrorException { + + Map params = new HashMap<>(); + params.put("id", id); + params.put("keyword_id_list", keywordIdList.toArray()); + + String responseText = this.wxMaService.post(TEMPLATE_ADD_URL, WxGsonBuilder.create().toJson(params)); + WxError wxError = WxError.fromJson(responseText); + if(wxError.getErrorCode() == 0){ + return WxMaTemplateAddResult.fromJson(responseText); + }else { + throw new WxErrorException(wxError); + } + } + + @Override + public WxMaTemplateListResult findTemplateList(int offset, int count) throws WxErrorException { + + Map params = new HashMap<>(); + params.put("offset", offset); + params.put("count", count); + + String responseText = this.wxMaService.post(TEMPLATE_LIST_URL, WxGsonBuilder.create().toJson(params)); + WxError wxError = WxError.fromJson(responseText); + if(wxError.getErrorCode() == 0){ + return WxMaTemplateListResult.fromJson(responseText); + }else { + throw new WxErrorException(wxError); + } + } + + @Override + public boolean delTemplate(String templateId) throws WxErrorException { + Map params = new HashMap<>(); + params.put("template_id", templateId); + + String responseText = this.wxMaService.post(TEMPLATE_DEL_URL, WxGsonBuilder.create().toJson(params)); + WxError wxError = WxError.fromJson(responseText); + if(wxError.getErrorCode() == 0){ + return true; + }else { + throw new WxErrorException(wxError); + } + } +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/template/WxMaTemplateAddResult.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/template/WxMaTemplateAddResult.java new file mode 100644 index 00000000..4b30870d --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/template/WxMaTemplateAddResult.java @@ -0,0 +1,20 @@ +package cn.binarywang.wx.miniapp.bean.template; + +import com.google.gson.annotations.SerializedName; +import lombok.Data; +import me.chanjar.weixin.common.util.json.WxGsonBuilder; + +import java.io.Serializable; + +@Data +public class WxMaTemplateAddResult implements Serializable{ + + private static final long serialVersionUID = 872250961973834465L; + + @SerializedName("template_id") + private String templateId; + + public static WxMaTemplateAddResult fromJson(String json){ + return WxGsonBuilder.create().fromJson(json, WxMaTemplateAddResult.class); + } +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/template/WxMaTemplateLibraryGetResult.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/template/WxMaTemplateLibraryGetResult.java new file mode 100644 index 00000000..e55ed0d5 --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/template/WxMaTemplateLibraryGetResult.java @@ -0,0 +1,31 @@ +package cn.binarywang.wx.miniapp.bean.template; + +import com.google.gson.annotations.SerializedName; +import lombok.Data; +import me.chanjar.weixin.common.util.json.WxGsonBuilder; + +import java.io.Serializable; +import java.util.List; + +@Data +public class WxMaTemplateLibraryGetResult implements Serializable{ + + private static final long serialVersionUID = -190847592776636744L; + private String id; + private String title; + @SerializedName("keyword_list") + private List keywordList; + + @Data + public static class KeywordInfo{ + + @SerializedName("keyword_id") + private int keywordId; + private String name; + private String example; + } + + public static WxMaTemplateLibraryGetResult fromJson(String json){ + return WxGsonBuilder.create().fromJson(json, WxMaTemplateLibraryGetResult.class); + } +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/template/WxMaTemplateLibraryListResult.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/template/WxMaTemplateLibraryListResult.java new file mode 100644 index 00000000..1926971b --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/template/WxMaTemplateLibraryListResult.java @@ -0,0 +1,28 @@ +package cn.binarywang.wx.miniapp.bean.template; + +import com.google.gson.annotations.SerializedName; +import lombok.Data; +import me.chanjar.weixin.common.util.json.WxGsonBuilder; + +import java.io.Serializable; +import java.util.List; + +@Data +public class WxMaTemplateLibraryListResult implements Serializable{ + private static final long serialVersionUID = -2780782521447602209L; + + @SerializedName("total_count") + private int totalCount; + private List list; + + public static WxMaTemplateLibraryListResult fromJson(String json){ + return WxGsonBuilder.create().fromJson(json, WxMaTemplateLibraryListResult.class); + } + + @Data + public static class TemplateItem{ + + private String id; + private String title; + } +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/template/WxMaTemplateListResult.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/template/WxMaTemplateListResult.java new file mode 100644 index 00000000..0537fefc --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/template/WxMaTemplateListResult.java @@ -0,0 +1,29 @@ +package cn.binarywang.wx.miniapp.bean.template; + +import com.google.gson.annotations.SerializedName; +import lombok.Data; +import me.chanjar.weixin.common.util.json.WxGsonBuilder; + +import java.io.Serializable; +import java.util.List; + +@Data +public class WxMaTemplateListResult implements Serializable{ + + private static final long serialVersionUID = -7430535579782184537L; + private List list; + + public static WxMaTemplateListResult fromJson(String json){ + return WxGsonBuilder.create().fromJson(json, WxMaTemplateListResult.class); + } + + @Data + public static class TemplateInfo{ + + @SerializedName("template_id") + private String templateId; + private String title; + private String content; + private String example; + } +} 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 new file mode 100644 index 00000000..5dfa86a8 --- /dev/null +++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaTemplateServiceImplTest.java @@ -0,0 +1,70 @@ +package cn.binarywang.wx.miniapp.api.impl; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.template.WxMaTemplateAddResult; +import cn.binarywang.wx.miniapp.bean.template.WxMaTemplateLibraryGetResult; +import cn.binarywang.wx.miniapp.bean.template.WxMaTemplateLibraryListResult; +import cn.binarywang.wx.miniapp.bean.template.WxMaTemplateListResult; +import cn.binarywang.wx.miniapp.test.ApiTestModule; +import com.google.inject.Inject; +import org.assertj.core.util.Lists; +import org.testng.Assert; +import org.testng.annotations.Guice; +import org.testng.annotations.Test; + +import java.util.List; + +@Test +@Guice(modules = ApiTestModule.class) +public class WxMaTemplateServiceImplTest { + + @Inject + protected WxMaService wxService; + + @Test + public void testFindTemplateLibraryList() throws Exception { + WxMaTemplateLibraryListResult result = this.wxService.getTemplateService().findTemplateLibraryList(0, 20); + Assert.assertEquals(20, result.getList().size()); + } + + @Test + public void testFindTemplateLibraryKeywordList() throws Exception { + WxMaTemplateLibraryGetResult result = this.wxService.getTemplateService().findTemplateLibraryKeywordList("AT0004"); + Assert.assertEquals("AT0004", result.getId()); + Assert.assertEquals("交易提醒", result.getTitle()); + Assert.assertEquals(100, result.getKeywordList().size()); + } + + @Test + public void testAddTemplate() throws Exception{ + List list = Lists.newArrayList(); + list.add(1); + list.add(20); + list.add(84); + + WxMaTemplateAddResult result = this.wxService.getTemplateService().addTemplate("AT0004", list); + Assert.assertNotNull(result.getTemplateId()); + System.out.println(result); + } + + @Test + public void testFindTemplateList() throws Exception{ + WxMaTemplateListResult result = this.wxService.getTemplateService().findTemplateList(0, 20); + System.out.println(result); + } + + @Test + public void testDelTemplate() throws Exception { + + //add + List list = Lists.newArrayList(); + list.add(1); + list.add(20); + list.add(84); + + WxMaTemplateAddResult result = this.wxService.getTemplateService().addTemplate("AT0004", list); + + //delete + this.wxService.getTemplateService().delTemplate(result.getTemplateId()); + } +} diff --git a/weixin-java-miniapp/src/test/resources/test-config.sample.xml b/weixin-java-miniapp/src/test/resources/test-config-sample.xml similarity index 100% rename from weixin-java-miniapp/src/test/resources/test-config.sample.xml rename to weixin-java-miniapp/src/test/resources/test-config-sample.xml