#305 修复微信变态的拍照或发图事件的消息格式的处理

This commit is contained in:
Binary Wang 2017-08-14 15:02:49 +08:00
parent 69ebad5e70
commit 67dad47be7
4 changed files with 133 additions and 99 deletions

View File

@ -164,6 +164,8 @@ public class WxCpXmlMessage implements Serializable {
private SendLocationInfo sendLocationInfo = new SendLocationInfo(); private SendLocationInfo sendLocationInfo = new SendLocationInfo();
protected static WxCpXmlMessage fromXml(String xml) { protected static WxCpXmlMessage fromXml(String xml) {
//修改微信变态的消息内容格式方便解析
xml = xml.replace("</PicList><PicList>", "");
return XStreamTransformer.fromXml(WxCpXmlMessage.class, xml); return XStreamTransformer.fromXml(WxCpXmlMessage.class, xml);
} }

View File

@ -1,8 +1,9 @@
package me.chanjar.weixin.cp.bean; package me.chanjar.weixin.cp.bean;
import me.chanjar.weixin.common.api.WxConsts; import me.chanjar.weixin.common.api.WxConsts;
import org.testng.Assert; import org.testng.annotations.*;
import org.testng.annotations.Test;
import static org.testng.Assert.*;
@Test @Test
public class WxCpXmlMessageTest { public class WxCpXmlMessageTest {
@ -54,38 +55,66 @@ public class WxCpXmlMessageTest {
+ "</SendLocationInfo>" + "</SendLocationInfo>"
+ "</xml>"; + "</xml>";
WxCpXmlMessage wxMessage = WxCpXmlMessage.fromXml(xml); WxCpXmlMessage wxMessage = WxCpXmlMessage.fromXml(xml);
Assert.assertEquals(wxMessage.getToUserName(), "toUser"); assertEquals(wxMessage.getToUserName(), "toUser");
Assert.assertEquals(wxMessage.getFromUserName(), "fromUser"); assertEquals(wxMessage.getFromUserName(), "fromUser");
Assert.assertEquals(wxMessage.getCreateTime(), new Long(1348831860l)); assertEquals(wxMessage.getCreateTime(), new Long(1348831860l));
Assert.assertEquals(wxMessage.getMsgType(), WxConsts.XML_MSG_TEXT); assertEquals(wxMessage.getMsgType(), WxConsts.XML_MSG_TEXT);
Assert.assertEquals(wxMessage.getContent(), "this is a test"); assertEquals(wxMessage.getContent(), "this is a test");
Assert.assertEquals(wxMessage.getMsgId(), new Long(1234567890123456l)); assertEquals(wxMessage.getMsgId(), new Long(1234567890123456l));
Assert.assertEquals(wxMessage.getPicUrl(), "this is a url"); assertEquals(wxMessage.getPicUrl(), "this is a url");
Assert.assertEquals(wxMessage.getMediaId(), "media_id"); assertEquals(wxMessage.getMediaId(), "media_id");
Assert.assertEquals(wxMessage.getFormat(), "Format"); assertEquals(wxMessage.getFormat(), "Format");
Assert.assertEquals(wxMessage.getThumbMediaId(), "thumb_media_id"); assertEquals(wxMessage.getThumbMediaId(), "thumb_media_id");
Assert.assertEquals(wxMessage.getLocationX(), new Double(23.134521d)); assertEquals(wxMessage.getLocationX(), 23.134521d);
Assert.assertEquals(wxMessage.getLocationY(), new Double(113.358803d)); assertEquals(wxMessage.getLocationY(), 113.358803d);
Assert.assertEquals(wxMessage.getScale(), new Double(20)); assertEquals(wxMessage.getScale(), 20d);
Assert.assertEquals(wxMessage.getLabel(), "位置信息"); assertEquals(wxMessage.getLabel(), "位置信息");
Assert.assertEquals(wxMessage.getDescription(), "公众平台官网链接"); assertEquals(wxMessage.getDescription(), "公众平台官网链接");
Assert.assertEquals(wxMessage.getUrl(), "url"); assertEquals(wxMessage.getUrl(), "url");
Assert.assertEquals(wxMessage.getTitle(), "公众平台官网链接"); assertEquals(wxMessage.getTitle(), "公众平台官网链接");
Assert.assertEquals(wxMessage.getEvent(), "subscribe"); assertEquals(wxMessage.getEvent(), "subscribe");
Assert.assertEquals(wxMessage.getEventKey(), "qrscene_123123"); assertEquals(wxMessage.getEventKey(), "qrscene_123123");
Assert.assertEquals(wxMessage.getTicket(), "TICKET"); assertEquals(wxMessage.getTicket(), "TICKET");
Assert.assertEquals(wxMessage.getLatitude(), new Double(23.137466)); assertEquals(wxMessage.getLatitude(), 23.137466);
Assert.assertEquals(wxMessage.getLongitude(), new Double(113.352425)); assertEquals(wxMessage.getLongitude(), 113.352425);
Assert.assertEquals(wxMessage.getPrecision(), new Double(119.385040)); assertEquals(wxMessage.getPrecision(), 119.385040);
Assert.assertEquals(wxMessage.getScanCodeInfo().getScanType(), "qrcode"); assertEquals(wxMessage.getScanCodeInfo().getScanType(), "qrcode");
Assert.assertEquals(wxMessage.getScanCodeInfo().getScanResult(), "1"); assertEquals(wxMessage.getScanCodeInfo().getScanResult(), "1");
Assert.assertEquals(wxMessage.getSendPicsInfo().getCount(), new Long(1l)); assertEquals(wxMessage.getSendPicsInfo().getCount(), new Long(1l));
Assert.assertEquals(wxMessage.getSendPicsInfo().getPicList().get(0).getPicMd5Sum(), "1b5f7c23b5bf75682a53e7b6d163e185"); assertEquals(wxMessage.getSendPicsInfo().getPicList().get(0).getPicMd5Sum(), "1b5f7c23b5bf75682a53e7b6d163e185");
Assert.assertEquals(wxMessage.getSendLocationInfo().getLocationX(), "23"); assertEquals(wxMessage.getSendLocationInfo().getLocationX(), "23");
Assert.assertEquals(wxMessage.getSendLocationInfo().getLocationY(), "113"); assertEquals(wxMessage.getSendLocationInfo().getLocationY(), "113");
Assert.assertEquals(wxMessage.getSendLocationInfo().getScale(), "15"); assertEquals(wxMessage.getSendLocationInfo().getScale(), "15");
Assert.assertEquals(wxMessage.getSendLocationInfo().getLabel(), " 广州市海珠区客村艺苑路 106号"); assertEquals(wxMessage.getSendLocationInfo().getLabel(), " 广州市海珠区客村艺苑路 106号");
Assert.assertEquals(wxMessage.getSendLocationInfo().getPoiname(), "wo de poi"); assertEquals(wxMessage.getSendLocationInfo().getPoiname(), "wo de poi");
} }
public void testSendPicsInfo() {
String xml = "<xml>" +
"<ToUserName><![CDATA[wx45a0972125658be9]]></ToUserName>" +
"<FromUserName><![CDATA[xiaohe]]></FromUserName>" +
"<CreateTime>1502012364</CreateTime>" +
"<MsgType><![CDATA[event]]></MsgType>" +
"<AgentID>1000004</AgentID>" +
"<Event><![CDATA[pic_weixin]]></Event>" +
"<EventKey><![CDATA[faceSimilarity]]></EventKey>" +
"<SendPicsInfo>" +
"<PicList><item><PicMd5Sum><![CDATA[aef52ae501537e552725c5d7f99c1741]]></PicMd5Sum></item></PicList>" +
"<PicList><item><PicMd5Sum><![CDATA[c4564632a4fab91378c39bea6aad6f9e]]></PicMd5Sum></item></PicList>" +
"<Count>2</Count>" +
"</SendPicsInfo>" +
"</xml>";
WxCpXmlMessage wxMessage = WxCpXmlMessage.fromXml(xml.replace("</PicList><PicList>",""));
assertEquals(wxMessage.getToUserName(), "wx45a0972125658be9");
assertEquals(wxMessage.getFromUserName(), "xiaohe");
assertEquals(wxMessage.getCreateTime(), new Long(1502012364L));
assertEquals(wxMessage.getMsgType(), WxConsts.XML_MSG_EVENT);
assertEquals(wxMessage.getAgentId(), Integer.valueOf(1000004));
assertEquals(wxMessage.getEvent(), "pic_weixin");
assertEquals(wxMessage.getEventKey(), "faceSimilarity");
assertNotNull(wxMessage.getSendPicsInfo());
assertEquals(wxMessage.getSendPicsInfo().getCount(), new Long(2L));
assertEquals(wxMessage.getSendPicsInfo().getPicList().get(0).getPicMd5Sum(), "aef52ae501537e552725c5d7f99c1741");
assertEquals(wxMessage.getSendPicsInfo().getPicList().get(1).getPicMd5Sum(), "c4564632a4fab91378c39bea6aad6f9e");
}
} }

