From bf7356e808d9f0555dc8dc4a1c028778bf2056dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E6=A2=81?= <77617245+llw5181@users.noreply.github.com> Date: Wed, 30 Oct 2024 13:04:01 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20#3395=E3=80=90=E4=BC=81=E4=B8=9A?= =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E3=80=91=E5=A2=9E=E5=8A=A0"=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E5=8D=A1=E7=89=87=E4=BA=8B=E4=BB=B6=E6=8E=A8=E9=80=81?= =?UTF-8?q?"=E4=BA=8B=E4=BB=B6=E7=9A=84=E7=9B=B8=E5=85=B3=E5=B1=9E?= =?UTF-8?q?=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cp/bean/message/WxCpXmlMessage.java | 28 +++++++++++++ .../weixin/cp/constant/WxCpConsts.java | 5 +++ .../cp/util/xml/XStreamTransformer.java | 5 +++ .../cp/bean/message/WxCpXmlMessageTest.java | 40 +++++++++++++++++++ 4 files changed, 78 insertions(+) diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java index f6d2c3f2e..fb4213f50 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java @@ -187,6 +187,17 @@ public class WxCpXmlMessage implements Serializable { @XStreamConverter(value = XStreamCDataConverter.class) private String taskId; + @XStreamAlias("CardType") + @XStreamConverter(value = XStreamCDataConverter.class) + private String cardType; + + @XStreamAlias("ResponseCode") + @XStreamConverter(value = XStreamCDataConverter.class) + private String responseCode; + + @XStreamAlias("SelectedItems") + private List selectedItems; + /** * 微信客服 * 调用拉取消息接口时,需要传此token,用于校验请求的合法性 @@ -750,4 +761,21 @@ public class WxCpXmlMessage implements Serializable { } + + /** + * The type selected Items. + */ + @Data + @XStreamAlias("SelectedItem") + public static class SelectedItem implements Serializable { + private static final long serialVersionUID = 6319921121637597406L; + + @XStreamAlias("QuestionKey") + @XStreamConverter(value = XStreamCDataConverter.class) + private String questionKey; + + @XStreamAlias(value = "OptionIds") + private List optionIds; + } + } diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpConsts.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpConsts.java index f0c7601fe..606dcea6d 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpConsts.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpConsts.java @@ -48,6 +48,11 @@ public class WxCpConsts { */ public static final String CHANGE_CONTACT = "change_contact"; + /** + * 企业微信模板卡片事件推送 + */ + public static final String TEMPLATE_CARD_EVENT = "template_card_event"; + /** * 点击菜单拉取消息的事件推送. */ diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/xml/XStreamTransformer.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/xml/XStreamTransformer.java index 8f540020a..c4753befd 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/xml/XStreamTransformer.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/xml/XStreamTransformer.java @@ -93,6 +93,11 @@ public class XStreamTransformer { xstream.processAnnotations(WxCpXmlMessage.SendPicsInfo.class); xstream.processAnnotations(WxCpXmlMessage.SendPicsInfo.Item.class); xstream.processAnnotations(WxCpXmlMessage.SendLocationInfo.class); + xstream.processAnnotations(WxCpXmlMessage.SelectedItem.class); + // 显式允许 String 类 + xstream.allowTypes(new Class[]{String.class}); + // 模板卡片事件推送独属 + xstream.alias("OptionId",String.class); return xstream; } diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessageTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessageTest.java index 04a4c6998..a760a17ff 100644 --- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessageTest.java +++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessageTest.java @@ -302,6 +302,46 @@ public class WxCpXmlMessageTest { System.out.println(XStreamTransformer.toXml(WxCpXmlMessage.class, wxCpXmlMessage)); } + /** + * Test template card event. + */ + public void testTemplateCardEvent() { + String xml = "\n" + + "\n" + + "\n" + + "123456789\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "1\n" + + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "\n" + + ""; + + WxCpXmlMessage wxCpXmlMessage = WxCpXmlMessage.fromXml(xml); + assertThat(wxCpXmlMessage).isNotNull(); + assertThat(wxCpXmlMessage.getSelectedItems()).isNotEmpty(); + assertThat(wxCpXmlMessage.getSelectedItems().get(0).getQuestionKey()).isNotEmpty(); + assertThat(wxCpXmlMessage.getSelectedItems().get(0).getOptionIds().get(0)).isNotEmpty(); + } + /** * Test open approval change. */