| @@ -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); | |||
| } | |||
| } | |||