WxCpXmlMessageTest.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. package me.chanjar.weixin.cp.bean;
  2. import me.chanjar.weixin.common.api.WxConsts;
  3. import me.chanjar.weixin.cp.constant.WxCpConsts;
  4. import me.chanjar.weixin.cp.util.xml.XStreamTransformer;
  5. import org.testng.annotations.Test;
  6. import static me.chanjar.weixin.cp.constant.WxCpConsts.EventType.TASKCARD_CLICK;
  7. import static org.assertj.core.api.Assertions.assertThat;
  8. import static org.testng.Assert.assertEquals;
  9. import static org.testng.Assert.assertNotNull;
  10. @Test
  11. public class WxCpXmlMessageTest {
  12. public void testFromXml() {
  13. String xml = "<xml>"
  14. + "<ToUserName><![CDATA[toUser]]></ToUserName>"
  15. + "<FromUserName><![CDATA[fromUser]]></FromUserName> "
  16. + "<CreateTime>1348831860</CreateTime>"
  17. + "<MsgType><![CDATA[text]]></MsgType>"
  18. + "<Content><![CDATA[this is a test]]></Content>"
  19. + "<MsgId>1234567890123456</MsgId>"
  20. + "<PicUrl><![CDATA[this is a url]]></PicUrl>"
  21. + "<MediaId><![CDATA[media_id]]></MediaId>"
  22. + "<Format><![CDATA[Format]]></Format>"
  23. + "<ThumbMediaId><![CDATA[thumb_media_id]]></ThumbMediaId>"
  24. + "<Location_X>23.134521</Location_X>"
  25. + "<Location_Y>113.358803</Location_Y>"
  26. + "<Scale>20</Scale>"
  27. + "<Label><![CDATA[位置信息]]></Label>"
  28. + "<Description><![CDATA[公众平台官网链接]]></Description>"
  29. + "<Url><![CDATA[url]]></Url>"
  30. + "<Title><![CDATA[公众平台官网链接]]></Title>"
  31. + "<Event><![CDATA[subscribe]]></Event>"
  32. + "<EventKey><![CDATA[qrscene_123123]]></EventKey>"
  33. + "<Ticket><![CDATA[TICKET]]></Ticket>"
  34. + "<Latitude>23.137466</Latitude>"
  35. + "<Longitude>113.352425</Longitude>"
  36. + "<Precision>119.385040</Precision>"
  37. + "<ScanCodeInfo>"
  38. + " <ScanType><![CDATA[qrcode]]></ScanType>"
  39. + " <ScanResult><![CDATA[1]]></ScanResult>"
  40. + "</ScanCodeInfo>"
  41. + "<SendPicsInfo>"
  42. + " <Count>1</Count>\n"
  43. + " <PicList>"
  44. + " <item>"
  45. + " <PicMd5Sum><![CDATA[1b5f7c23b5bf75682a53e7b6d163e185]]></PicMd5Sum>"
  46. + " </item>"
  47. + " </PicList>"
  48. + "</SendPicsInfo>"
  49. + "<SendLocationInfo>"
  50. + " <Location_X><![CDATA[23]]></Location_X>\n"
  51. + " <Location_Y><![CDATA[113]]></Location_Y>\n"
  52. + " <Scale><![CDATA[15]]></Scale>\n"
  53. + " <Label><![CDATA[ 广州市海珠区客村艺苑路 106号]]></Label>\n"
  54. + " <Poiname><![CDATA[wo de poi]]></Poiname>\n"
  55. + "</SendLocationInfo>"
  56. + "</xml>";
  57. WxCpXmlMessage wxMessage = WxCpXmlMessage.fromXml(xml);
  58. assertEquals(wxMessage.getToUserName(), "toUser");
  59. assertEquals(wxMessage.getFromUserName(), "fromUser");
  60. assertEquals(wxMessage.getCreateTime(), new Long(1348831860));
  61. assertEquals(wxMessage.getMsgType(), WxConsts.XmlMsgType.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(1));
  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");
  90. }
  91. public void testSendPicsInfo() {
  92. String xml = "<xml>" +
  93. "<ToUserName><![CDATA[wx45a0972125658be9]]></ToUserName>" +
  94. "<FromUserName><![CDATA[xiaohe]]></FromUserName>" +
  95. "<CreateTime>1502012364</CreateTime>" +
  96. "<MsgType><![CDATA[event]]></MsgType>" +
  97. "<AgentID>1000004</AgentID>" +
  98. "<Event><![CDATA[pic_weixin]]></Event>" +
  99. "<EventKey><![CDATA[faceSimilarity]]></EventKey>" +
  100. "<SendPicsInfo>" +
  101. "<PicList><item><PicMd5Sum><![CDATA[aef52ae501537e552725c5d7f99c1741]]></PicMd5Sum></item></PicList>" +
  102. "<PicList><item><PicMd5Sum><![CDATA[c4564632a4fab91378c39bea6aad6f9e]]></PicMd5Sum></item></PicList>" +
  103. "<Count>2</Count>" +
  104. "</SendPicsInfo>" +
  105. "</xml>";
  106. WxCpXmlMessage wxMessage = WxCpXmlMessage.fromXml(xml.replace("</PicList><PicList>", ""));
  107. assertEquals(wxMessage.getToUserName(), "wx45a0972125658be9");
  108. assertEquals(wxMessage.getFromUserName(), "xiaohe");
  109. assertEquals(wxMessage.getCreateTime(), new Long(1502012364L));
  110. assertEquals(wxMessage.getMsgType(), WxConsts.XmlMsgType.EVENT);
  111. assertEquals(wxMessage.getAgentId(), Integer.valueOf(1000004));
  112. assertEquals(wxMessage.getEvent(), "pic_weixin");
  113. assertEquals(wxMessage.getEventKey(), "faceSimilarity");
  114. assertNotNull(wxMessage.getSendPicsInfo());
  115. assertEquals(wxMessage.getSendPicsInfo().getCount(), new Long(2L));
  116. assertEquals(wxMessage.getSendPicsInfo().getPicList().get(0).getPicMd5Sum(), "aef52ae501537e552725c5d7f99c1741");
  117. assertEquals(wxMessage.getSendPicsInfo().getPicList().get(1).getPicMd5Sum(), "c4564632a4fab91378c39bea6aad6f9e");
  118. }
  119. public void testExtAttr() {
  120. String xml = "<xml>" +
  121. " <ToUserName><![CDATA[w56c9fe3d50ad1ea2]]></ToUserName>" +
  122. " <FromUserName><![CDATA[sys]]></FromUserName>" +
  123. " <CreateTime>1557241961</CreateTime>" +
  124. " <MsgType><![CDATA[event]]></MsgType>" +
  125. " <Event><![CDATA[change_contact]]></Event>" +
  126. " <ChangeType><![CDATA[update_user]]></ChangeType>" +
  127. " <UserID><![CDATA[zhangsan]]></UserID>" +
  128. " <ExtAttr>" +
  129. " <Item><Name><![CDATA[爱好]]></Name><Value><![CDATA[111]]></Value><Text><Value><![CDATA[111]]></Value></Text></Item>" +
  130. " <Item><Name><![CDATA[入职时间]]></Name><Value><![CDATA[11111]]></Value><Text><Value><![CDATA[11111]]></Value></Text></Item>" +
  131. " <Item><Name><![CDATA[城市]]></Name><Value><![CDATA[11111]]></Value><Text><Value><![CDATA[11111]]></Value></Text></Item>" +
  132. " </ExtAttr>" +
  133. " <Address><![CDATA[11111]]></Address>" +
  134. "</xml>";
  135. WxCpXmlMessage wxMessage = WxCpXmlMessage.fromXml(xml);
  136. assertEquals(wxMessage.getToUserName(), "w56c9fe3d50ad1ea2");
  137. assertEquals(wxMessage.getFromUserName(), "sys");
  138. assertEquals(wxMessage.getCreateTime(), new Long(1557241961));
  139. assertEquals(wxMessage.getMsgType(), WxConsts.XmlMsgType.EVENT);
  140. assertEquals(wxMessage.getEvent(), "change_contact");
  141. assertEquals(wxMessage.getChangeType(), "update_user");
  142. assertEquals(wxMessage.getUserId(), "zhangsan");
  143. assertNotNull(wxMessage.getExtAttrs());
  144. assertNotNull(wxMessage.getExtAttrs().getItems());
  145. assertEquals(wxMessage.getExtAttrs().getItems().size(), 3);
  146. assertEquals(wxMessage.getExtAttrs().getItems().get(0).getName(), "爱好");
  147. }
  148. public void testTaskCardEvent() {
  149. String xml = "<xml>" +
  150. "<ToUserName><![CDATA[toUser]]></ToUserName>" +
  151. "<FromUserName><![CDATA[FromUser]]></FromUserName>" +
  152. "<CreateTime>123456789</CreateTime>" +
  153. "<MsgType><![CDATA[event]]></MsgType>" +
  154. "<Event><![CDATA[taskcard_click]]></Event>" +
  155. "<EventKey><![CDATA[key111]]></EventKey>" +
  156. "<TaskId><![CDATA[taskid111]]></TaskId >" +
  157. "<AgentID>1</AgentID>" +
  158. "</xml>";
  159. WxCpXmlMessage wxMessage = WxCpXmlMessage.fromXml(xml);
  160. assertEquals(wxMessage.getToUserName(), "toUser");
  161. assertEquals(wxMessage.getFromUserName(), "FromUser");
  162. assertEquals(wxMessage.getCreateTime(), Long.valueOf(123456789L));
  163. assertEquals(wxMessage.getMsgType(), WxConsts.XmlMsgType.EVENT);
  164. assertEquals(wxMessage.getAgentId(), Integer.valueOf(1));
  165. assertEquals(wxMessage.getEvent(), TASKCARD_CLICK);
  166. assertEquals(wxMessage.getEventKey(), "key111");
  167. assertEquals(wxMessage.getTaskId(), "taskid111");
  168. }
  169. public void testAddExternalUserEvent() {
  170. String xml = "<xml>" +
  171. "<ToUserName><![CDATA[toUser]]></ToUserName>" +
  172. "<FromUserName><![CDATA[sys]]></FromUserName>" +
  173. "<CreateTime>1403610513</CreateTime>" +
  174. "<MsgType><![CDATA[event]]></MsgType>" +
  175. "<Event><![CDATA[change_external_contact]]></Event>" +
  176. "<ChangeType><![CDATA[add_external_contact]]></ChangeType>" +
  177. "<UserID><![CDATA[zhangsan]]></UserID>" +
  178. "<ExternalUserID><![CDATA[woAJ2GCAAAXtWyujaWJHDDGi0mACH71w]]></ExternalUserID>" +
  179. "<State><![CDATA[teststate]]></State>" +
  180. "<WelcomeCode><![CDATA[WELCOMECODE]]></WelcomeCode>" +
  181. "</xml >";
  182. WxCpXmlMessage wxMessage = WxCpXmlMessage.fromXml(xml);
  183. assertEquals(wxMessage.getToUserName(), "toUser");
  184. assertEquals(wxMessage.getFromUserName(), "sys");
  185. assertEquals(wxMessage.getCreateTime(), Long.valueOf(1403610513L));
  186. assertEquals(wxMessage.getMsgType(), WxConsts.XmlMsgType.EVENT);
  187. assertEquals(wxMessage.getEvent(), WxCpConsts.EventType.CHANGE_EXTERNAL_CONTACT);
  188. assertEquals(wxMessage.getChangeType(), WxCpConsts.ExternalContactChangeType.ADD_EXTERNAL_CONTACT);
  189. assertEquals(wxMessage.getExternalUserId(), "woAJ2GCAAAXtWyujaWJHDDGi0mACH71w");
  190. assertEquals(wxMessage.getState(), "teststate");
  191. assertEquals(wxMessage.getWelcomeCode(), "WELCOMECODE");
  192. }
  193. public void testDelExternalUserEvent() {
  194. String xml = "<xml>" +
  195. "<ToUserName><![CDATA[toUser]]></ToUserName>" +
  196. "<FromUserName><![CDATA[sys]]></FromUserName>" +
  197. "<CreateTime>1403610513</CreateTime>" +
  198. "<MsgType><![CDATA[event]]></MsgType>" +
  199. "<Event><![CDATA[change_external_contact]]></Event>" +
  200. "<ChangeType><![CDATA[del_external_contact]]></ChangeType>" +
  201. "<UserID><![CDATA[zhangsan]]></UserID>" +
  202. "<ExternalUserID><![CDATA[woAJ2GCAAAXtWyujaWJHDDGi0mACH71w]]></ExternalUserID>" +
  203. "</xml>";
  204. WxCpXmlMessage wxMessage = WxCpXmlMessage.fromXml(xml);
  205. assertEquals(wxMessage.getToUserName(), "toUser");
  206. assertEquals(wxMessage.getFromUserName(), "sys");
  207. assertEquals(wxMessage.getCreateTime(), Long.valueOf(1403610513L));
  208. assertEquals(wxMessage.getMsgType(), WxConsts.XmlMsgType.EVENT);
  209. assertEquals(wxMessage.getEvent(), WxCpConsts.EventType.CHANGE_EXTERNAL_CONTACT);
  210. assertEquals(wxMessage.getChangeType(), WxCpConsts.ExternalContactChangeType.DEL_EXTERNAL_CONTACT);
  211. assertEquals(wxMessage.getUserId(), "zhangsan");
  212. assertEquals(wxMessage.getExternalUserId(), "woAJ2GCAAAXtWyujaWJHDDGi0mACH71w");
  213. }
  214. public void testChangeContact() {
  215. String xml = "<xml>\n" +
  216. " <ToUserName><![CDATA[toUser]]></ToUserName>\n" +
  217. " <FromUserName><![CDATA[sys]]></FromUserName> \n" +
  218. " <CreateTime>1403610513</CreateTime>\n" +
  219. " <MsgType><![CDATA[event]]></MsgType>\n" +
  220. " <Event><![CDATA[change_contact]]></Event>\n" +
  221. " <ChangeType>update_user</ChangeType>\n" +
  222. " <UserID><![CDATA[zhangsan]]></UserID>\n" +
  223. " <NewUserID><![CDATA[zhangsan001]]></NewUserID>\n" +
  224. " <Name><![CDATA[张三]]></Name>\n" +
  225. " <Department><![CDATA[1,2,3]]></Department>\n" +
  226. " <IsLeaderInDept><![CDATA[1,0,0]]></IsLeaderInDept>\n" +
  227. " <Position><![CDATA[产品经理]]></Position>\n" +
  228. " <Mobile>15913215421</Mobile>\n" +
  229. " <Gender>1</Gender>\n" +
  230. " <Email><![CDATA[zhangsan@gzdev.com]]></Email>\n" +
  231. " <Status>1</Status>\n" +
  232. " <Avatar><![CDATA[http://wx.qlogo.cn/mmopen/ajNVdqHZLLA3WJ6DSZUfiakYe37PKnQhBIeOQBO4czqrnZDS79FH5Wm5m4X69TBicnHFlhiafvDwklOpZeXYQQ2icg/0]]></Avatar>\n" +
  233. " <Alias><![CDATA[zhangsan]]></Alias>\n" +
  234. " <Telephone><![CDATA[020-3456788]]></Telephone>\n" +
  235. " <Address><![CDATA[广州市]]></Address>\n" +
  236. " <ExtAttr>\n" +
  237. " <Item>\n" +
  238. " <Name><![CDATA[爱好]]></Name>\n" +
  239. " <Type>0</Type>\n" +
  240. " <Text>\n" +
  241. " <Value><![CDATA[旅游]]></Value>\n" +
  242. " </Text>\n" +
  243. " </Item>\n" +
  244. " <Item>\n" +
  245. " <Name><![CDATA[卡号]]></Name>\n" +
  246. " <Type>1</Type>\n" +
  247. " <Web>\n" +
  248. " <Title><![CDATA[企业微信]]></Title>\n" +
  249. " <Url><![CDATA[https://work.weixin.qq.com]]></Url>\n" +
  250. " </Web>\n" +
  251. " </Item>\n" +
  252. " </ExtAttr>\n" +
  253. "</xml>";
  254. WxCpXmlMessage wxCpXmlMessage = WxCpXmlMessage.fromXml(xml);
  255. assertThat(wxCpXmlMessage).isNotNull();
  256. assertThat(wxCpXmlMessage.getDepartments()).isNotEmpty();
  257. System.out.println(XStreamTransformer.toXml(WxCpXmlMessage.class, wxCpXmlMessage));
  258. }
  259. }