Переглянути джерело

issue #18 支持新的自定义菜单事件类型

master
Daniel Qian 10 роки тому
джерело
коміт
49721a979a
4 змінених файлів з 242 додано та 10 видалено
  1. +28
    -1
      src/main/java/me/chanjar/weixin/api/WxConsts.java
  2. +181
    -4
      src/main/java/me/chanjar/weixin/bean/WxXmlMessage.java
  3. +5
    -5
      src/test/java/me/chanjar/weixin/api/WxMenuAPITest.java
  4. +28
    -0
      src/test/java/me/chanjar/weixin/bean/WxXmlMessageTest.java

+ 28
- 1
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";

}

+ 181
- 4
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;

/**
* <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;
}
}

}

+ 5
- 5
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");


+ 28
- 0
src/test/java/me/chanjar/weixin/bean/WxXmlMessageTest.java Переглянути файл

@@ -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");
}
}

Завантаження…
Відмінити
Зберегти