diff --git a/src/main/java/me/chanjar/weixin/api/WxConsts.java b/src/main/java/me/chanjar/weixin/api/WxConsts.java index 317806fa..f2152428 100644 --- a/src/main/java/me/chanjar/weixin/api/WxConsts.java +++ b/src/main/java/me/chanjar/weixin/api/WxConsts.java @@ -78,9 +78,15 @@ public class WxConsts { public static final String EVT_UNSUBSCRIBE = "unsubscribe"; public static final String EVT_SCAN = "SCAN"; public static final String EVT_LOCATION = "LOCATION"; - public static final String EVT_CLICK = "LOCATION"; + public static final String EVT_CLICK = "CLICK"; public static final String EVT_VIEW = "VIEW"; public static final String EVT_MASS_SEND_JOB_FINISH = "MASSSENDJOBFINISH"; + public static final String EVT_SCANCODE_PUSH = "scancode_push"; + public static final String EVT_SCANCODE_WAITMSG = "scancode_waitmsg"; + public static final String EVT_PIC_SYSPHOTO = "pic_sysphoto"; + public static final String EVT_PIC_PHOTO_OR_ALBUM = "pic_photo_or_album"; + public static final String EVT_PIC_WEIXIN = "pic_weixin"; + public static final String EVT_LOCATION_SELECT = "location_select"; /////////////////////// // 上传多媒体文件的类型 @@ -98,4 +104,25 @@ public class WxConsts { public static final String FILE_ARM = "arm"; public static final String FILE_MP4 = "mp4"; + + /////////////////////// + // 自定义菜单的按钮类型 + /////////////////////// + /** 点击推事件 */ + public static final String BUTTON_CLICK = "click"; + /** 跳转URL */ + public static final String BUTTON_VIEW = "view"; + /** 扫码推事件 */ + public static final String BUTTON_SCANCODE_PUSH = "scancode_push"; + /** 扫码推事件且弹出“消息接收中”提示框 */ + public static final String BUTTON_SCANCODE_WAITMSG = "scancode_waitmsg"; + /** 弹出系统拍照发图 */ + public static final String PIC_SYSPHOTO = "pic_sysphoto"; + /** 弹出拍照或者相册发图 */ + public static final String PIC_PHOTO_OR_ALBUM = "pic_photo_or_album"; + /** 弹出微信相册发图器 */ + public static final String PIC_WEIXIN = "pic_weixin"; + /** 弹出地理位置选择器 */ + public static final String LOCATION_SELECT = "location_select"; + } diff --git a/src/main/java/me/chanjar/weixin/bean/WxXmlMessage.java b/src/main/java/me/chanjar/weixin/bean/WxXmlMessage.java index 67fe1bbd..97a8e3a6 100644 --- a/src/main/java/me/chanjar/weixin/bean/WxXmlMessage.java +++ b/src/main/java/me/chanjar/weixin/bean/WxXmlMessage.java @@ -8,13 +8,12 @@ import me.chanjar.weixin.util.xml.XmlTransformer; import org.apache.commons.io.IOUtils; import javax.xml.bind.JAXBException; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.*; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.io.IOException; import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; /** *
@@ -149,6 +148,15 @@ public class WxXmlMessage { */ private Integer ErrorCount; + @XmlElement(name = "ScanCodeInfo") + private ScanCodeInfo ScanCodeInfo = new ScanCodeInfo(); + + @XmlElement(name = "SendPicsInfo") + private SendPicsInfo SendPicsInfo = new SendPicsInfo(); + + @XmlElement(name = "SendLocationInfo") + private SendLocationInfo SendLocationInfo = new SendLocationInfo(); + public String getToUserName() { return ToUserName; } @@ -454,4 +462,173 @@ public class WxXmlMessage { ErrorCount = errorCount; } + public WxXmlMessage.ScanCodeInfo getScanCodeInfo() { + return ScanCodeInfo; + } + + public void setScanCodeInfo(WxXmlMessage.ScanCodeInfo scanCodeInfo) { + ScanCodeInfo = scanCodeInfo; + } + + public WxXmlMessage.SendPicsInfo getSendPicsInfo() { + return SendPicsInfo; + } + + public void setSendPicsInfo(WxXmlMessage.SendPicsInfo sendPicsInfo) { + SendPicsInfo = sendPicsInfo; + } + + public WxXmlMessage.SendLocationInfo getSendLocationInfo() { + return SendLocationInfo; + } + + public void setSendLocationInfo(WxXmlMessage.SendLocationInfo sendLocationInfo) { + SendLocationInfo = sendLocationInfo; + } + + @XmlRootElement(name = "ScanCodeInfo") + @XmlAccessorType(XmlAccessType.FIELD) + public static class ScanCodeInfo { + + @XmlElement(name = "ScanType") + @XmlJavaTypeAdapter(AdapterCDATA.class) + private String ScanType; + + @XmlElement(name = "ScanResult") + @XmlJavaTypeAdapter(AdapterCDATA.class) + private String ScanResult; + + /** + * 扫描类型,一般是qrcode + * @return + */ + public String getScanType() { + + return ScanType; + } + + public void setScanType(String scanType) { + ScanType = scanType; + } + + /** + * 扫描结果,即二维码对应的字符串信息 + * @return + */ + public String getScanResult() { + return ScanResult; + } + + public void setScanResult(String scanResult) { + ScanResult = scanResult; + } + + } + + @XmlRootElement(name = "SendPicsInfo") + @XmlAccessorType(XmlAccessType.FIELD) + public static class SendPicsInfo { + + private Long Count; + + @XmlElementWrapper(name="PicList") + @XmlElement(name = "item") + protected final List- PicList = new ArrayList
- (); + + public Long getCount() { + return Count; + } + + public void setCount(Long count) { + Count = count; + } + + public List
- getPicList() { + return PicList; + } + + @XmlRootElement(name = "item") + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "me.chanjar.weixin.bean.WxXmlMessage.SendPicsInfo.Item") + public static class Item { + + @XmlElement(name = "PicMd5Sum") + @XmlJavaTypeAdapter(AdapterCDATA.class) + private String PicMd5Sum; + + public String getPicMd5Sum() { + return PicMd5Sum; + } + + public void setPicMd5Sum(String picMd5Sum) { + PicMd5Sum = picMd5Sum; + } + } + } + + @XmlRootElement(name = "SendLocationInfo") + @XmlAccessorType(XmlAccessType.FIELD) + public static class SendLocationInfo { + + @XmlElement(name = "Location_X") + @XmlJavaTypeAdapter(AdapterCDATA.class) + private String Location_X; + + @XmlElement(name = "Location_Y") + @XmlJavaTypeAdapter(AdapterCDATA.class) + private String Location_Y; + + @XmlElement(name = "Scale") + @XmlJavaTypeAdapter(AdapterCDATA.class) + private String Scale; + + @XmlElement(name = "Label") + @XmlJavaTypeAdapter(AdapterCDATA.class) + private String Label; + + @XmlElement(name = "Poiname") + @XmlJavaTypeAdapter(AdapterCDATA.class) + private String Poiname; + + public String getLocation_X() { + return Location_X; + } + + public void setLocation_X(String location_X) { + Location_X = location_X; + } + + public String getLocation_Y() { + return Location_Y; + } + + public void setLocation_Y(String location_Y) { + Location_Y = location_Y; + } + + public String getScale() { + return Scale; + } + + public void setScale(String scale) { + Scale = scale; + } + + public String getLabel() { + return Label; + } + + public void setLabel(String label) { + Label = label; + } + + public String getPoiname() { + return Poiname; + } + + public void setPoiname(String poiname) { + Poiname = poiname; + } + } + } diff --git a/src/test/java/me/chanjar/weixin/api/WxMenuAPITest.java b/src/test/java/me/chanjar/weixin/api/WxMenuAPITest.java index f85f2ed4..72fc59a6 100644 --- a/src/test/java/me/chanjar/weixin/api/WxMenuAPITest.java +++ b/src/test/java/me/chanjar/weixin/api/WxMenuAPITest.java @@ -44,12 +44,12 @@ public class WxMenuAPITest { public Object[][] getMenu() throws JAXBException { WxMenu menu = new WxMenu(); WxMenuButton button1 = new WxMenuButton(); - button1.setType("click"); + button1.setType(WxConsts.BUTTON_CLICK); button1.setName("今日歌曲"); button1.setKey("V1001_TODAY_MUSIC"); WxMenuButton button2 = new WxMenuButton(); - button2.setType("click"); + button2.setType(WxConsts.BUTTON_CLICK); button2.setName("歌手简介"); button2.setKey("V1001_TODAY_SINGER"); @@ -61,17 +61,17 @@ public class WxMenuAPITest { menu.getButton().add(button3); WxMenuButton button31 = new WxMenuButton(); - button31.setType("view"); + button31.setType(WxConsts.BUTTON_VIEW); button31.setName("搜索"); button31.setUrl("http://www.soso.com/"); WxMenuButton button32 = new WxMenuButton(); - button32.setType("view"); + button32.setType(WxConsts.BUTTON_VIEW); button32.setName("视频"); button32.setUrl("http://v.qq.com/"); WxMenuButton button33 = new WxMenuButton(); - button33.setType("click"); + button33.setType(WxConsts.BUTTON_CLICK); button33.setName("赞一下我们"); button33.setKey("V1001_GOOD"); diff --git a/src/test/java/me/chanjar/weixin/bean/WxXmlMessageTest.java b/src/test/java/me/chanjar/weixin/bean/WxXmlMessageTest.java index 79ad7634..9a6691cc 100644 --- a/src/test/java/me/chanjar/weixin/bean/WxXmlMessageTest.java +++ b/src/test/java/me/chanjar/weixin/bean/WxXmlMessageTest.java @@ -33,6 +33,25 @@ public class WxXmlMessageTest { + "
23.137466 " + "113.352425 " + "119.385040 " + + "" + + " " + + "" + + " " + + " " + + " " + + "1 \n" + + "" + + " " + + "- " + + "
" + + "" + + " " + + " " + ""; WxXmlMessage wxMessage = WxXmlMessage.fromXml(xml); Assert.assertEquals(wxMessage.getToUserName(), "toUser"); @@ -58,6 +77,15 @@ public class WxXmlMessageTest { Assert.assertEquals(wxMessage.getLatitude(), new Double(23.137466)); Assert.assertEquals(wxMessage.getLongitude(), new Double(113.352425)); Assert.assertEquals(wxMessage.getPrecision(), new Double(119.385040)); + Assert.assertEquals(wxMessage.getScanCodeInfo().getScanType(), "qrcode"); + Assert.assertEquals(wxMessage.getScanCodeInfo().getScanResult(), "1"); + Assert.assertEquals(wxMessage.getSendPicsInfo().getCount(), new Long(1l)); + Assert.assertEquals(wxMessage.getSendPicsInfo().getPicList().get(0).getPicMd5Sum(), "1b5f7c23b5bf75682a53e7b6d163e185"); + Assert.assertEquals(wxMessage.getSendLocationInfo().getLocation_X(), "23"); + Assert.assertEquals(wxMessage.getSendLocationInfo().getLocation_Y(), "113"); + Assert.assertEquals(wxMessage.getSendLocationInfo().getScale(), "15"); + Assert.assertEquals(wxMessage.getSendLocationInfo().getLabel(), " 广州市海珠区客村艺苑路 106号"); + Assert.assertEquals(wxMessage.getSendLocationInfo().getPoiname(), "wo de poi"); } }\n" + + " \n" + + " \n" + + " \n" + + " \n" + + "