Skip to content

Commit 8337230

Browse files
committed
#305 修复微信变态的拍照或发图事件的消息格式的处理
1 parent c482443 commit 8337230

File tree

4 files changed

+133
-99
lines changed

4 files changed

+133
-99
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,8 @@ public class WxCpXmlMessage implements Serializable {
164164
private SendLocationInfo sendLocationInfo = new SendLocationInfo();
165165

166166
protected static WxCpXmlMessage fromXml(String xml) {
167+
//修改微信变态的消息内容格式,方便解析
168+
xml = xml.replace("</PicList><PicList>", "");
167169
return XStreamTransformer.fromXml(WxCpXmlMessage.class, xml);
168170
}
169171

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

Lines changed: 63 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package me.chanjar.weixin.cp.bean;
22

33
import me.chanjar.weixin.common.api.WxConsts;
4-
import org.testng.Assert;
5-
import org.testng.annotations.Test;
4+
import org.testng.annotations.*;
5+
6+
import static org.testng.Assert.*;
67

78
@Test
89
public class WxCpXmlMessageTest {
@@ -54,38 +55,66 @@ public void testFromXml() {
5455
+ "</SendLocationInfo>"
5556
+ "</xml>";
5657
WxCpXmlMessage wxMessage = WxCpXmlMessage.fromXml(xml);
57-
Assert.assertEquals(wxMessage.getToUserName(), "toUser");
58-
Assert.assertEquals(wxMessage.getFromUserName(), "fromUser");
59-
Assert.assertEquals(wxMessage.getCreateTime(), new Long(1348831860l));
60-
Assert.assertEquals(wxMessage.getMsgType(), WxConsts.XML_MSG_TEXT);
61-
Assert.assertEquals(wxMessage.getContent(), "this is a test");
62-
Assert.assertEquals(wxMessage.getMsgId(), new Long(1234567890123456l));
63-
Assert.assertEquals(wxMessage.getPicUrl(), "this is a url");
64-
Assert.assertEquals(wxMessage.getMediaId(), "media_id");
65-
Assert.assertEquals(wxMessage.getFormat(), "Format");
66-
Assert.assertEquals(wxMessage.getThumbMediaId(), "thumb_media_id");
67-
Assert.assertEquals(wxMessage.getLocationX(), new Double(23.134521d));
68-
Assert.assertEquals(wxMessage.getLocationY(), new Double(113.358803d));
69-
Assert.assertEquals(wxMessage.getScale(), new Double(20));
70-
Assert.assertEquals(wxMessage.getLabel(), "位置信息");
71-
Assert.assertEquals(wxMessage.getDescription(), "公众平台官网链接");
72-
Assert.assertEquals(wxMessage.getUrl(), "url");
73-
Assert.assertEquals(wxMessage.getTitle(), "公众平台官网链接");
74-
Assert.assertEquals(wxMessage.getEvent(), "subscribe");
75-
Assert.assertEquals(wxMessage.getEventKey(), "qrscene_123123");
76-
Assert.assertEquals(wxMessage.getTicket(), "TICKET");
77-
Assert.assertEquals(wxMessage.getLatitude(), new Double(23.137466));
78-
Assert.assertEquals(wxMessage.getLongitude(), new Double(113.352425));
79-
Assert.assertEquals(wxMessage.getPrecision(), new Double(119.385040));
80-
Assert.assertEquals(wxMessage.getScanCodeInfo().getScanType(), "qrcode");
81-
Assert.assertEquals(wxMessage.getScanCodeInfo().getScanResult(), "1");
82-
Assert.assertEquals(wxMessage.getSendPicsInfo().getCount(), new Long(1l));
83-
Assert.assertEquals(wxMessage.getSendPicsInfo().getPicList().get(0).getPicMd5Sum(), "1b5f7c23b5bf75682a53e7b6d163e185");
84-
Assert.assertEquals(wxMessage.getSendLocationInfo().getLocationX(), "23");
85-
Assert.assertEquals(wxMessage.getSendLocationInfo().getLocationY(), "113");
86-
Assert.assertEquals(wxMessage.getSendLocationInfo().getScale(), "15");
87-
Assert.assertEquals(wxMessage.getSendLocationInfo().getLabel(), " 广州市海珠区客村艺苑路 106号");
88-
Assert.assertEquals(wxMessage.getSendLocationInfo().getPoiname(), "wo de poi");
58+
assertEquals(wxMessage.getToUserName(), "toUser");
59+
assertEquals(wxMessage.getFromUserName(), "fromUser");
60+
assertEquals(wxMessage.getCreateTime(), new Long(1348831860l));
61+
assertEquals(wxMessage.getMsgType(), WxConsts.XML_MSG_TEXT);
62+
assertEquals(wxMessage.getContent(), "this is a test");
63+
assertEquals(wxMessage.getMsgId(), new Long(1234567890123456l));
64+
assertEquals(wxMessage.getPicUrl(), "this is a url");
65+
assertEquals(wxMessage.getMediaId(), "media_id");
66+
assertEquals(wxMessage.getFormat(), "Format");
67+
assertEquals(wxMessage.getThumbMediaId(), "thumb_media_id");
68+
assertEquals(wxMessage.getLocationX(), 23.134521d);
69+
assertEquals(wxMessage.getLocationY(), 113.358803d);
70+
assertEquals(wxMessage.getScale(), 20d);
71+
assertEquals(wxMessage.getLabel(), "位置信息");
72+
assertEquals(wxMessage.getDescription(), "公众平台官网链接");
73+
assertEquals(wxMessage.getUrl(), "url");
74+
assertEquals(wxMessage.getTitle(), "公众平台官网链接");
75+
assertEquals(wxMessage.getEvent(), "subscribe");
76+
assertEquals(wxMessage.getEventKey(), "qrscene_123123");
77+
assertEquals(wxMessage.getTicket(), "TICKET");
78+
assertEquals(wxMessage.getLatitude(), 23.137466);
79+
assertEquals(wxMessage.getLongitude(), 113.352425);
80+
assertEquals(wxMessage.getPrecision(), 119.385040);
81+
assertEquals(wxMessage.getScanCodeInfo().getScanType(), "qrcode");
82+
assertEquals(wxMessage.getScanCodeInfo().getScanResult(), "1");
83+
assertEquals(wxMessage.getSendPicsInfo().getCount(), new Long(1l));
84+
assertEquals(wxMessage.getSendPicsInfo().getPicList().get(0).getPicMd5Sum(), "1b5f7c23b5bf75682a53e7b6d163e185");
85+
assertEquals(wxMessage.getSendLocationInfo().getLocationX(), "23");
86+
assertEquals(wxMessage.getSendLocationInfo().getLocationY(), "113");
87+
assertEquals(wxMessage.getSendLocationInfo().getScale(), "15");
88+
assertEquals(wxMessage.getSendLocationInfo().getLabel(), " 广州市海珠区客村艺苑路 106号");
89+
assertEquals(wxMessage.getSendLocationInfo().getPoiname(), "wo de poi");
8990
}
9091

92+
public void testSendPicsInfo() {
93+
String xml = "<xml>" +
94+
"<ToUserName><![CDATA[wx45a0972125658be9]]></ToUserName>" +
95+
"<FromUserName><![CDATA[xiaohe]]></FromUserName>" +
96+
"<CreateTime>1502012364</CreateTime>" +
97+
"<MsgType><![CDATA[event]]></MsgType>" +
98+
"<AgentID>1000004</AgentID>" +
99+
"<Event><![CDATA[pic_weixin]]></Event>" +
100+
"<EventKey><![CDATA[faceSimilarity]]></EventKey>" +
101+
"<SendPicsInfo>" +
102+
"<PicList><item><PicMd5Sum><![CDATA[aef52ae501537e552725c5d7f99c1741]]></PicMd5Sum></item></PicList>" +
103+
"<PicList><item><PicMd5Sum><![CDATA[c4564632a4fab91378c39bea6aad6f9e]]></PicMd5Sum></item></PicList>" +
104+
"<Count>2</Count>" +
105+
"</SendPicsInfo>" +
106+
"</xml>";
107+
WxCpXmlMessage wxMessage = WxCpXmlMessage.fromXml(xml.replace("</PicList><PicList>",""));
108+
assertEquals(wxMessage.getToUserName(), "wx45a0972125658be9");
109+
assertEquals(wxMessage.getFromUserName(), "xiaohe");
110+
assertEquals(wxMessage.getCreateTime(), new Long(1502012364L));
111+
assertEquals(wxMessage.getMsgType(), WxConsts.XML_MSG_EVENT);
112+
assertEquals(wxMessage.getAgentId(), Integer.valueOf(1000004));
113+
assertEquals(wxMessage.getEvent(), "pic_weixin");
114+
assertEquals(wxMessage.getEventKey(), "faceSimilarity");
115+
assertNotNull(wxMessage.getSendPicsInfo());
116+
assertEquals(wxMessage.getSendPicsInfo().getCount(), new Long(2L));
117+
assertEquals(wxMessage.getSendPicsInfo().getPicList().get(0).getPicMd5Sum(), "aef52ae501537e552725c5d7f99c1741");
118+
assertEquals(wxMessage.getSendPicsInfo().getPicList().get(1).getPicMd5Sum(), "c4564632a4fab91378c39bea6aad6f9e");
119+
}
91120
}

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlMessage.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,8 @@ public class WxMpXmlMessage implements Serializable {
425425
private Integer deviceStatus;
426426

427427
public static WxMpXmlMessage fromXml(String xml) {
428+
//修改微信变态的消息内容格式,方便解析
429+
xml = xml.replace("</PicList><PicList>", "");
428430
return XStreamTransformer.fromXml(WxMpXmlMessage.class, xml);
429431
}
430432

weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/message/WxMpXmlMessageTest.java

Lines changed: 66 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package me.chanjar.weixin.mp.bean.message;
22

33
import me.chanjar.weixin.common.api.WxConsts;
4-
import org.testng.*;
54
import org.testng.annotations.*;
65

6+
import static org.testng.Assert.*;
7+
78
@Test
89
public class WxMpXmlMessageTest {
910

@@ -54,38 +55,38 @@ public void testFromXml() {
5455
+ "</SendLocationInfo>"
5556
+ "</xml>";
5657
WxMpXmlMessage wxMessage = WxMpXmlMessage.fromXml(xml);
57-
Assert.assertEquals(wxMessage.getToUser(), "toUser");
58-
Assert.assertEquals(wxMessage.getFromUser(), "fromUser");
59-
Assert.assertEquals(wxMessage.getCreateTime(), new Long(1348831860L));
60-
Assert.assertEquals(wxMessage.getMsgType(), WxConsts.XML_MSG_TEXT);
61-
Assert.assertEquals(wxMessage.getContent(), "this is a test");
62-
Assert.assertEquals(wxMessage.getMsgId(), new Long(1234567890123456L));
63-
Assert.assertEquals(wxMessage.getPicUrl(), "this is a url");
64-
Assert.assertEquals(wxMessage.getMediaId(), "media_id");
65-
Assert.assertEquals(wxMessage.getFormat(), "Format");
66-
Assert.assertEquals(wxMessage.getThumbMediaId(), "thumb_media_id");
67-
Assert.assertEquals(wxMessage.getLocationX(), 23.134521d);
68-
Assert.assertEquals(wxMessage.getLocationY(), 113.358803d);
69-
Assert.assertEquals(wxMessage.getScale(), 20d);
70-
Assert.assertEquals(wxMessage.getLabel(), "位置信息");
71-
Assert.assertEquals(wxMessage.getDescription(), "公众平台官网链接");
72-
Assert.assertEquals(wxMessage.getUrl(), "url");
73-
Assert.assertEquals(wxMessage.getTitle(), "公众平台官网链接");
74-
Assert.assertEquals(wxMessage.getEvent(), "subscribe");
75-
Assert.assertEquals(wxMessage.getEventKey(), "qrscene_123123");
76-
Assert.assertEquals(wxMessage.getTicket(), "TICKET");
77-
Assert.assertEquals(wxMessage.getLatitude(), 23.137466);
78-
Assert.assertEquals(wxMessage.getLongitude(), 113.352425);
79-
Assert.assertEquals(wxMessage.getPrecision(), 119.385040);
80-
Assert.assertEquals(wxMessage.getScanCodeInfo().getScanType(), "qrcode");
81-
Assert.assertEquals(wxMessage.getScanCodeInfo().getScanResult(), "1");
82-
Assert.assertEquals(wxMessage.getSendPicsInfo().getCount(), new Long(1L));
83-
Assert.assertEquals(wxMessage.getSendPicsInfo().getPicList().get(0).getPicMd5Sum(), "1b5f7c23b5bf75682a53e7b6d163e185");
84-
Assert.assertEquals(wxMessage.getSendLocationInfo().getLocationX(), "23");
85-
Assert.assertEquals(wxMessage.getSendLocationInfo().getLocationY(), "113");
86-
Assert.assertEquals(wxMessage.getSendLocationInfo().getScale(), "15");
87-
Assert.assertEquals(wxMessage.getSendLocationInfo().getLabel(), " 广州市海珠区客村艺苑路 106号");
88-
Assert.assertEquals(wxMessage.getSendLocationInfo().getPoiname(), "wo de poi");
58+
assertEquals(wxMessage.getToUser(), "toUser");
59+
assertEquals(wxMessage.getFromUser(), "fromUser");
60+
assertEquals(wxMessage.getCreateTime(), new Long(1348831860L));
61+
assertEquals(wxMessage.getMsgType(), WxConsts.XML_MSG_TEXT);
62+
assertEquals(wxMessage.getContent(), "this is a test");
63+
assertEquals(wxMessage.getMsgId(), new Long(1234567890123456L));
64+
assertEquals(wxMessage.getPicUrl(), "this is a url");
65+
assertEquals(wxMessage.getMediaId(), "media_id");
66+
assertEquals(wxMessage.getFormat(), "Format");
67+
assertEquals(wxMessage.getThumbMediaId(), "thumb_media_id");
68+
assertEquals(wxMessage.getLocationX(), 23.134521d);
69+
assertEquals(wxMessage.getLocationY(), 113.358803d);
70+
assertEquals(wxMessage.getScale(), 20d);
71+
assertEquals(wxMessage.getLabel(), "位置信息");
72+
assertEquals(wxMessage.getDescription(), "公众平台官网链接");
73+
assertEquals(wxMessage.getUrl(), "url");
74+
assertEquals(wxMessage.getTitle(), "公众平台官网链接");
75+
assertEquals(wxMessage.getEvent(), "subscribe");
76+
assertEquals(wxMessage.getEventKey(), "qrscene_123123");
77+
assertEquals(wxMessage.getTicket(), "TICKET");
78+
assertEquals(wxMessage.getLatitude(), 23.137466);
79+
assertEquals(wxMessage.getLongitude(), 113.352425);
80+
assertEquals(wxMessage.getPrecision(), 119.385040);
81+
assertEquals(wxMessage.getScanCodeInfo().getScanType(), "qrcode");
82+
assertEquals(wxMessage.getScanCodeInfo().getScanResult(), "1");
83+
assertEquals(wxMessage.getSendPicsInfo().getCount(), new Long(1L));
84+
assertEquals(wxMessage.getSendPicsInfo().getPicList().get(0).getPicMd5Sum(), "1b5f7c23b5bf75682a53e7b6d163e185");
85+
assertEquals(wxMessage.getSendLocationInfo().getLocationX(), "23");
86+
assertEquals(wxMessage.getSendLocationInfo().getLocationY(), "113");
87+
assertEquals(wxMessage.getSendLocationInfo().getScale(), "15");
88+
assertEquals(wxMessage.getSendLocationInfo().getLabel(), " 广州市海珠区客村艺苑路 106号");
89+
assertEquals(wxMessage.getSendLocationInfo().getPoiname(), "wo de poi");
8990
}
9091

9192
public void testFromXml2() {
@@ -135,38 +136,38 @@ public void testFromXml2() {
135136
+ "</SendLocationInfo>"
136137
+ "</xml>";
137138
WxMpXmlMessage wxMessage = WxMpXmlMessage.fromXml(xml);
138-
Assert.assertEquals(wxMessage.getToUser(), "toUser");
139-
Assert.assertEquals(wxMessage.getFromUser(), "fromUser");
140-
Assert.assertEquals(wxMessage.getCreateTime(), new Long(1348831860L));
141-
Assert.assertEquals(wxMessage.getMsgType(), WxConsts.XML_MSG_TEXT);
142-
Assert.assertEquals(wxMessage.getContent(), "this is a test");
143-
Assert.assertEquals(wxMessage.getMsgId(), new Long(1234567890123456L));
144-
Assert.assertEquals(wxMessage.getPicUrl(), "this is a url");
145-
Assert.assertEquals(wxMessage.getMediaId(), "media_id");
146-
Assert.assertEquals(wxMessage.getFormat(), "Format");
147-
Assert.assertEquals(wxMessage.getThumbMediaId(), "thumb_media_id");
148-
Assert.assertEquals(wxMessage.getLocationX(), 23.134521d);
149-
Assert.assertEquals(wxMessage.getLocationY(), 113.358803d);
150-
Assert.assertEquals(wxMessage.getScale(), 20d);
151-
Assert.assertEquals(wxMessage.getLabel(), "位置信息");
152-
Assert.assertEquals(wxMessage.getDescription(), "公众平台官网链接");
153-
Assert.assertEquals(wxMessage.getUrl(), "url");
154-
Assert.assertEquals(wxMessage.getTitle(), "公众平台官网链接");
155-
Assert.assertEquals(wxMessage.getEvent(), "subscribe");
156-
Assert.assertEquals(wxMessage.getEventKey(), "qrscene_123123");
157-
Assert.assertEquals(wxMessage.getTicket(), "TICKET");
158-
Assert.assertEquals(wxMessage.getLatitude(), 23.137466);
159-
Assert.assertEquals(wxMessage.getLongitude(), 113.352425);
160-
Assert.assertEquals(wxMessage.getPrecision(), 119.385040);
161-
Assert.assertEquals(wxMessage.getScanCodeInfo().getScanType(), "qrcode");
162-
Assert.assertEquals(wxMessage.getScanCodeInfo().getScanResult(), "1");
163-
Assert.assertEquals(wxMessage.getSendPicsInfo().getCount(), new Long(1L));
164-
Assert.assertEquals(wxMessage.getSendPicsInfo().getPicList().get(0).getPicMd5Sum(), "1b5f7c23b5bf75682a53e7b6d163e185");
165-
Assert.assertEquals(wxMessage.getSendLocationInfo().getLocationX(), "23");
166-
Assert.assertEquals(wxMessage.getSendLocationInfo().getLocationY(), "113");
167-
Assert.assertEquals(wxMessage.getSendLocationInfo().getScale(), "15");
168-
Assert.assertEquals(wxMessage.getSendLocationInfo().getLabel(), " 广州市海珠区客村艺苑路 106号");
169-
Assert.assertEquals(wxMessage.getSendLocationInfo().getPoiname(), "wo de poi");
139+
assertEquals(wxMessage.getToUser(), "toUser");
140+
assertEquals(wxMessage.getFromUser(), "fromUser");
141+
assertEquals(wxMessage.getCreateTime(), new Long(1348831860L));
142+
assertEquals(wxMessage.getMsgType(), WxConsts.XML_MSG_TEXT);
143+
assertEquals(wxMessage.getContent(), "this is a test");
144+
assertEquals(wxMessage.getMsgId(), new Long(1234567890123456L));
145+
assertEquals(wxMessage.getPicUrl(), "this is a url");
146+
assertEquals(wxMessage.getMediaId(), "media_id");
147+
assertEquals(wxMessage.getFormat(), "Format");
148+
assertEquals(wxMessage.getThumbMediaId(), "thumb_media_id");
149+
assertEquals(wxMessage.getLocationX(), 23.134521d);
150+
assertEquals(wxMessage.getLocationY(), 113.358803d);
151+
assertEquals(wxMessage.getScale(), 20d);
152+
assertEquals(wxMessage.getLabel(), "位置信息");
153+
assertEquals(wxMessage.getDescription(), "公众平台官网链接");
154+
assertEquals(wxMessage.getUrl(), "url");
155+
assertEquals(wxMessage.getTitle(), "公众平台官网链接");
156+
assertEquals(wxMessage.getEvent(), "subscribe");
157+
assertEquals(wxMessage.getEventKey(), "qrscene_123123");
158+
assertEquals(wxMessage.getTicket(), "TICKET");
159+
assertEquals(wxMessage.getLatitude(), 23.137466);
160+
assertEquals(wxMessage.getLongitude(), 113.352425);
161+
assertEquals(wxMessage.getPrecision(), 119.385040);
162+
assertEquals(wxMessage.getScanCodeInfo().getScanType(), "qrcode");
163+
assertEquals(wxMessage.getScanCodeInfo().getScanResult(), "1");
164+
assertEquals(wxMessage.getSendPicsInfo().getCount(), new Long(1L));
165+
assertEquals(wxMessage.getSendPicsInfo().getPicList().get(0).getPicMd5Sum(), "1b5f7c23b5bf75682a53e7b6d163e185");
166+
assertEquals(wxMessage.getSendLocationInfo().getLocationX(), "23");
167+
assertEquals(wxMessage.getSendLocationInfo().getLocationY(), "113");
168+
assertEquals(wxMessage.getSendLocationInfo().getScale(), "15");
169+
assertEquals(wxMessage.getSendLocationInfo().getLabel(), " 广州市海珠区客村艺苑路 106号");
170+
assertEquals(wxMessage.getSendLocationInfo().getPoiname(), "wo de poi");
170171
}
171172

172173
}

0 commit comments

Comments
 (0)