View File

@ -425,6 +425,8 @@ public class WxMpXmlMessage implements Serializable {
private Integer deviceStatus; private Integer deviceStatus;
public static WxMpXmlMessage fromXml(String xml) { public static WxMpXmlMessage fromXml(String xml) {
//修改微信变态的消息内容格式方便解析
xml = xml.replace("</PicList><PicList>", "");
return XStreamTransformer.fromXml(WxMpXmlMessage.class, xml); return XStreamTransformer.fromXml(WxMpXmlMessage.class, xml);
} }

View File

@ -1,9 +1,10 @@
package me.chanjar.weixin.mp.bean.message; package me.chanjar.weixin.mp.bean.message;
import me.chanjar.weixin.common.api.WxConsts; import me.chanjar.weixin.common.api.WxConsts;
import org.testng.*;
import org.testng.annotations.*; import org.testng.annotations.*;
import static org.testng.Assert.*;
@Test @Test
public class WxMpXmlMessageTest { public class WxMpXmlMessageTest {
@ -54,38 +55,38 @@ public class WxMpXmlMessageTest {
+ "</SendLocationInfo>" + "</SendLocationInfo>"
+ "</xml>"; + "</xml>";
WxMpXmlMessage wxMessage = WxMpXmlMessage.fromXml(xml); WxMpXmlMessage wxMessage = WxMpXmlMessage.fromXml(xml);
Assert.assertEquals(wxMessage.getToUser(), "toUser"); assertEquals(wxMessage.getToUser(), "toUser");
Assert.assertEquals(wxMessage.getFromUser(), "fromUser"); assertEquals(wxMessage.getFromUser(), "fromUser");
Assert.assertEquals(wxMessage.getCreateTime(), new Long(1348831860L)); assertEquals(wxMessage.getCreateTime(), new Long(1348831860L));
Assert.assertEquals(wxMessage.getMsgType(), WxConsts.XML_MSG_TEXT); assertEquals(wxMessage.getMsgType(), WxConsts.XML_MSG_TEXT);
Assert.assertEquals(wxMessage.getContent(), "this is a test"); assertEquals(wxMessage.getContent(), "this is a test");
Assert.assertEquals(wxMessage.getMsgId(), new Long(1234567890123456L)); assertEquals(wxMessage.getMsgId(), new Long(1234567890123456L));
Assert.assertEquals(wxMessage.getPicUrl(), "this is a url"); assertEquals(wxMessage.getPicUrl(), "this is a url");
Assert.assertEquals(wxMessage.getMediaId(), "media_id"); assertEquals(wxMessage.getMediaId(), "media_id");
Assert.assertEquals(wxMessage.getFormat(), "Format"); assertEquals(wxMessage.getFormat(), "Format");
Assert.assertEquals(wxMessage.getThumbMediaId(), "thumb_media_id"); assertEquals(wxMessage.getThumbMediaId(), "thumb_media_id");
Assert.assertEquals(wxMessage.getLocationX(), 23.134521d); assertEquals(wxMessage.getLocationX(), 23.134521d);
Assert.assertEquals(wxMessage.getLocationY(), 113.358803d); assertEquals(wxMessage.getLocationY(), 113.358803d);
Assert.assertEquals(wxMessage.getScale(), 20d); assertEquals(wxMessage.getScale(), 20d);
Assert.assertEquals(wxMessage.getLabel(), "位置信息"); assertEquals(wxMessage.getLabel(), "位置信息");
Assert.assertEquals(wxMessage.getDescription(), "公众平台官网链接"); assertEquals(wxMessage.getDescription(), "公众平台官网链接");
Assert.assertEquals(wxMessage.getUrl(), "url"); assertEquals(wxMessage.getUrl(), "url");
Assert.assertEquals(wxMessage.getTitle(), "公众平台官网链接"); assertEquals(wxMessage.getTitle(), "公众平台官网链接");
Assert.assertEquals(wxMessage.getEvent(), "subscribe"); assertEquals(wxMessage.getEvent(), "subscribe");
Assert.assertEquals(wxMessage.getEventKey(), "qrscene_123123"); assertEquals(wxMessage.getEventKey(), "qrscene_123123");
Assert.assertEquals(wxMessage.getTicket(), "TICKET"); assertEquals(wxMessage.getTicket(), "TICKET");
Assert.assertEquals(wxMessage.getLatitude(), 23.137466); assertEquals(wxMessage.getLatitude(), 23.137466);
Assert.assertEquals(wxMessage.getLongitude(), 113.352425); assertEquals(wxMessage.getLongitude(), 113.352425);
Assert.assertEquals(wxMessage.getPrecision(), 119.385040); assertEquals(wxMessage.getPrecision(), 119.385040);
Assert.assertEquals(wxMessage.getScanCodeInfo().getScanType(), "qrcode"); assertEquals(wxMessage.getScanCodeInfo().getScanType(), "qrcode");
Assert.assertEquals(wxMessage.getScanCodeInfo().getScanResult(), "1"); assertEquals(wxMessage.getScanCodeInfo().getScanResult(), "1");
Assert.assertEquals(wxMessage.getSendPicsInfo().getCount(), new Long(1L)); assertEquals(wxMessage.getSendPicsInfo().getCount(), new Long(1L));
Assert.assertEquals(wxMessage.getSendPicsInfo().getPicList().get(0).getPicMd5Sum(), "1b5f7c23b5bf75682a53e7b6d163e185"); assertEquals(wxMessage.getSendPicsInfo().getPicList().get(0).getPicMd5Sum(), "1b5f7c23b5bf75682a53e7b6d163e185");
Assert.assertEquals(wxMessage.getSendLocationInfo().getLocationX(), "23"); assertEquals(wxMessage.getSendLocationInfo().getLocationX(), "23");
Assert.assertEquals(wxMessage.getSendLocationInfo().getLocationY(), "113"); assertEquals(wxMessage.getSendLocationInfo().getLocationY(), "113");
Assert.assertEquals(wxMessage.getSendLocationInfo().getScale(), "15"); assertEquals(wxMessage.getSendLocationInfo().getScale(), "15");
Assert.assertEquals(wxMessage.getSendLocationInfo().getLabel(), " 广州市海珠区客村艺苑路 106号"); assertEquals(wxMessage.getSendLocationInfo().getLabel(), " 广州市海珠区客村艺苑路 106号");
Assert.assertEquals(wxMessage.getSendLocationInfo().getPoiname(), "wo de poi"); assertEquals(wxMessage.getSendLocationInfo().getPoiname(), "wo de poi");
} }
public void testFromXml2() { public void testFromXml2() {
@ -135,38 +136,38 @@ public class WxMpXmlMessageTest {
+ "</SendLocationInfo>" + "</SendLocationInfo>"
+ "</xml>"; + "</xml>";
WxMpXmlMessage wxMessage = WxMpXmlMessage.fromXml(xml); WxMpXmlMessage wxMessage = WxMpXmlMessage.fromXml(xml);
Assert.assertEquals(wxMessage.getToUser(), "toUser"); assertEquals(wxMessage.getToUser(), "toUser");
Assert.assertEquals(wxMessage.getFromUser(), "fromUser"); assertEquals(wxMessage.getFromUser(), "fromUser");
Assert.assertEquals(wxMessage.getCreateTime(), new Long(1348831860L)); assertEquals(wxMessage.getCreateTime(), new Long(1348831860L));
Assert.assertEquals(wxMessage.getMsgType(), WxConsts.XML_MSG_TEXT); assertEquals(wxMessage.getMsgType(), WxConsts.XML_MSG_TEXT);
Assert.assertEquals(wxMessage.getContent(), "this is a test"); assertEquals(wxMessage.getContent(), "this is a test");
Assert.assertEquals(wxMessage.getMsgId(), new Long(1234567890123456L)); assertEquals(wxMessage.getMsgId(), new Long(1234567890123456L));
Assert.assertEquals(wxMessage.getPicUrl(), "this is a url"); assertEquals(wxMessage.getPicUrl(), "this is a url");
Assert.assertEquals(wxMessage.getMediaId(), "media_id"); assertEquals(wxMessage.getMediaId(), "media_id");
Assert.assertEquals(wxMessage.getFormat(), "Format"); assertEquals(wxMessage.getFormat(), "Format");
Assert.assertEquals(wxMessage.getThumbMediaId(), "thumb_media_id"); assertEquals(wxMessage.getThumbMediaId(), "thumb_media_id");
Assert.assertEquals(wxMessage.getLocationX(), 23.134521d); assertEquals(wxMessage.getLocationX(), 23.134521d);
Assert.assertEquals(wxMessage.getLocationY(), 113.358803d); assertEquals(wxMessage.getLocationY(), 113.358803d);
Assert.assertEquals(wxMessage.getScale(), 20d); assertEquals(wxMessage.getScale(), 20d);
Assert.assertEquals(wxMessage.getLabel(), "位置信息"); assertEquals(wxMessage.getLabel(), "位置信息");
Assert.assertEquals(wxMessage.getDescription(), "公众平台官网链接"); assertEquals(wxMessage.getDescription(), "公众平台官网链接");
Assert.assertEquals(wxMessage.getUrl(), "url"); assertEquals(wxMessage.getUrl(), "url");
Assert.assertEquals(wxMessage.getTitle(), "公众平台官网链接"); assertEquals(wxMessage.getTitle(), "公众平台官网链接");
Assert.assertEquals(wxMessage.getEvent(), "subscribe"); assertEquals(wxMessage.getEvent(), "subscribe");
Assert.assertEquals(wxMessage.getEventKey(), "qrscene_123123"); assertEquals(wxMessage.getEventKey(), "qrscene_123123");
Assert.assertEquals(wxMessage.getTicket(), "TICKET"); assertEquals(wxMessage.getTicket(), "TICKET");
Assert.assertEquals(wxMessage.getLatitude(), 23.137466); assertEquals(wxMessage.getLatitude(), 23.137466);
Assert.assertEquals(wxMessage.getLongitude(), 113.352425); assertEquals(wxMessage.getLongitude(), 113.352425);
Assert.assertEquals(wxMessage.getPrecision(), 119.385040); assertEquals(wxMessage.getPrecision(), 119.385040);
Assert.assertEquals(wxMessage.getScanCodeInfo().getScanType(), "qrcode"); assertEquals(wxMessage.getScanCodeInfo().getScanType(), "qrcode");
Assert.assertEquals(wxMessage.getScanCodeInfo().getScanResult(), "1"); assertEquals(wxMessage.getScanCodeInfo().getScanResult(), "1");
Assert.assertEquals(wxMessage.getSendPicsInfo().getCount(), new Long(1L)); assertEquals(wxMessage.getSendPicsInfo().getCount(), new Long(1L));
Assert.assertEquals(wxMessage.getSendPicsInfo().getPicList().get(0).getPicMd5Sum(), "1b5f7c23b5bf75682a53e7b6d163e185"); assertEquals(wxMessage.getSendPicsInfo().getPicList().get(0).getPicMd5Sum(), "1b5f7c23b5bf75682a53e7b6d163e185");
Assert.assertEquals(wxMessage.getSendLocationInfo().getLocationX(), "23"); assertEquals(wxMessage.getSendLocationInfo().getLocationX(), "23");
Assert.assertEquals(wxMessage.getSendLocationInfo().getLocationY(), "113"); assertEquals(wxMessage.getSendLocationInfo().getLocationY(), "113");
Assert.assertEquals(wxMessage.getSendLocationInfo().getScale(), "15"); assertEquals(wxMessage.getSendLocationInfo().getScale(), "15");
Assert.assertEquals(wxMessage.getSendLocationInfo().getLabel(), " 广州市海珠区客村艺苑路 106号"); assertEquals(wxMessage.getSendLocationInfo().getLabel(), " 广州市海珠区客村艺苑路 106号");
Assert.assertEquals(wxMessage.getSendLocationInfo().getPoiname(), "wo de poi"); assertEquals(wxMessage.getSendLocationInfo().getPoiname(), "wo de poi");
} }
} }