mirror of
				https://gitee.com/binary/weixin-java-tools.git
				synced 2025-10-31 10:38:42 +08:00 
			
		
		
		
	添加获得模板列表的接口方法,并重构模板消息相关类包结构 for issue #63
This commit is contained in:
		| @ -1,8 +1,11 @@ | ||||
| package me.chanjar.weixin.mp.api; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| import me.chanjar.weixin.common.exception.WxErrorException; | ||||
| import me.chanjar.weixin.mp.bean.WxMpIndustry; | ||||
| import me.chanjar.weixin.mp.bean.WxMpTemplateMessage; | ||||
| import me.chanjar.weixin.mp.bean.template.WxMpTemplate; | ||||
| import me.chanjar.weixin.mp.bean.template.WxMpTemplateIndustry; | ||||
| import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage; | ||||
|  | ||||
| /** | ||||
|  * <pre> | ||||
| @ -24,7 +27,7 @@ public interface WxMpTemplateMsgService { | ||||
|    * | ||||
|    * @return 是否成功 | ||||
|    */ | ||||
|   boolean setIndustry(WxMpIndustry wxMpIndustry) throws WxErrorException; | ||||
|   boolean setIndustry(WxMpTemplateIndustry wxMpIndustry) throws WxErrorException; | ||||
|  | ||||
|   /*** | ||||
|    * <pre> | ||||
| @ -34,7 +37,7 @@ public interface WxMpTemplateMsgService { | ||||
|    * | ||||
|    * @return wxMpIndustry | ||||
|    */ | ||||
|   WxMpIndustry getIndustry() throws WxErrorException; | ||||
|   WxMpTemplateIndustry getIndustry() throws WxErrorException; | ||||
|  | ||||
|   /** | ||||
|    * <pre> | ||||
| @ -53,8 +56,20 @@ public interface WxMpTemplateMsgService { | ||||
|    * 详情请见: http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277&token=&lang=zh_CN | ||||
|    * 接口地址格式:https://api.weixin.qq.com/cgi-bin/template/api_add_template?access_token=ACCESS_TOKEN | ||||
|    * </pre> | ||||
|    *@param shortTemplateId 模板库中模板的编号,有“TM**”和“OPENTMTM**”等形式 | ||||
|    * @param shortTemplateId 模板库中模板的编号,有“TM**”和“OPENTMTM**”等形式 | ||||
|    * @return templateId 模板Id | ||||
|    */ | ||||
|   String addTemplate(String shortTemplateId) throws WxErrorException; | ||||
|  | ||||
|   /** | ||||
|    * <pre> | ||||
|    * 获取模板列表 | ||||
|    * 获取已添加至帐号下所有模板列表,可在MP中查看模板列表信息,为方便第三方开发者,提供通过接口调用的方式来获取帐号下所有模板信息 | ||||
|    * 详情请见: http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277&token=&lang=zh_CN | ||||
|    * 接口地址格式:https://api.weixin.qq.com/cgi-bin/template/get_all_private_template?access_token=ACCESS_TOKEN | ||||
|    * </pre> | ||||
|    *  | ||||
|    * @return templateId 模板Id | ||||
|    */ | ||||
|   List<WxMpTemplate> getAllPrivateTemplate() throws WxErrorException; | ||||
| } | ||||
|  | ||||
| @ -1,5 +1,7 @@ | ||||
| package me.chanjar.weixin.mp.api.impl; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| import com.google.gson.JsonObject; | ||||
| import com.google.gson.JsonParser; | ||||
|  | ||||
| @ -7,8 +9,9 @@ import me.chanjar.weixin.common.bean.result.WxError; | ||||
| import me.chanjar.weixin.common.exception.WxErrorException; | ||||
| import me.chanjar.weixin.mp.api.WxMpService; | ||||
| import me.chanjar.weixin.mp.api.WxMpTemplateMsgService; | ||||
| import me.chanjar.weixin.mp.bean.WxMpIndustry; | ||||
| import me.chanjar.weixin.mp.bean.WxMpTemplateMessage; | ||||
| import me.chanjar.weixin.mp.bean.template.WxMpTemplate; | ||||
| import me.chanjar.weixin.mp.bean.template.WxMpTemplateIndustry; | ||||
| import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage; | ||||
|  | ||||
| /** | ||||
|  * <pre> | ||||
| @ -38,7 +41,7 @@ public class WxMpTemplateMsgServiceImpl implements WxMpTemplateMsgService { | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public boolean setIndustry(WxMpIndustry wxMpIndustry) throws WxErrorException { | ||||
|   public boolean setIndustry(WxMpTemplateIndustry wxMpIndustry) throws WxErrorException { | ||||
|     if (null == wxMpIndustry.getPrimaryIndustry() || null == wxMpIndustry.getPrimaryIndustry().getId() | ||||
|       || null == wxMpIndustry.getSecondIndustry() || null == wxMpIndustry.getSecondIndustry().getId()) { | ||||
|       throw new IllegalArgumentException("行业Id不能为空,请核实"); | ||||
| @ -50,10 +53,10 @@ public class WxMpTemplateMsgServiceImpl implements WxMpTemplateMsgService { | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public WxMpIndustry getIndustry() throws WxErrorException { | ||||
|   public WxMpTemplateIndustry getIndustry() throws WxErrorException { | ||||
|     String url = API_URL_PREFIX + "/get_industry"; | ||||
|     String responseContent = this.wxMpService.get(url, null); | ||||
|     return WxMpIndustry.fromJson(responseContent); | ||||
|     return WxMpTemplateIndustry.fromJson(responseContent); | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
| @ -70,4 +73,10 @@ public class WxMpTemplateMsgServiceImpl implements WxMpTemplateMsgService { | ||||
|     throw new WxErrorException(WxError.fromJson(responseContent)); | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public List<WxMpTemplate> getAllPrivateTemplate() throws WxErrorException { | ||||
|     String url = API_URL_PREFIX + "/get_all_private_template"; | ||||
|     return WxMpTemplate.fromJson(this.wxMpService.get(url, null)); | ||||
|   } | ||||
|  | ||||
| } | ||||
|  | ||||
| @ -0,0 +1,126 @@ | ||||
| package me.chanjar.weixin.mp.bean.template; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| import org.apache.commons.lang3.builder.ToStringBuilder; | ||||
| import org.apache.commons.lang3.builder.ToStringStyle; | ||||
|  | ||||
| import com.google.gson.JsonParser; | ||||
| import com.google.gson.annotations.SerializedName; | ||||
| import com.google.gson.reflect.TypeToken; | ||||
|  | ||||
| import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; | ||||
|  | ||||
| /** | ||||
|  * <pre> | ||||
|  * 模板列表信息 | ||||
|  * Created by Binary Wang on 2016-10-17. | ||||
|  * @author <a href="https://github.com/binarywang">binarywang(Binary Wang)</a> | ||||
|  * </pre> | ||||
|  */ | ||||
| public class WxMpTemplate { | ||||
|  | ||||
|   private static final JsonParser JSON_PARSER = new JsonParser(); | ||||
|  | ||||
|   public static List<WxMpTemplate> fromJson(String json) { | ||||
|     return WxMpGsonBuilder.create().fromJson(JSON_PARSER.parse(json).getAsJsonObject().get("template_list"), | ||||
|         new TypeToken<List<WxMpTemplate>>() { | ||||
|         }.getType()); | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public String toString() { | ||||
|     return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE); | ||||
|   } | ||||
|    | ||||
|   /** | ||||
|    * template_id | ||||
|    * 模板ID | ||||
|    */ | ||||
|   @SerializedName("template_id") | ||||
|   private String templateId; | ||||
|  | ||||
|   /** | ||||
|    * title | ||||
|    * 模板标题 | ||||
|    */ | ||||
|   @SerializedName("title") | ||||
|   private String title; | ||||
|  | ||||
|   /** | ||||
|    * primary_industry | ||||
|    * 模板所属行业的一级行业 | ||||
|    */ | ||||
|   @SerializedName("primary_industry") | ||||
|   private String primaryIndustry; | ||||
|  | ||||
|   /** | ||||
|    * deputy_industry | ||||
|    * 模板所属行业的二级行业 | ||||
|    */ | ||||
|   @SerializedName("deputy_industry") | ||||
|   private String deputyIndustry; | ||||
|  | ||||
|   /** | ||||
|    * content | ||||
|    * 模板内容 | ||||
|    */ | ||||
|   @SerializedName("content") | ||||
|   private String content; | ||||
|  | ||||
|   /** | ||||
|    * example | ||||
|    * 模板示例 | ||||
|    */ | ||||
|   @SerializedName("example") | ||||
|   private String example; | ||||
|  | ||||
|   public String getTemplateId() { | ||||
|     return templateId; | ||||
|   } | ||||
|  | ||||
|   public void setTemplateId(String templateId) { | ||||
|     this.templateId = templateId; | ||||
|   } | ||||
|  | ||||
|   public String getTitle() { | ||||
|     return title; | ||||
|   } | ||||
|  | ||||
|   public void setTitle(String title) { | ||||
|     this.title = title; | ||||
|   } | ||||
|  | ||||
|   public String getPrimaryIndustry() { | ||||
|     return primaryIndustry; | ||||
|   } | ||||
|  | ||||
|   public void setPrimaryIndustry(String primaryIndustry) { | ||||
|     this.primaryIndustry = primaryIndustry; | ||||
|   } | ||||
|  | ||||
|   public String getDeputyIndustry() { | ||||
|     return deputyIndustry; | ||||
|   } | ||||
|  | ||||
|   public void setDeputyIndustry(String deputyIndustry) { | ||||
|     this.deputyIndustry = deputyIndustry; | ||||
|   } | ||||
|  | ||||
|   public String getContent() { | ||||
|     return content; | ||||
|   } | ||||
|  | ||||
|   public void setContent(String content) { | ||||
|     this.content = content; | ||||
|   } | ||||
|  | ||||
|   public String getExample() { | ||||
|     return example; | ||||
|   } | ||||
|  | ||||
|   public void setExample(String example) { | ||||
|     this.example = example; | ||||
|   } | ||||
|  | ||||
| } | ||||
| @ -1,4 +1,4 @@ | ||||
| package me.chanjar.weixin.mp.bean; | ||||
| package me.chanjar.weixin.mp.bean.template; | ||||
| 
 | ||||
