| @@ -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"; | |||
| } | |||
| @@ -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; | |||
| /** | |||
| * <pre> | |||
| @@ -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<Item> PicList = new ArrayList<Item>(); | |||
| public Long getCount() { | |||
| return Count; | |||
| } | |||
| public void setCount(Long count) { | |||
| Count = count; | |||
| } | |||
| public List<Item> 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; | |||
| } | |||
| } | |||
| } | |||
| @@ -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"); | |||
| @@ -33,6 +33,25 @@ public class WxXmlMessageTest { | |||
| + "<Latitude>23.137466</Latitude>" | |||
| + "<Longitude>113.352425</Longitude>" | |||
| + "<Precision>119.385040</Precision>" | |||
| + "<ScanCodeInfo>" | |||
| + " <ScanType><![CDATA[qrcode]]></ScanType>" | |||
| + " <ScanResult><![CDATA[1]]></ScanResult>" | |||
| + "</ScanCodeInfo>" | |||
| + "<SendPicsInfo>" | |||
| + " <Count>1</Count>\n" | |||
| + " <PicList>" | |||
| + " <item>" | |||
| + " <PicMd5Sum><![CDATA[1b5f7c23b5bf75682a53e7b6d163e185]]></PicMd5Sum>" | |||
| + " </item>" | |||
| + " </PicList>" | |||
| + "</SendPicsInfo>" | |||
| + "<SendLocationInfo>" | |||
| + " <Location_X><![CDATA[23]]></Location_X>\n" | |||
| + " <Location_Y><![CDATA[113]]></Location_Y>\n" | |||
| + " <Scale><![CDATA[15]]></Scale>\n" | |||
| + " <Label><![CDATA[ 广州市海珠区客村艺苑路 106号]]></Label>\n" | |||
| + " <Poiname><![CDATA[wo de poi]]></Poiname>\n" | |||
| + "</SendLocationInfo>" | |||
| + "</xml>"; | |||
| 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"); | |||
| } | |||
| } | |||