Skip to content

Commit bf7356e

Browse files
authored
🎨 #3395【企业微信】增加"模板卡片事件推送"事件的相关属性
1 parent 3e25e40 commit bf7356e

File tree

4 files changed

+78
-0
lines changed

4 files changed

+78
-0
lines changed

weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,17 @@ public class WxCpXmlMessage implements Serializable {
187187
@XStreamConverter(value = XStreamCDataConverter.class)
188188
private String taskId;
189189

190+
@XStreamAlias("CardType")
191+
@XStreamConverter(value = XStreamCDataConverter.class)
192+
private String cardType;
193+
194+
@XStreamAlias("ResponseCode")
195+
@XStreamConverter(value = XStreamCDataConverter.class)
196+
private String responseCode;
197+
198+
@XStreamAlias("SelectedItems")
199+
private List<SelectedItem> selectedItems;
200+
190201
/**
191202
* 微信客服
192203
* 调用拉取消息接口时,需要传此token,用于校验请求的合法性
@@ -750,4 +761,21 @@ public static class SendLocationInfo implements Serializable {
750761

751762
}
752763

764+
765+
/**
766+
* The type selected Items.
767+
*/
768+
@Data
769+
@XStreamAlias("SelectedItem")
770+
public static class SelectedItem implements Serializable {
771+
private static final long serialVersionUID = 6319921121637597406L;
772+
773+
@XStreamAlias("QuestionKey")
774+
@XStreamConverter(value = XStreamCDataConverter.class)
775+
private String questionKey;
776+
777+
@XStreamAlias(value = "OptionIds")
778+
private List<String> optionIds;
779+
}
780+
753781
}

weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpConsts.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@ public static class EventType {
4848
*/
4949
public static final String CHANGE_CONTACT = "change_contact";
5050

51+
/**
52+
* 企业微信模板卡片事件推送
53+
*/
54+
public static final String TEMPLATE_CARD_EVENT = "template_card_event";
55+
5156
/**
5257
* 点击菜单拉取消息的事件推送.
5358
*/

weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/xml/XStreamTransformer.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,11 @@ private static XStream configWxCpXmlMessage() {
9393
xstream.processAnnotations(WxCpXmlMessage.SendPicsInfo.class);
9494
xstream.processAnnotations(WxCpXmlMessage.SendPicsInfo.Item.class);
9595
xstream.processAnnotations(WxCpXmlMessage.SendLocationInfo.class);
96+
xstream.processAnnotations(WxCpXmlMessage.SelectedItem.class);
97+
// 显式允许 String 类
98+
xstream.allowTypes(new Class[]{String.class});
99+
// 模板卡片事件推送独属
100+
xstream.alias("OptionId",String.class);
96101
return xstream;
97102
}
98103

weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessageTest.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,46 @@ public void testChangeContact() {
302302
System.out.println(XStreamTransformer.toXml(WxCpXmlMessage.class, wxCpXmlMessage));
303303
}
304304

305+
/**
306+
* Test template card event.
307+
*/
308+
public void testTemplateCardEvent() {
309+
String xml = "<xml>\n" +
310+
"<ToUserName><![CDATA[toUser]]></ToUserName>\n" +
311+
"<FromUserName><![CDATA[FromUser]]></FromUserName>\n" +
312+
"<CreateTime>123456789</CreateTime>\n" +
313+
"<MsgType><![CDATA[event]]></MsgType>\n" +
314+
"<Event><![CDATA[template_card_event]]></Event>\n" +
315+
"<EventKey><![CDATA[key111]]></EventKey>\n" +
316+
"<TaskId><![CDATA[taskid111]]></TaskId>\n" +
317+
"<CardType><![CDATA[text_notice]]></CardType>\n" +
318+
"<ResponseCode><![CDATA[ResponseCode]]></ResponseCode>\n" +
319+
"<AgentID>1</AgentID>\n" +
320+
"<SelectedItems>\n" +
321+
" <SelectedItem>\n" +
322+
" <QuestionKey><![CDATA[QuestionKey1]]></QuestionKey>\n" +
323+
" <OptionIds>\n" +
324+
" <OptionId><![CDATA[OptionId1]]></OptionId>\n" +
325+
" <OptionId><![CDATA[OptionId2]]></OptionId>\n" +
326+
" </OptionIds>\n" +
327+
" </SelectedItem>\n" +
328+
" <SelectedItem>\n" +
329+
" <QuestionKey><![CDATA[QuestionKey2]]></QuestionKey>\n" +
330+
" <OptionIds>\n" +
331+
" <OptionId><![CDATA[OptionId3]]></OptionId>\n" +
332+
" <OptionId><![CDATA[OptionId4]]></OptionId>\n" +
333+
" </OptionIds>\n" +
334+
" </SelectedItem>\n" +
335+
"</SelectedItems>\n" +
336+
"</xml>";
337+
338+
WxCpXmlMessage wxCpXmlMessage = WxCpXmlMessage.fromXml(xml);
339+
assertThat(wxCpXmlMessage).isNotNull();
340+
assertThat(wxCpXmlMessage.getSelectedItems()).isNotEmpty();
341+
assertThat(wxCpXmlMessage.getSelectedItems().get(0).getQuestionKey()).isNotEmpty();
342+
assertThat(wxCpXmlMessage.getSelectedItems().get(0).getOptionIds().get(0)).isNotEmpty();
343+
}
344+
305345
/**
306346
* Test open approval change.
307347
*/

0 commit comments

Comments
 (0)