| import java.io.Serializable; | ||||
| 
 | ||||
| @ -1,4 +1,4 @@ | ||||
| package me.chanjar.weixin.mp.bean; | ||||
| package me.chanjar.weixin.mp.bean.template; | ||||
| 
 | ||||
| 
 | ||||
| import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; | ||||
| @ -10,15 +10,15 @@ import java.io.Serializable; | ||||
| /** | ||||
|  * @author miller | ||||
|  */ | ||||
| public class WxMpIndustry implements Serializable { | ||||
| public class WxMpTemplateIndustry implements Serializable { | ||||
|   private static final long serialVersionUID = -7700398224795914722L; | ||||
|   private Industry primaryIndustry; | ||||
|   private Industry secondIndustry; | ||||
| 
 | ||||
|   public WxMpIndustry() { | ||||
|   public WxMpTemplateIndustry() { | ||||
|   } | ||||
| 
 | ||||
|   public WxMpIndustry(Industry primaryIndustry, Industry secondIndustry) { | ||||
|   public WxMpTemplateIndustry(Industry primaryIndustry, Industry secondIndustry) { | ||||
|     this.primaryIndustry = primaryIndustry; | ||||
|     this.secondIndustry = secondIndustry; | ||||
|   } | ||||
| @ -81,8 +81,8 @@ public class WxMpIndustry implements Serializable { | ||||
|     return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE); | ||||
|   } | ||||
| 
 | ||||
|   public static WxMpIndustry fromJson(String json) { | ||||
|     return WxMpGsonBuilder.create().fromJson(json, WxMpIndustry.class); | ||||
|   public static WxMpTemplateIndustry fromJson(String json) { | ||||
|     return WxMpGsonBuilder.create().fromJson(json, WxMpTemplateIndustry.class); | ||||
|   } | ||||
| 
 | ||||
|   public String toJson() { | ||||
| @ -1,4 +1,4 @@ | ||||
| package me.chanjar.weixin.mp.bean; | ||||
| package me.chanjar.weixin.mp.bean.template; | ||||
| 
 | ||||
| import java.io.Serializable; | ||||
| import java.util.ArrayList; | ||||
| @ -5,7 +5,6 @@ import com.google.gson.GsonBuilder; | ||||
|  | ||||
| import me.chanjar.weixin.mp.bean.WxMpCard; | ||||
| import me.chanjar.weixin.mp.bean.WxMpCustomMessage; | ||||
| import me.chanjar.weixin.mp.bean.WxMpIndustry; | ||||
| import me.chanjar.weixin.mp.bean.WxMpMassNews; | ||||
| import me.chanjar.weixin.mp.bean.WxMpMassOpenIdsMessage; | ||||
| import me.chanjar.weixin.mp.bean.WxMpMassPreviewMessage; | ||||
| @ -13,7 +12,6 @@ import me.chanjar.weixin.mp.bean.WxMpMassTagMessage; | ||||
| import me.chanjar.weixin.mp.bean.WxMpMassVideo; | ||||
| import me.chanjar.weixin.mp.bean.WxMpMaterialArticleUpdate; | ||||
| import me.chanjar.weixin.mp.bean.WxMpMaterialNews; | ||||
| import me.chanjar.weixin.mp.bean.WxMpTemplateMessage; | ||||
| import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserCumulate; | ||||
| import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserSummary; | ||||
| import me.chanjar.weixin.mp.bean.result.WxMediaImgUploadResult; | ||||
| @ -31,6 +29,8 @@ import me.chanjar.weixin.mp.bean.result.WxMpSemanticQueryResult; | ||||
| import me.chanjar.weixin.mp.bean.result.WxMpUser; | ||||
| import me.chanjar.weixin.mp.bean.result.WxMpUserBlacklistGetResult; | ||||
| import me.chanjar.weixin.mp.bean.result.WxMpUserList; | ||||
| import me.chanjar.weixin.mp.bean.template.WxMpTemplateIndustry; | ||||
| import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage; | ||||
|  | ||||
| public class WxMpGsonBuilder { | ||||
|  | ||||
| @ -68,7 +68,7 @@ public class WxMpGsonBuilder { | ||||
|     INSTANCE.registerTypeAdapter(WxMpCard.class, new WxMpCardGsonAdapter()); | ||||
|     INSTANCE.registerTypeAdapter(WxMpMassPreviewMessage.class, new WxMpMassPreviewMessageGsonAdapter()); | ||||
|     INSTANCE.registerTypeAdapter(WxMediaImgUploadResult.class, new WxMediaImgUploadResultGsonAdapter()); | ||||
|     INSTANCE.registerTypeAdapter(WxMpIndustry.class, new WxMpIndustryGsonAdapter()); | ||||
|     INSTANCE.registerTypeAdapter(WxMpTemplateIndustry.class, new WxMpIndustryGsonAdapter()); | ||||
|     INSTANCE.registerTypeAdapter(WxMpUserBlacklistGetResult.class, new WxUserBlacklistGetResultGsonAdapter()); | ||||
|   } | ||||
|  | ||||
|  | ||||
| @ -2,7 +2,7 @@ package me.chanjar.weixin.mp.util.json; | ||||
|  | ||||
| import com.google.gson.*; | ||||
| import me.chanjar.weixin.common.util.json.GsonHelper; | ||||
| import me.chanjar.weixin.mp.bean.WxMpIndustry; | ||||
| import me.chanjar.weixin.mp.bean.template.WxMpTemplateIndustry; | ||||
|  | ||||
| import java.lang.reflect.Type; | ||||
|  | ||||
| @ -10,9 +10,9 @@ import java.lang.reflect.Type; | ||||
|  * @author miller | ||||
|  */ | ||||
| public class WxMpIndustryGsonAdapter | ||||
|     implements JsonSerializer<WxMpIndustry>, JsonDeserializer<WxMpIndustry> { | ||||
|     implements JsonSerializer<WxMpTemplateIndustry>, JsonDeserializer<WxMpTemplateIndustry> { | ||||
|   @Override | ||||
|   public JsonElement serialize(WxMpIndustry wxMpIndustry, Type type, | ||||
|   public JsonElement serialize(WxMpTemplateIndustry wxMpIndustry, Type type, | ||||
|       JsonSerializationContext jsonSerializationContext) { | ||||
|     JsonObject json = new JsonObject(); | ||||
|     json.addProperty("industry_id1", wxMpIndustry.getPrimaryIndustry().getId()); | ||||
| @ -21,10 +21,10 @@ public class WxMpIndustryGsonAdapter | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public WxMpIndustry deserialize(JsonElement jsonElement, Type type, | ||||
|   public WxMpTemplateIndustry deserialize(JsonElement jsonElement, Type type, | ||||
|       JsonDeserializationContext jsonDeserializationContext) | ||||
|       throws JsonParseException { | ||||
|     WxMpIndustry wxMpIndustry = new WxMpIndustry(); | ||||
|     WxMpTemplateIndustry wxMpIndustry = new WxMpTemplateIndustry(); | ||||
|     JsonObject primaryIndustry = jsonElement.getAsJsonObject() | ||||
|         .get("primary_industry").getAsJsonObject(); | ||||
|     wxMpIndustry.setPrimaryIndustry(convertFromJson(primaryIndustry)); | ||||
| @ -34,8 +34,8 @@ public class WxMpIndustryGsonAdapter | ||||
|     return wxMpIndustry; | ||||
|   } | ||||
|  | ||||
|   private static WxMpIndustry.Industry convertFromJson(JsonObject json) { | ||||
|     WxMpIndustry.Industry industry = new WxMpIndustry.Industry(); | ||||
|   private static WxMpTemplateIndustry.Industry convertFromJson(JsonObject json) { | ||||
|     WxMpTemplateIndustry.Industry industry = new WxMpTemplateIndustry.Industry(); | ||||
|     industry.setFirstClass(GsonHelper.getString(json, "first_class")); | ||||
|     industry.setSecondClass(GsonHelper.getString(json, "second_class")); | ||||
|     return industry; | ||||
|  | ||||
| @ -12,8 +12,9 @@ import com.google.gson.JsonElement; | ||||
| import com.google.gson.JsonObject; | ||||
| import com.google.gson.JsonSerializationContext; | ||||
| import com.google.gson.JsonSerializer; | ||||
| import me.chanjar.weixin.mp.bean.WxMpTemplateData; | ||||
| import me.chanjar.weixin.mp.bean.WxMpTemplateMessage; | ||||
|  | ||||
| import me.chanjar.weixin.mp.bean.template.WxMpTemplateData; | ||||
| import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage; | ||||
|  | ||||
| import java.lang.reflect.Type; | ||||
|  | ||||
|  | ||||
| @ -2,6 +2,7 @@ package me.chanjar.weixin.mp.api.impl; | ||||
|  | ||||
| import java.text.SimpleDateFormat; | ||||
| import java.util.Date; | ||||
| import java.util.List; | ||||
|  | ||||
| import org.testng.Assert; | ||||
| import org.testng.annotations.Guice; | ||||
| @ -12,9 +13,10 @@ import com.google.inject.Inject; | ||||
| import me.chanjar.weixin.common.exception.WxErrorException; | ||||
| import me.chanjar.weixin.mp.api.ApiTestModule; | ||||
| import me.chanjar.weixin.mp.api.WxXmlMpInMemoryConfigStorage; | ||||
| import me.chanjar.weixin.mp.bean.WxMpIndustry; | ||||
| import me.chanjar.weixin.mp.bean.WxMpTemplateData; | ||||
| import me.chanjar.weixin.mp.bean.WxMpTemplateMessage; | ||||
| import me.chanjar.weixin.mp.bean.template.WxMpTemplate; | ||||
| import me.chanjar.weixin.mp.bean.template.WxMpTemplateData; | ||||
| import me.chanjar.weixin.mp.bean.template.WxMpTemplateIndustry; | ||||
| import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage; | ||||
|  | ||||
| /** | ||||
|  * <pre> | ||||
| @ -45,15 +47,15 @@ public class WxMpTemplateMsgServiceImplTest { | ||||
|  | ||||
|   @Test | ||||
|   public void testGetIndustry() throws Exception { | ||||
|     final WxMpIndustry industry = this.wxService.getTemplateMsgService().getIndustry(); | ||||
|     final WxMpTemplateIndustry industry = this.wxService.getTemplateMsgService().getIndustry(); | ||||
|     Assert.assertNotNull(industry); | ||||
|     System.out.println(industry); | ||||
|   } | ||||
|  | ||||
|   @Test | ||||
|   public void testSetIndustry() throws Exception { | ||||
|     WxMpIndustry industry = new WxMpIndustry(new WxMpIndustry.Industry("1"), | ||||
|         new WxMpIndustry.Industry("04")); | ||||
|     WxMpTemplateIndustry industry = new WxMpTemplateIndustry(new WxMpTemplateIndustry.Industry("1"), | ||||
|         new WxMpTemplateIndustry.Industry("04")); | ||||
|     boolean result = this.wxService.getTemplateMsgService().setIndustry(industry); | ||||
|     Assert.assertTrue(result); | ||||
|   } | ||||
| @ -65,4 +67,11 @@ public class WxMpTemplateMsgServiceImplTest { | ||||
|     System.err.println(result); | ||||
|   } | ||||
|  | ||||
|   @Test | ||||
|   public void testGetAllPrivateTemplate() throws Exception { | ||||
|     List<WxMpTemplate> result = this.wxService.getTemplateMsgService().getAllPrivateTemplate(); | ||||
|     Assert.assertNotNull(result); | ||||
|     System.err.println(result); | ||||
|   } | ||||
|  | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Binary Wang
					Binary Wang