Parcourir la source

:art: #2476【公众号】客服消息增加草稿箱图文消息类型

JCLee il y a 3 ans
Parent
commit
fd8e02a81a

+ 5 - 0
weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java

@@ -126,6 +126,11 @@ public class WxConsts {
      * 模板卡片消息.
      */
     public static final String TEMPLATE_CARD = "template_card";
+
+    /**
+     * 发送图文消息(点击跳转到图文消息页面)使用通过 “发布” 系列接口得到的 article_id(草稿箱功能上线后不再支持客服接口中带 media_id 的 mpnews 类型的图文消息)
+     */
+    public static final String MP_NEWS_ARTICLE = "mpnewsarticle";
   }
 
   /**

+ 9 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/kefu/WxMpKefuMessage.java

@@ -37,6 +37,7 @@ public class WxMpKefuMessage implements Serializable {
   private String headContent;
   private String tailContent;
   private List<WxArticle> articles = new ArrayList<>();
+  private String mpNewsArticleId;
 
   /**
    * 菜单消息里的菜单内容.
@@ -114,6 +115,13 @@ public class WxMpKefuMessage implements Serializable {
   }
 
   /**
+   * 发送图文消息(点击跳转到图文消息页面)使用通过 “发布” 系列接口得到的 article_id(草稿箱功能上线后不再支持客服接口中带 media_id 的 mpnews 类型的图文消息)
+   */
+  public static MpNewsArticleBuilder MPNEWSARTICLE() {
+    return new MpNewsArticleBuilder();
+  }
+
+  /**
    * <pre>
    * 请使用
    * {@link WxConsts.KefuMsgType#TEXT}
@@ -127,6 +135,7 @@ public class WxMpKefuMessage implements Serializable {
    * {@link WxConsts.KefuMsgType#MINIPROGRAMPAGE}
    * {@link WxConsts.KefuMsgType#TASKCARD}
    * {@link WxConsts.KefuMsgType#MSGMENU}
+   * {@link WxConsts.KefuMsgType#MP_NEWS_ARTICLE}
    * </pre>
    */
   public void setMsgType(String msgType) {

+ 33 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/builder/kefu/MpNewsArticleBuilder.java

@@ -0,0 +1,33 @@
+package me.chanjar.weixin.mp.builder.kefu;
+
+import me.chanjar.weixin.common.api.WxConsts;
+import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage;
+
+/**
+ * 图文消息builder
+ * <pre>
+ * 用法:
+ * WxMpKefuMessage m = WxMpKefuMessage.MPNEWSARTICLE().articleId("xxxxx").toUser(...).build();
+ * </pre>
+ *
+ * @author <a href="https://github.com/leejuncheng">JCLee</a>
+ */
+public final class MpNewsArticleBuilder extends BaseBuilder<MpNewsArticleBuilder>{
+  private String articleId;
+
+  public MpNewsArticleBuilder() {
+    this.msgType = WxConsts.KefuMsgType.MP_NEWS_ARTICLE;
+  }
+
+  public MpNewsArticleBuilder articleId(String articleId) {
+    this.articleId = articleId;
+    return this;
+  }
+
+  @Override
+  public WxMpKefuMessage build() {
+    WxMpKefuMessage m = super.build();
+    m.setMpNewsArticleId(this.articleId);
+    return m;
+  }
+}

+ 5 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpKefuMessageGsonAdapter.java

@@ -96,6 +96,11 @@ public class WxMpKefuMessageGsonAdapter implements JsonSerializer<WxMpKefuMessag
           messageJson.add("msgmenu", msgmenuJsonObject);
         break;
       }
+      case KefuMsgType.MP_NEWS_ARTICLE:
+        JsonObject mpNewsArticleJson = new JsonObject();
+        mpNewsArticleJson.addProperty("article_id", message.getMpNewsArticleId());
+        messageJson.add("mpnewsarticle", mpNewsArticleJson);
+        break;
       default: {
         throw new WxRuntimeException("非法消息类型,暂不支持");
       }

+ 9 - 0
weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/kefu/WxMpKefuMessageTest.java

@@ -166,4 +166,13 @@ public class WxMpKefuMessageTest {
       "{\"touser\":\"OPENID\",\"msgtype\":\"msgmenu\",\"msgmenu\":{\"head_content\":\"head_content\",\"list\":[{\"id\":\"101\",\"content\":\"msgmenu1\"},{\"id\":\"102\",\"content\":\"msgmenu2\"}],\"tail_content\":\"tail_content\"}}");
   }
 
+  public void testMpNewsArticleBuilder() {
+    WxMpKefuMessage reply = WxMpKefuMessage.MPNEWSARTICLE()
+      .toUser("OPENID")
+      .articleId("ARTICLE_ID")
+      .build();
+    Assert.assertEquals(reply.toJson(),
+      "{\"touser\":\"OPENID\",\"msgtype\":\"mpnewsarticle\",\"mpnewsarticle\":{\"article_id\":\"ARTICLE_ID\"}}");
+  }
+
 }