| @@ -5,6 +5,7 @@ import java.util.ArrayList; | |||||
| import java.util.List; | import java.util.List; | ||||
| import lombok.Data; | import lombok.Data; | ||||
| import me.chanjar.weixin.mp.bean.material.WxMpNewsArticle; | |||||
| import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; | import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; | ||||
| /** | /** | ||||
| @@ -16,9 +17,9 @@ import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; | |||||
| public class WxMpMassNews implements Serializable { | public class WxMpMassNews implements Serializable { | ||||
| private static final long serialVersionUID = 565937155013581016L; | private static final long serialVersionUID = 565937155013581016L; | ||||
| private List<WxMpMassNewsArticle> articles = new ArrayList<>(); | |||||
| private List<WxMpNewsArticle> articles = new ArrayList<>(); | |||||
| public void addArticle(WxMpMassNewsArticle article) { | |||||
| public void addArticle(WxMpNewsArticle article) { | |||||
| this.articles.add(article); | this.articles.add(article); | ||||
| } | } | ||||
| @@ -35,54 +36,4 @@ public class WxMpMassNews implements Serializable { | |||||
| return WxMpGsonBuilder.create().toJson(this); | return WxMpGsonBuilder.create().toJson(this); | ||||
| } | } | ||||
| /** | |||||
| * <pre> | |||||
| * 群发图文消息article. | |||||
| * 1. thumbMediaId (必填) 图文消息缩略图的media_id,可以在基础支持-上传多媒体文件接口中获得 | |||||
| * 2. author 图文消息的作者 | |||||
| * 3. title (必填) 图文消息的标题 | |||||
| * 4. contentSourceUrl 在图文消息页面点击“阅读原文”后的页面链接 | |||||
| * 5. content (必填) 图文消息页面的内容,支持HTML标签 | |||||
| * 6. digest 图文消息的描述 | |||||
| * 7, showCoverPic 是否显示封面,true为显示,false为不显示 | |||||
| * </pre> | |||||
| * | |||||
| * @author chanjarster | |||||
| */ | |||||
| @Data | |||||
| public static class WxMpMassNewsArticle { | |||||
| /** | |||||
| * (必填) 图文消息缩略图的media_id,可以在基础支持-上传多媒体文件接口中获得. | |||||
| */ | |||||
| private String thumbMediaId; | |||||
| /** | |||||
| * 图文消息的作者. | |||||
| */ | |||||
| private String author; | |||||
| /** | |||||
| * (必填) 图文消息的标题. | |||||
| */ | |||||
| private String title; | |||||
| /** | |||||
| * 在图文消息页面点击“阅读原文”后的页面链接. | |||||
| */ | |||||
| private String contentSourceUrl; | |||||
| /** | |||||
| * (必填) 图文消息页面的内容,支持HTML标签. | |||||
| */ | |||||
| private String content; | |||||
| /** | |||||
| * 图文消息的描述. | |||||
| */ | |||||
| private String digest; | |||||
| /** | |||||
| * 是否显示封面,true为显示,false为不显示. | |||||
| */ | |||||
| private boolean showCoverPic; | |||||
| @Override | |||||
| public String toString() { | |||||
| return WxMpGsonBuilder.create().toJson(this); | |||||
| } | |||||
| } | |||||
| } | } | ||||
| @@ -11,7 +11,7 @@ public class WxMpMaterialArticleUpdate implements Serializable { | |||||
| private String mediaId; | private String mediaId; | ||||
| private int index; | private int index; | ||||
| private WxMpMaterialNews.WxMpMaterialNewsArticle articles; | |||||
| private WxMpNewsArticle articles; | |||||
| public String toJson() { | public String toJson() { | ||||
| return WxMpGsonBuilder.create().toJson(this); | return WxMpGsonBuilder.create().toJson(this); | ||||
| @@ -20,13 +20,13 @@ public class WxMpMaterialNews implements Serializable { | |||||
| private Date createTime; | private Date createTime; | ||||
| private Date updateTime; | private Date updateTime; | ||||
| private List<WxMpMaterialNewsArticle> articles = new ArrayList<>(); | |||||
| private List<WxMpNewsArticle> articles = new ArrayList<>(); | |||||
| public List<WxMpMaterialNewsArticle> getArticles() { | |||||
| public List<WxMpNewsArticle> getArticles() { | |||||
| return this.articles; | return this.articles; | ||||
| } | } | ||||
| public void addArticle(WxMpMaterialNewsArticle article) { | |||||
| public void addArticle(WxMpNewsArticle article) { | |||||
| this.articles.add(article); | this.articles.add(article); | ||||
| } | } | ||||
| @@ -43,80 +43,4 @@ public class WxMpMaterialNews implements Serializable { | |||||
| return this.toJson(); | return this.toJson(); | ||||
| } | } | ||||
| /** | |||||
| * <pre> | |||||
| * 群发图文消息article. | |||||
| * 1. thumbMediaId (必填) 图文消息的封面图片素材id(必须是永久mediaID) | |||||
| * 2. author 图文消息的作者 | |||||
| * 3. title (必填) 图文消息的标题 | |||||
| * 4. contentSourceUrl 在图文消息页面点击“阅读原文”后的页面链接 | |||||
| * 5. content (必填) 图文消息页面的内容,支持HTML标签 | |||||
| * 6. digest 图文消息的描述 | |||||
| * 7. showCoverPic 是否显示封面,true为显示,false为不显示 | |||||
| * 8. url 点击图文消息跳转链接 | |||||
| * 9. need_open_comment(新增字段) 否 Uint32 是否打开评论,0不打开,1打开 | |||||
| * 10. only_fans_can_comment(新增字段) 否 Uint32 是否粉丝才可评论,0所有人可评论,1粉丝才可评论 | |||||
| * </pre> | |||||
| * | |||||
| * @author chanjarster | |||||
| */ | |||||
| @Data | |||||
| public static class WxMpMaterialNewsArticle implements Serializable{ | |||||
| private static final long serialVersionUID = -635384661692321171L; | |||||
| /** | |||||
| * (必填) 图文消息缩略图的media_id,可以在基础支持-上传多媒体文件接口中获得. | |||||
| */ | |||||
| private String thumbMediaId; | |||||
| /** | |||||
| * 图文消息的封面url. | |||||
| */ | |||||
| private String thumbUrl; | |||||
| /** | |||||
| * 图文消息的作者. | |||||
| */ | |||||
| private String author; | |||||
| /** | |||||
| * (必填) 图文消息的标题. | |||||
| */ | |||||
| private String title; | |||||
| /** | |||||
| * 在图文消息页面点击“阅读原文”后的页面链接. | |||||
| */ | |||||
| private String contentSourceUrl; | |||||
| /** | |||||
| * (必填) 图文消息页面的内容,支持HTML标签. | |||||
| */ | |||||
| private String content; | |||||
| /** | |||||
| * 图文消息的描述. | |||||
| */ | |||||
| private String digest; | |||||
| /** | |||||
| * 是否显示封面,true为显示,false为不显示. | |||||
| */ | |||||
| private boolean showCoverPic; | |||||
| /** | |||||
| * 点击图文消息跳转链接. | |||||
| */ | |||||
| private String url; | |||||
| /** | |||||
| * need_open_comment | |||||
| * 是否打开评论,0不打开,1打开. | |||||
| */ | |||||
| private Boolean needOpenComment; | |||||
| /** | |||||
| * only_fans_can_comment | |||||
| * 是否粉丝才可评论,0所有人可评论,1粉丝才可评论. | |||||
| */ | |||||
| private Boolean onlyFansCanComment; | |||||
| @Override | |||||
| public String toString() { | |||||
| return WxMpGsonBuilder.create().toJson(this); | |||||
| } | |||||
| } | |||||
| } | } | ||||
| @@ -0,0 +1,82 @@ | |||||
| package me.chanjar.weixin.mp.bean.material; | |||||
| import lombok.Data; | |||||
| import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; | |||||
| import java.io.Serializable; | |||||
| /** | |||||
| * <pre> | |||||
| * 图文消息article. | |||||
| * 1. thumbMediaId (必填) 图文消息的封面图片素材id(必须是永久mediaID) | |||||
| * 2. author 图文消息的作者 | |||||
| * 3. title (必填) 图文消息的标题 | |||||
| * 4. contentSourceUrl 在图文消息页面点击“阅读原文”后的页面链接 | |||||
| * 5. content (必填) 图文消息页面的内容,支持HTML标签 | |||||
| * 6. digest 图文消息的描述 | |||||
| * 7. showCoverPic 是否显示封面,true为显示,false为不显示 | |||||
| * 8. url 点击图文消息跳转链接 | |||||
| * 9. need_open_comment(新增字段) 否 Uint32 是否打开评论,0不打开,1打开 | |||||
| * 10. only_fans_can_comment(新增字段) 否 Uint32 是否粉丝才可评论,0所有人可评论,1粉丝才可评论 | |||||
| * </pre> | |||||
| * | |||||
| * @author chanjarster | |||||
| */ | |||||
| @Data | |||||
| public class WxMpNewsArticle implements Serializable { | |||||
| private static final long serialVersionUID = -635384661692321171L; | |||||
| /** | |||||
| * (必填) 图文消息缩略图的media_id,可以在基础支持-上传多媒体文件接口中获得. | |||||
| */ | |||||
| private String thumbMediaId; | |||||
| /** | |||||
| * 图文消息的封面url. | |||||
| */ | |||||
| private String thumbUrl; | |||||
| /** | |||||
| * 图文消息的作者. | |||||
| */ | |||||
| private String author; | |||||
| /** | |||||
| * (必填) 图文消息的标题. | |||||
| */ | |||||
| private String title; | |||||
| /** | |||||
| * 在图文消息页面点击“阅读原文”后的页面链接. | |||||
| */ | |||||
| private String contentSourceUrl; | |||||
| /** | |||||
| * (必填) 图文消息页面的内容,支持HTML标签. | |||||
| */ | |||||
| private String content; | |||||
| /** | |||||
| * 图文消息的描述. | |||||
| */ | |||||
| private String digest; | |||||
| /** | |||||
| * 是否显示封面,true为显示,false为不显示. | |||||
| */ | |||||
| private boolean showCoverPic; | |||||
| /** | |||||
| * 点击图文消息跳转链接. | |||||
| */ | |||||
| private String url; | |||||
| /** | |||||
| * need_open_comment | |||||
| * 是否打开评论,0不打开,1打开. | |||||
| */ | |||||
| private Boolean needOpenComment; | |||||
| /** | |||||
| * only_fans_can_comment | |||||
| * 是否粉丝才可评论,0所有人可评论,1粉丝才可评论. | |||||
| */ | |||||
| private Boolean onlyFansCanComment; | |||||
| @Override | |||||
| public String toString() { | |||||
| return WxMpGsonBuilder.create().toJson(this); | |||||
| } | |||||
| } | |||||
| @@ -8,10 +8,10 @@ import me.chanjar.weixin.mp.bean.card.WxMpCardResult; | |||||
| import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserCumulate; | import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserCumulate; | ||||
| import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserSummary; | import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserSummary; | ||||
| import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage; | import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage; | ||||
| import me.chanjar.weixin.mp.bean.material.*; | |||||
| import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardActivateTempInfoResult; | import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardActivateTempInfoResult; | ||||
| import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardUpdateResult; | import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardUpdateResult; | ||||
| import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardUserInfoResult; | import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardUserInfoResult; | ||||
| import me.chanjar.weixin.mp.bean.material.*; | |||||
| import me.chanjar.weixin.mp.bean.result.*; | import me.chanjar.weixin.mp.bean.result.*; | ||||
| import me.chanjar.weixin.mp.bean.subscribe.WxMpSubscribeMessage; | import me.chanjar.weixin.mp.bean.subscribe.WxMpSubscribeMessage; | ||||
| import me.chanjar.weixin.mp.bean.template.WxMpTemplateIndustry; | import me.chanjar.weixin.mp.bean.template.WxMpTemplateIndustry; | ||||
| @@ -45,11 +45,10 @@ public class WxMpGsonBuilder { | |||||
| INSTANCE.registerTypeAdapter(WxDataCubeUserCumulate.class, new WxMpUserCumulateGsonAdapter()); | INSTANCE.registerTypeAdapter(WxDataCubeUserCumulate.class, new WxMpUserCumulateGsonAdapter()); | ||||
| INSTANCE.registerTypeAdapter(WxMpMaterialUploadResult.class, new WxMpMaterialUploadResultAdapter()); | INSTANCE.registerTypeAdapter(WxMpMaterialUploadResult.class, new WxMpMaterialUploadResultAdapter()); | ||||
| INSTANCE.registerTypeAdapter(WxMpMaterialVideoInfoResult.class, new WxMpMaterialVideoInfoResultAdapter()); | INSTANCE.registerTypeAdapter(WxMpMaterialVideoInfoResult.class, new WxMpMaterialVideoInfoResultAdapter()); | ||||
| INSTANCE.registerTypeAdapter(WxMpMassNews.WxMpMassNewsArticle.class, new WxMpMassNewsArticleGsonAdapter()); | |||||
| INSTANCE.registerTypeAdapter(WxMpMaterialArticleUpdate.class, new WxMpMaterialArticleUpdateGsonAdapter()); | INSTANCE.registerTypeAdapter(WxMpMaterialArticleUpdate.class, new WxMpMaterialArticleUpdateGsonAdapter()); | ||||
| INSTANCE.registerTypeAdapter(WxMpMaterialCountResult.class, new WxMpMaterialCountResultAdapter()); | INSTANCE.registerTypeAdapter(WxMpMaterialCountResult.class, new WxMpMaterialCountResultAdapter()); | ||||
| INSTANCE.registerTypeAdapter(WxMpMaterialNews.class, new WxMpMaterialNewsGsonAdapter()); | INSTANCE.registerTypeAdapter(WxMpMaterialNews.class, new WxMpMaterialNewsGsonAdapter()); | ||||
| INSTANCE.registerTypeAdapter(WxMpMaterialNews.WxMpMaterialNewsArticle.class, new WxMpMaterialNewsArticleGsonAdapter()); | |||||
| INSTANCE.registerTypeAdapter(WxMpNewsArticle.class, new WxMpNewsArticleGsonAdapter()); | |||||
| INSTANCE.registerTypeAdapter(WxMpMaterialNewsBatchGetResult.class, new WxMpMaterialNewsBatchGetGsonAdapter()); | INSTANCE.registerTypeAdapter(WxMpMaterialNewsBatchGetResult.class, new WxMpMaterialNewsBatchGetGsonAdapter()); | ||||
| INSTANCE.registerTypeAdapter(WxMpMaterialNewsBatchGetResult.WxMaterialNewsBatchGetNewsItem.class, new WxMpMaterialNewsBatchGetGsonItemAdapter()); | INSTANCE.registerTypeAdapter(WxMpMaterialNewsBatchGetResult.WxMaterialNewsBatchGetNewsItem.class, new WxMpMaterialNewsBatchGetGsonItemAdapter()); | ||||
| INSTANCE.registerTypeAdapter(WxMpMaterialFileBatchGetResult.class, new WxMpMaterialFileBatchGetGsonAdapter()); | INSTANCE.registerTypeAdapter(WxMpMaterialFileBatchGetResult.class, new WxMpMaterialFileBatchGetGsonAdapter()); | ||||
| @@ -1,70 +0,0 @@ | |||||
| 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.WxMpMassNews; | |||||
| import org.apache.commons.lang3.BooleanUtils; | |||||
| import java.lang.reflect.Type; | |||||
| /** | |||||
| * @author codepiano | |||||
| */ | |||||
| public class WxMpMassNewsArticleGsonAdapter implements JsonSerializer<WxMpMassNews.WxMpMassNewsArticle>, JsonDeserializer<WxMpMassNews.WxMpMassNewsArticle> { | |||||
| @Override | |||||
| public JsonElement serialize(WxMpMassNews.WxMpMassNewsArticle article, Type typeOfSrc, JsonSerializationContext context) { | |||||
| JsonObject articleJson = new JsonObject(); | |||||
| articleJson.addProperty("thumb_media_id", article.getThumbMediaId()); | |||||
| articleJson.addProperty("title", article.getTitle()); | |||||
| articleJson.addProperty("content", article.getContent()); | |||||
| if (null != article.getAuthor()) { | |||||
| articleJson.addProperty("author", article.getAuthor()); | |||||
| } | |||||
| if (null != article.getContentSourceUrl()) { | |||||
| articleJson.addProperty("content_source_url", article.getContentSourceUrl()); | |||||
| } | |||||
| if (null != article.getDigest()) { | |||||
| articleJson.addProperty("digest", article.getDigest()); | |||||
| } | |||||
| articleJson.addProperty("show_cover_pic", article.isShowCoverPic() ? "1" : "0"); | |||||
| return articleJson; | |||||
| } | |||||
| @Override | |||||
| public WxMpMassNews.WxMpMassNewsArticle deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException { | |||||
| JsonObject articleInfo = jsonElement.getAsJsonObject(); | |||||
| WxMpMassNews.WxMpMassNewsArticle article = new WxMpMassNews.WxMpMassNewsArticle(); | |||||
| JsonElement title = articleInfo.get("title"); | |||||
| if (title != null && !title.isJsonNull()) { | |||||
| article.setTitle(GsonHelper.getAsString(title)); | |||||
| } | |||||
| JsonElement content = articleInfo.get("content"); | |||||
| if (content != null && !content.isJsonNull()) { | |||||
| article.setContent(GsonHelper.getAsString(content)); | |||||
| } | |||||
| JsonElement contentSourceUrl = articleInfo.get("content_source_url"); | |||||
| if (contentSourceUrl != null && !contentSourceUrl.isJsonNull()) { | |||||
| article.setContentSourceUrl(GsonHelper.getAsString(contentSourceUrl)); | |||||
| } | |||||
| JsonElement author = articleInfo.get("author"); | |||||
| if (author != null && !author.isJsonNull()) { | |||||
| article.setAuthor(GsonHelper.getAsString(author)); | |||||
| } | |||||
| JsonElement digest = articleInfo.get("digest"); | |||||
| if (digest != null && !digest.isJsonNull()) { | |||||
| article.setDigest(GsonHelper.getAsString(digest)); | |||||
| } | |||||
| JsonElement thumbMediaId = articleInfo.get("thumb_media_id"); | |||||
| if (thumbMediaId != null && !thumbMediaId.isJsonNull()) { | |||||
| article.setThumbMediaId(GsonHelper.getAsString(thumbMediaId)); | |||||
| } | |||||
| JsonElement showCoverPic = articleInfo.get("show_cover_pic"); | |||||
| if (showCoverPic != null && !showCoverPic.isJsonNull()) { | |||||
| article.setShowCoverPic(BooleanUtils.toBoolean(showCoverPic.getAsInt())); | |||||
| } | |||||
| return article; | |||||
| } | |||||
| } | |||||
| @@ -2,6 +2,7 @@ package me.chanjar.weixin.mp.util.json; | |||||
| import com.google.gson.*; | import com.google.gson.*; | ||||
| import me.chanjar.weixin.mp.bean.WxMpMassNews; | import me.chanjar.weixin.mp.bean.WxMpMassNews; | ||||
| import me.chanjar.weixin.mp.bean.material.WxMpNewsArticle; | |||||
| import java.lang.reflect.Type; | import java.lang.reflect.Type; | ||||
| @@ -12,8 +13,8 @@ public class WxMpMassNewsGsonAdapter implements JsonSerializer<WxMpMassNews>, Js | |||||
| JsonObject newsJson = new JsonObject(); | JsonObject newsJson = new JsonObject(); | ||||
| JsonArray articleJsonArray = new JsonArray(); | JsonArray articleJsonArray = new JsonArray(); | ||||
| for (WxMpMassNews.WxMpMassNewsArticle article : message.getArticles()) { | |||||
| JsonObject articleJson = WxMpGsonBuilder.create().toJsonTree(article, WxMpMassNews.WxMpMassNewsArticle.class).getAsJsonObject(); | |||||
| for (WxMpNewsArticle article : message.getArticles()) { | |||||
| JsonObject articleJson = WxMpGsonBuilder.create().toJsonTree(article, WxMpNewsArticle.class).getAsJsonObject(); | |||||
| articleJsonArray.add(articleJson); | articleJsonArray.add(articleJson); | ||||
| } | } | ||||
| newsJson.add("articles", articleJsonArray); | newsJson.add("articles", articleJsonArray); | ||||
| @@ -29,7 +30,7 @@ public class WxMpMassNewsGsonAdapter implements JsonSerializer<WxMpMassNews>, Js | |||||
| JsonArray articles = json.getAsJsonArray("articles"); | JsonArray articles = json.getAsJsonArray("articles"); | ||||
| for (JsonElement article1 : articles) { | for (JsonElement article1 : articles) { | ||||
| JsonObject articleInfo = article1.getAsJsonObject(); | JsonObject articleInfo = article1.getAsJsonObject(); | ||||
| WxMpMassNews.WxMpMassNewsArticle article = WxMpGsonBuilder.create().fromJson(articleInfo, WxMpMassNews.WxMpMassNewsArticle.class); | |||||
| WxMpNewsArticle article = WxMpGsonBuilder.create().fromJson(articleInfo, WxMpNewsArticle.class); | |||||
| wxMpMassNews.addArticle(article); | wxMpMassNews.addArticle(article); | ||||
| } | } | ||||
| } | } | ||||
| @@ -5,7 +5,7 @@ import com.google.gson.JsonObject; | |||||
| import com.google.gson.JsonSerializationContext; | import com.google.gson.JsonSerializationContext; | ||||
| import com.google.gson.JsonSerializer; | import com.google.gson.JsonSerializer; | ||||
| import me.chanjar.weixin.mp.bean.material.WxMpMaterialArticleUpdate; | import me.chanjar.weixin.mp.bean.material.WxMpMaterialArticleUpdate; | ||||
| import me.chanjar.weixin.mp.bean.material.WxMpMaterialNews; | |||||
| import me.chanjar.weixin.mp.bean.material.WxMpNewsArticle; | |||||
| import java.lang.reflect.Type; | import java.lang.reflect.Type; | ||||
| @@ -16,7 +16,7 @@ public class WxMpMaterialArticleUpdateGsonAdapter implements JsonSerializer<WxMp | |||||
| JsonObject articleUpdateJson = new JsonObject(); | JsonObject articleUpdateJson = new JsonObject(); | ||||
| articleUpdateJson.addProperty("media_id", wxMpMaterialArticleUpdate.getMediaId()); | articleUpdateJson.addProperty("media_id", wxMpMaterialArticleUpdate.getMediaId()); | ||||
| articleUpdateJson.addProperty("index", wxMpMaterialArticleUpdate.getIndex()); | articleUpdateJson.addProperty("index", wxMpMaterialArticleUpdate.getIndex()); | ||||
| articleUpdateJson.add("articles", WxMpGsonBuilder.create().toJsonTree(wxMpMaterialArticleUpdate.getArticles(), WxMpMaterialNews.WxMpMaterialNewsArticle.class)); | |||||
| articleUpdateJson.add("articles", WxMpGsonBuilder.create().toJsonTree(wxMpMaterialArticleUpdate.getArticles(), WxMpNewsArticle.class)); | |||||
| return articleUpdateJson; | return articleUpdateJson; | ||||
| } | } | ||||
| @@ -3,6 +3,7 @@ package me.chanjar.weixin.mp.util.json; | |||||
| import com.google.gson.*; | import com.google.gson.*; | ||||
| import me.chanjar.weixin.common.util.json.GsonHelper; | import me.chanjar.weixin.common.util.json.GsonHelper; | ||||
| import me.chanjar.weixin.mp.bean.material.WxMpMaterialNews; | import me.chanjar.weixin.mp.bean.material.WxMpMaterialNews; | ||||
| import me.chanjar.weixin.mp.bean.material.WxMpNewsArticle; | |||||
| import java.lang.reflect.Type; | import java.lang.reflect.Type; | ||||
| import java.text.SimpleDateFormat; | import java.text.SimpleDateFormat; | ||||
| @@ -15,8 +16,8 @@ public class WxMpMaterialNewsGsonAdapter implements JsonSerializer<WxMpMaterialN | |||||
| JsonObject newsJson = new JsonObject(); | JsonObject newsJson = new JsonObject(); | ||||
| JsonArray articleJsonArray = new JsonArray(); | JsonArray articleJsonArray = new JsonArray(); | ||||
| for (WxMpMaterialNews.WxMpMaterialNewsArticle article : wxMpMaterialNews.getArticles()) { | |||||
| JsonObject articleJson = WxMpGsonBuilder.create().toJsonTree(article, WxMpMaterialNews.WxMpMaterialNewsArticle.class).getAsJsonObject(); | |||||
| for (WxMpNewsArticle article : wxMpMaterialNews.getArticles()) { | |||||
| JsonObject articleJson = WxMpGsonBuilder.create().toJsonTree(article, WxMpNewsArticle.class).getAsJsonObject(); | |||||
| articleJsonArray.add(articleJson); | articleJsonArray.add(articleJson); | ||||
| } | } | ||||
| newsJson.add("articles", articleJsonArray); | newsJson.add("articles", articleJsonArray); | ||||
| @@ -42,7 +43,7 @@ public class WxMpMaterialNewsGsonAdapter implements JsonSerializer<WxMpMaterialN | |||||
| JsonArray articles = json.getAsJsonArray("news_item"); | JsonArray articles = json.getAsJsonArray("news_item"); | ||||
| for (JsonElement article1 : articles) { | for (JsonElement article1 : articles) { | ||||
| JsonObject articleInfo = article1.getAsJsonObject(); | JsonObject articleInfo = article1.getAsJsonObject(); | ||||
| WxMpMaterialNews.WxMpMaterialNewsArticle article = WxMpGsonBuilder.create().fromJson(articleInfo, WxMpMaterialNews.WxMpMaterialNewsArticle.class); | |||||
| WxMpNewsArticle article = WxMpGsonBuilder.create().fromJson(articleInfo, WxMpNewsArticle.class); | |||||
| wxMpMaterialNews.addArticle(article); | wxMpMaterialNews.addArticle(article); | ||||
| } | } | ||||
| } | } | ||||
| @@ -2,7 +2,7 @@ package me.chanjar.weixin.mp.util.json; | |||||
| import com.google.gson.*; | import com.google.gson.*; | ||||
| import me.chanjar.weixin.common.util.json.GsonHelper; | import me.chanjar.weixin.common.util.json.GsonHelper; | ||||
| import me.chanjar.weixin.mp.bean.material.WxMpMaterialNews; | |||||
| import me.chanjar.weixin.mp.bean.material.WxMpNewsArticle; | |||||
| import org.apache.commons.lang3.BooleanUtils; | import org.apache.commons.lang3.BooleanUtils; | ||||
| import java.lang.reflect.Type; | import java.lang.reflect.Type; | ||||
| @@ -10,10 +10,9 @@ import java.lang.reflect.Type; | |||||
| /** | /** | ||||
| * @author codepiano | * @author codepiano | ||||
| */ | */ | ||||
| public class WxMpMaterialNewsArticleGsonAdapter implements JsonSerializer<WxMpMaterialNews.WxMpMaterialNewsArticle>, JsonDeserializer<WxMpMaterialNews.WxMpMaterialNewsArticle> { | |||||
| public class WxMpNewsArticleGsonAdapter implements JsonSerializer<WxMpNewsArticle>, JsonDeserializer<WxMpNewsArticle> { | |||||
| @Override | @Override | ||||
| public JsonElement serialize(WxMpMaterialNews.WxMpMaterialNewsArticle article, Type typeOfSrc, JsonSerializationContext context) { | |||||
| public JsonElement serialize(WxMpNewsArticle article, Type typeOfSrc, JsonSerializationContext context) { | |||||
| JsonObject articleJson = new JsonObject(); | JsonObject articleJson = new JsonObject(); | ||||
| articleJson.addProperty("thumb_media_id", article.getThumbMediaId()); | articleJson.addProperty("thumb_media_id", article.getThumbMediaId()); | ||||
| @@ -47,9 +46,9 @@ public class WxMpMaterialNewsArticleGsonAdapter implements JsonSerializer<WxMpMa | |||||
| } | } | ||||
| @Override | @Override | ||||
| public WxMpMaterialNews.WxMpMaterialNewsArticle deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException { | |||||
| public WxMpNewsArticle deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException { | |||||
| JsonObject articleInfo = jsonElement.getAsJsonObject(); | JsonObject articleInfo = jsonElement.getAsJsonObject(); | ||||
| WxMpMaterialNews.WxMpMaterialNewsArticle article = new WxMpMaterialNews.WxMpMaterialNewsArticle(); | |||||
| WxMpNewsArticle article = new WxMpNewsArticle(); | |||||
| JsonElement title = articleInfo.get("title"); | JsonElement title = articleInfo.get("title"); | ||||
| if (title != null && !title.isJsonNull()) { | if (title != null && !title.isJsonNull()) { | ||||
| @@ -12,14 +12,17 @@ import me.chanjar.weixin.mp.bean.WxMpMassNews; | |||||
| import me.chanjar.weixin.mp.bean.WxMpMassOpenIdsMessage; | import me.chanjar.weixin.mp.bean.WxMpMassOpenIdsMessage; | ||||
| import me.chanjar.weixin.mp.bean.WxMpMassTagMessage; | import me.chanjar.weixin.mp.bean.WxMpMassTagMessage; | ||||
| import me.chanjar.weixin.mp.bean.WxMpMassVideo; | import me.chanjar.weixin.mp.bean.WxMpMassVideo; | ||||
| import me.chanjar.weixin.mp.bean.material.WxMpNewsArticle; | |||||
| import me.chanjar.weixin.mp.bean.result.WxMpMassSendResult; | import me.chanjar.weixin.mp.bean.result.WxMpMassSendResult; | ||||
| import me.chanjar.weixin.mp.bean.result.WxMpMassUploadResult; | import me.chanjar.weixin.mp.bean.result.WxMpMassUploadResult; | ||||
| import org.testng.annotations.*; | |||||
| import org.testng.annotations.DataProvider; | |||||
| import org.testng.annotations.Guice; | |||||
| import org.testng.annotations.Test; | |||||
| import java.io.IOException; | import java.io.IOException; | ||||
| import java.io.InputStream; | import java.io.InputStream; | ||||
| import static org.testng.Assert.*; | |||||
| import static org.testng.Assert.assertNotNull; | |||||
| /** | /** | ||||
| * 测试群发消息 | * 测试群发消息 | ||||
| @@ -35,15 +38,13 @@ public class WxMpMassMessageServiceImplTest { | |||||
| @Test | @Test | ||||
| public void testTextMassOpenIdsMessageSend() throws WxErrorException { | public void testTextMassOpenIdsMessageSend() throws WxErrorException { | ||||
| // 发送群发消息 | // 发送群发消息 | ||||
| TestConfigStorage configProvider = (TestConfigStorage) this.wxService | |||||
| .getWxMpConfigStorage(); | |||||
| TestConfigStorage configProvider = (TestConfigStorage) this.wxService .getWxMpConfigStorage(); | |||||
| WxMpMassOpenIdsMessage massMessage = new WxMpMassOpenIdsMessage(); | WxMpMassOpenIdsMessage massMessage = new WxMpMassOpenIdsMessage(); | ||||
| massMessage.setMsgType(WxConsts.MassMsgType.TEXT); | massMessage.setMsgType(WxConsts.MassMsgType.TEXT); | ||||
| massMessage.setContent("测试群发消息\n欢迎欢迎,热烈欢迎\n换行测试\n超链接:<a href=\"http://www.baidu.com\">Hello World</a>"); | |||||
| massMessage.setContent("测试群发消息\n欢迎欢迎\n换行测试\n超链接:<a href=\"http://www.baidu.com\">Hello World</a>"); | |||||
| massMessage.getToUsers().add(configProvider.getOpenid()); | massMessage.getToUsers().add(configProvider.getOpenid()); | ||||
| WxMpMassSendResult massResult = this.wxService.getMassMessageService() | |||||
| .massOpenIdsMessageSend(massMessage); | |||||
| WxMpMassSendResult massResult = this.wxService.getMassMessageService().massOpenIdsMessageSend(massMessage); | |||||
| assertNotNull(massResult); | assertNotNull(massResult); | ||||
| assertNotNull(massResult.getMsgId()); | assertNotNull(massResult.getMsgId()); | ||||
| } | } | ||||
| @@ -51,15 +52,13 @@ public class WxMpMassMessageServiceImplTest { | |||||
| @Test(dataProvider = "massMessages") | @Test(dataProvider = "massMessages") | ||||
| public void testMediaMassOpenIdsMessageSend(String massMsgType, String mediaId) throws WxErrorException { | public void testMediaMassOpenIdsMessageSend(String massMsgType, String mediaId) throws WxErrorException { | ||||
| // 发送群发消息 | // 发送群发消息 | ||||
| TestConfigStorage configProvider = (TestConfigStorage) this.wxService | |||||
| .getWxMpConfigStorage(); | |||||
| TestConfigStorage configProvider = (TestConfigStorage) this.wxService.getWxMpConfigStorage(); | |||||
| WxMpMassOpenIdsMessage massMessage = new WxMpMassOpenIdsMessage(); | WxMpMassOpenIdsMessage massMessage = new WxMpMassOpenIdsMessage(); | ||||
| massMessage.setMsgType(massMsgType); | massMessage.setMsgType(massMsgType); | ||||
| massMessage.setMediaId(mediaId); | massMessage.setMediaId(mediaId); | ||||
| massMessage.getToUsers().add(configProvider.getOpenid()); | massMessage.getToUsers().add(configProvider.getOpenid()); | ||||
| WxMpMassSendResult massResult = this.wxService.getMassMessageService() | |||||
| .massOpenIdsMessageSend(massMessage); | |||||
| WxMpMassSendResult massResult = this.wxService.getMassMessageService().massOpenIdsMessageSend(massMessage); | |||||
| assertNotNull(massResult); | assertNotNull(massResult); | ||||
| assertNotNull(massResult.getMsgId()); | assertNotNull(massResult.getMsgId()); | ||||
| } | } | ||||
| @@ -68,26 +67,23 @@ public class WxMpMassMessageServiceImplTest { | |||||
| public void testTextMassGroupMessageSend() throws WxErrorException { | public void testTextMassGroupMessageSend() throws WxErrorException { | ||||
| WxMpMassTagMessage massMessage = new WxMpMassTagMessage(); | WxMpMassTagMessage massMessage = new WxMpMassTagMessage(); | ||||
| massMessage.setMsgType(WxConsts.MassMsgType.TEXT); | massMessage.setMsgType(WxConsts.MassMsgType.TEXT); | ||||
| massMessage.setContent("测试群发消息\n欢迎欢迎,热烈欢迎\n换行测试\n超链接:<a href=\"http://www.baidu.com\">Hello World</a>"); | |||||
| massMessage.setContent("测试群发消息\n欢迎欢迎\n换行测试\n超链接:<a href=\"http://www.baidu.com\">Hello World</a>"); | |||||
| massMessage | massMessage | ||||
| .setTagId(this.wxService.getUserTagService().tagGet().get(0).getId()); | .setTagId(this.wxService.getUserTagService().tagGet().get(0).getId()); | ||||
| WxMpMassSendResult massResult = this.wxService.getMassMessageService() | |||||
| .massGroupMessageSend(massMessage); | |||||
| WxMpMassSendResult massResult = this.wxService.getMassMessageService().massGroupMessageSend(massMessage); | |||||
| assertNotNull(massResult); | assertNotNull(massResult); | ||||
| assertNotNull(massResult.getMsgId()); | assertNotNull(massResult.getMsgId()); | ||||
| } | } | ||||
| @Test(dataProvider = "massMessages") | @Test(dataProvider = "massMessages") | ||||
| public void testMediaMassGroupMessageSend(String massMsgType, String mediaId) | |||||
| throws WxErrorException { | |||||
| public void testMediaMassGroupMessageSend(String massMsgType, String mediaId) throws WxErrorException { | |||||
| WxMpMassTagMessage massMessage = new WxMpMassTagMessage(); | WxMpMassTagMessage massMessage = new WxMpMassTagMessage(); | ||||
| massMessage.setMsgType(massMsgType); | massMessage.setMsgType(massMsgType); | ||||
| massMessage.setMediaId(mediaId); | massMessage.setMediaId(mediaId); | ||||
| massMessage.setTagId(this.wxService.getUserTagService().tagGet().get(0).getId()); | massMessage.setTagId(this.wxService.getUserTagService().tagGet().get(0).getId()); | ||||
| WxMpMassSendResult massResult = this.wxService.getMassMessageService() | |||||
| .massGroupMessageSend(massMessage); | |||||
| WxMpMassSendResult massResult = this.wxService.getMassMessageService().massGroupMessageSend(massMessage); | |||||
| assertNotNull(massResult); | assertNotNull(massResult); | ||||
| assertNotNull(massResult.getMsgId()); | assertNotNull(massResult.getMsgId()); | ||||
| } | } | ||||
| @@ -155,15 +151,15 @@ public class WxMpMassMessageServiceImplTest { | |||||
| // 上传图文消息 | // 上传图文消息 | ||||
| WxMpMassNews news = new WxMpMassNews(); | WxMpMassNews news = new WxMpMassNews(); | ||||
| WxMpMassNews.WxMpMassNewsArticle article1 = new WxMpMassNews.WxMpMassNewsArticle(); | |||||
| WxMpNewsArticle article1 = new WxMpNewsArticle(); | |||||
| article1.setTitle("标题1"); | article1.setTitle("标题1"); | ||||
| article1.setContent("内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1"); | |||||
| article1.setContent("内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1"); | |||||
| article1.setThumbMediaId(uploadMediaRes.getMediaId()); | article1.setThumbMediaId(uploadMediaRes.getMediaId()); | ||||
| news.addArticle(article1); | news.addArticle(article1); | ||||
| WxMpMassNews.WxMpMassNewsArticle article2 = new WxMpMassNews.WxMpMassNewsArticle(); | |||||
| WxMpNewsArticle article2 = new WxMpNewsArticle(); | |||||
| article2.setTitle("标题2"); | article2.setTitle("标题2"); | ||||
| article2.setContent("内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2"); | |||||
| article2.setContent("内容2内容2内容2内容2内容2内容2内容2内容2内2内容2内容2内容2内容2内容2内容2内容2内容2内容2"); | |||||
| article2.setThumbMediaId(uploadMediaRes.getMediaId()); | article2.setThumbMediaId(uploadMediaRes.getMediaId()); | ||||
| article2.setShowCoverPic(true); | article2.setShowCoverPic(true); | ||||
| article2.setAuthor("作者2"); | article2.setAuthor("作者2"); | ||||
| @@ -183,7 +179,7 @@ public class WxMpMassMessageServiceImplTest { | |||||
| @Test | @Test | ||||
| public void testMassDelete() throws Exception { | public void testMassDelete() throws Exception { | ||||
| this.wxService.getMassMessageService().delete(1L,2); | |||||
| this.wxService.getMassMessageService().delete(1L, 2); | |||||
| } | } | ||||
| } | } | ||||
| @@ -103,7 +103,7 @@ public class WxMpMaterialServiceImplTest { | |||||
| public void testAddNews() throws WxErrorException { | public void testAddNews() throws WxErrorException { | ||||
| // 单图文消息 | // 单图文消息 | ||||
| WxMpMaterialNews wxMpMaterialNewsSingle = new WxMpMaterialNews(); | WxMpMaterialNews wxMpMaterialNewsSingle = new WxMpMaterialNews(); | ||||
| WxMpMaterialNews.WxMpMaterialNewsArticle article = new WxMpMaterialNews.WxMpMaterialNewsArticle(); | |||||
| WxMpNewsArticle article = new WxMpNewsArticle(); | |||||
| article.setAuthor("author"); | article.setAuthor("author"); | ||||
| article.setThumbMediaId(this.thumbMediaId); | article.setThumbMediaId(this.thumbMediaId); | ||||
| article.setTitle("single title"); | article.setTitle("single title"); | ||||
| @@ -115,7 +115,7 @@ public class WxMpMaterialServiceImplTest { | |||||
| // 多图文消息 | // 多图文消息 | ||||
| WxMpMaterialNews wxMpMaterialNewsMultiple = new WxMpMaterialNews(); | WxMpMaterialNews wxMpMaterialNewsMultiple = new WxMpMaterialNews(); | ||||
| WxMpMaterialNews.WxMpMaterialNewsArticle article1 = new WxMpMaterialNews.WxMpMaterialNewsArticle(); | |||||
| WxMpNewsArticle article1 = new WxMpNewsArticle(); | |||||
| article1.setAuthor("author1"); | article1.setAuthor("author1"); | ||||
| article1.setThumbMediaId(this.thumbMediaId); | article1.setThumbMediaId(this.thumbMediaId); | ||||
| article1.setTitle("multi title1"); | article1.setTitle("multi title1"); | ||||
| @@ -124,7 +124,7 @@ public class WxMpMaterialServiceImplTest { | |||||
| article1.setShowCoverPic(true); | article1.setShowCoverPic(true); | ||||
| article1.setDigest(""); | article1.setDigest(""); | ||||
| WxMpMaterialNews.WxMpMaterialNewsArticle article2 = new WxMpMaterialNews.WxMpMaterialNewsArticle(); | |||||
| WxMpNewsArticle article2 = new WxMpNewsArticle(); | |||||
| article2.setAuthor("author2"); | article2.setAuthor("author2"); | ||||
| article2.setThumbMediaId(this.thumbMediaId); | article2.setThumbMediaId(this.thumbMediaId); | ||||
| article2.setTitle("multi title2"); | article2.setTitle("multi title2"); | ||||
| @@ -196,7 +196,7 @@ public class WxMpMaterialServiceImplTest { | |||||
| .getMaterialService().materialNewsInfo(this.singleNewsMediaId); | .getMaterialService().materialNewsInfo(this.singleNewsMediaId); | ||||
| assertNotNull(wxMpMaterialNewsSingle); | assertNotNull(wxMpMaterialNewsSingle); | ||||
| WxMpMaterialArticleUpdate wxMpMaterialArticleUpdateSingle = new WxMpMaterialArticleUpdate(); | WxMpMaterialArticleUpdate wxMpMaterialArticleUpdateSingle = new WxMpMaterialArticleUpdate(); | ||||
| WxMpMaterialNews.WxMpMaterialNewsArticle articleSingle = wxMpMaterialNewsSingle.getArticles().get(0); | |||||
| WxMpNewsArticle articleSingle = wxMpMaterialNewsSingle.getArticles().get(0); | |||||
| articleSingle.setContent("content single update"); | articleSingle.setContent("content single update"); | ||||
| wxMpMaterialArticleUpdateSingle.setMediaId(this.singleNewsMediaId); | wxMpMaterialArticleUpdateSingle.setMediaId(this.singleNewsMediaId); | ||||
| wxMpMaterialArticleUpdateSingle.setArticles(articleSingle); | wxMpMaterialArticleUpdateSingle.setArticles(articleSingle); | ||||
| @@ -213,7 +213,7 @@ public class WxMpMaterialServiceImplTest { | |||||
| .getMaterialService().materialNewsInfo(this.multiNewsMediaId); | .getMaterialService().materialNewsInfo(this.multiNewsMediaId); | ||||
| assertNotNull(wxMpMaterialNewsMultiple); | assertNotNull(wxMpMaterialNewsMultiple); | ||||
| WxMpMaterialArticleUpdate wxMpMaterialArticleUpdateMulti = new WxMpMaterialArticleUpdate(); | WxMpMaterialArticleUpdate wxMpMaterialArticleUpdateMulti = new WxMpMaterialArticleUpdate(); | ||||
| WxMpMaterialNews.WxMpMaterialNewsArticle articleMulti = wxMpMaterialNewsMultiple.getArticles().get(1); | |||||
| WxMpNewsArticle articleMulti = wxMpMaterialNewsMultiple.getArticles().get(1); | |||||
| articleMulti.setContent("content 2 update"); | articleMulti.setContent("content 2 update"); | ||||
| wxMpMaterialArticleUpdateMulti.setMediaId(this.multiNewsMediaId); | wxMpMaterialArticleUpdateMulti.setMediaId(this.multiNewsMediaId); | ||||
| wxMpMaterialArticleUpdateMulti.setArticles(articleMulti); | wxMpMaterialArticleUpdateMulti.setArticles(articleMulti); | ||||