mirror of
				https://gitee.com/binary/weixin-java-tools.git
				synced 2025-10-31 10:38:42 +08:00 
			
		
		
		
	#470 增加小程序模板配置相关接口
This commit is contained in:
		| @ -121,6 +121,12 @@ public interface WxMaService { | |||||||
|    */ |    */ | ||||||
|   WxMaQrcodeService getQrcodeService(); |   WxMaQrcodeService getQrcodeService(); | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 返回模板配置相关接口方法的实现类对象, 以方便调用其各个接口 | ||||||
|  |    * @return WxMaTemplateService | ||||||
|  |    */ | ||||||
|  |   WxMaTemplateService getTemplateService(); | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|    * 初始化http请求对象 |    * 初始化http请求对象 | ||||||
|    */ |    */ | ||||||
|  | |||||||
| @ -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"; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * <pre> | ||||||
|  |    * 获取小程序模板库标题列表 | ||||||
|  |    * | ||||||
|  |    * 详情请见: <a href="https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1500465446_j4CgR&token=&lang=zh_CN">获取小程序模板库标题列表</a> | ||||||
|  |    * 接口url格式: https://api.weixin.qq.com/cgi-bin/wxopen/template/library/list?access_token=ACCESS_TOKEN | ||||||
|  |    * </pre> | ||||||
|  |    * @param offset | ||||||
|  |    * @param count | ||||||
|  |    * @return | ||||||
|  |    */ | ||||||
|  |   WxMaTemplateLibraryListResult findTemplateLibraryList(int offset, int count) throws WxErrorException; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * <pre> | ||||||
|  |    * 获取模板库某个模板标题下关键词库 | ||||||
|  |    * | ||||||
|  |    * 详情请见: <a href="https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1500465446_j4CgR&token=&lang=zh_CN">获取小程序模板库标题列表</a> | ||||||
|  |    * 接口url格式: https://api.weixin.qq.com/cgi-bin/wxopen/template/library/get?access_token=ACCESS_TOKEN | ||||||
|  |    * </pre> | ||||||
|  |    * @param id | ||||||
|  |    * @return | ||||||
|  |    */ | ||||||
|  |   WxMaTemplateLibraryGetResult findTemplateLibraryKeywordList(String id) throws WxErrorException; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * <pre> | ||||||
|  |    * 组合模板并添加至帐号下的个人模板库 | ||||||
|  |    * | ||||||
|  |    * 详情请见: <a href="https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1500465446_j4CgR&token=&lang=zh_CN">获取小程序模板库标题列表</a> | ||||||
|  |    * 接口url格式: https://api.weixin.qq.com/cgi-bin/wxopen/template/add?access_token=ACCESS_TOKEN | ||||||
|  |    * </pre> | ||||||
|  |    * @param id | ||||||
|  |    * @param keywordIdList | ||||||
|  |    * @return | ||||||
|  |    */ | ||||||
|  |   WxMaTemplateAddResult addTemplate(String id, List<Integer> keywordIdList) throws WxErrorException; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * <pre> | ||||||
|  |    * 获取帐号下已存在的模板列表 | ||||||
|  |    * | ||||||
|  |    * 详情请见: <a href="https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1500465446_j4CgR&token=&lang=zh_CN">获取小程序模板库标题列表</a> | ||||||
|  |    * 接口url格式: https://api.weixin.qq.com/cgi-bin/wxopen/template/list?access_token=ACCESS_TOKEN | ||||||
|  |    * </pre> | ||||||
|  |    * @param offset | ||||||
|  |    * @param count | ||||||
|  |    * @return | ||||||
|  |    */ | ||||||
|  |   WxMaTemplateListResult findTemplateList(int offset, int count) throws WxErrorException; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * <pre> | ||||||
|  |    * 删除帐号下的某个模板 | ||||||
|  |    * | ||||||
|  |    * 详情请见: <a href="https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1500465446_j4CgR&token=&lang=zh_CN">获取小程序模板库标题列表</a> | ||||||
|  |    * 接口url格式: https://api.weixin.qq.com/cgi-bin/wxopen/template/list?access_token=ACCESS_TOKEN | ||||||
|  |    * </pre> | ||||||
|  |    * @param templateId | ||||||
|  |    */ | ||||||
|  |   boolean delTemplate(String templateId) throws WxErrorException; | ||||||
|  | } | ||||||
| @ -38,6 +38,7 @@ public class WxMaServiceImpl implements WxMaService, RequestHttp<CloseableHttpCl | |||||||
|   private WxMaMediaService materialService = new WxMaMediaServiceImpl(this); |   private WxMaMediaService materialService = new WxMaMediaServiceImpl(this); | ||||||
|   private WxMaUserService userService = new WxMaUserServiceImpl(this); |   private WxMaUserService userService = new WxMaUserServiceImpl(this); | ||||||
|   private WxMaQrcodeService qrCodeService = new WxMaQrcodeServiceImpl(this); |   private WxMaQrcodeService qrCodeService = new WxMaQrcodeServiceImpl(this); | ||||||
|  |   private WxMaTemplateService templateService = new WxMaTemplateServiceImpl(this); | ||||||
|  |  | ||||||
|   private int retrySleepMillis = 1000; |   private int retrySleepMillis = 1000; | ||||||
|   private int maxRetryTimes = 5; |   private int maxRetryTimes = 5; | ||||||
| @ -259,4 +260,9 @@ public class WxMaServiceImpl implements WxMaService, RequestHttp<CloseableHttpCl | |||||||
|   public WxMaQrcodeService getQrcodeService() { |   public WxMaQrcodeService getQrcodeService() { | ||||||
|     return this.qrCodeService; |     return this.qrCodeService; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   @Override | ||||||
|  |   public WxMaTemplateService getTemplateService() { | ||||||
|  |     return this.templateService; | ||||||
|  |   } | ||||||
| } | } | ||||||
|  | |||||||
| @ -0,0 +1,101 @@ | |||||||
|  | package cn.binarywang.wx.miniapp.api.impl; | ||||||
|  |  | ||||||
|  | import cn.binarywang.wx.miniapp.api.WxMaService; | ||||||
|  | import cn.binarywang.wx.miniapp.api.WxMaTemplateService; | ||||||
|  | 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.bean.result.WxError; | ||||||
|  | import me.chanjar.weixin.common.exception.WxErrorException; | ||||||
|  | import me.chanjar.weixin.common.util.json.WxGsonBuilder; | ||||||
|  |  | ||||||
|  | import java.util.HashMap; | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.Map; | ||||||
|  |  | ||||||
|  | public class WxMaTemplateServiceImpl implements WxMaTemplateService { | ||||||
|  |  | ||||||
|  |   private WxMaService wxMaService; | ||||||
|  |  | ||||||
|  |   public WxMaTemplateServiceImpl(WxMaService wxMaService){ | ||||||
|  |     this.wxMaService = wxMaService; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   @Override | ||||||
|  |   public WxMaTemplateLibraryListResult findTemplateLibraryList(int offset, int count) throws WxErrorException { | ||||||
|  |  | ||||||
|  |     Map<String, Integer> 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<String, String> 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<Integer> keywordIdList) throws WxErrorException { | ||||||
|  |  | ||||||
|  |     Map<String, Object> 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<String, Integer> 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<String, String> 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); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
| @ -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); | ||||||
|  |   } | ||||||
|  | } | ||||||
| @ -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<KeywordInfo> 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); | ||||||
|  |   } | ||||||
|  | } | ||||||
| @ -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<TemplateItem> 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; | ||||||
|  |   } | ||||||
|  | } | ||||||
| @ -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<TemplateInfo> 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; | ||||||
|  |   } | ||||||
|  | } | ||||||
| @ -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<Integer> 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<Integer> 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()); | ||||||
|  |   } | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user
	 IOMan
					IOMan