weixin4j-base:新增群发卡券消息类型
This commit is contained in:
parent
b273c59186
commit
3696b813dd
@ -314,3 +314,7 @@
|
||||
* 2015-06-04
|
||||
|
||||
+ **weixin4j-mp**: 新增查询红包接口
|
||||
|
||||
* 2015-06-08
|
||||
|
||||
+ **weixin4j-base**: 新增群发卡券消息类型
|
||||
|
||||
@ -52,4 +52,8 @@
|
||||
|
||||
* 2015-05-07
|
||||
|
||||
+ 删除ResponseTuple接口
|
||||
+ 删除ResponseTuple接口
|
||||
|
||||
* 2015-06-08
|
||||
|
||||
+ 新增群发卡券消息类型
|
||||
@ -0,0 +1,47 @@
|
||||
package com.foxinmy.weixin4j.tuple;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
|
||||
/**
|
||||
* 卡券对象
|
||||
* <p>
|
||||
* <font color="red">可用于「群发消息」</font>
|
||||
* </p>
|
||||
*
|
||||
* @className Card
|
||||
* @author jy
|
||||
* @date 2015年6月8日
|
||||
* @since JDK 1.7
|
||||
* @see
|
||||
*/
|
||||
public class Card implements MassTuple {
|
||||
|
||||
private static final long serialVersionUID = 6119453633595102147L;
|
||||
|
||||
@Override
|
||||
public String getMessageType() {
|
||||
return "wxcard";
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传后的微信返回的媒体ID
|
||||
*/
|
||||
@JSONField(name = "card_id")
|
||||
@XmlElement(name = "CardId")
|
||||
private String cardId;
|
||||
|
||||
public Card(String cardId) {
|
||||
this.cardId = cardId;
|
||||
}
|
||||
|
||||
public String getCardId() {
|
||||
return cardId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Card [cardId=" + cardId + "]";
|
||||
}
|
||||
}
|
||||
@ -40,10 +40,6 @@ public class File implements NotifyTuple {
|
||||
return mediaId;
|
||||
}
|
||||
|
||||
public void setMediaId(String mediaId) {
|
||||
this.mediaId = mediaId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "File [mediaId=" + mediaId + "]";
|
||||
|
||||
@ -40,10 +40,6 @@ public class Image implements MassTuple, NotifyTuple {
|
||||
return mediaId;
|
||||
}
|
||||
|
||||
public void setMediaId(String mediaId) {
|
||||
this.mediaId = mediaId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Image [mediaId=" + mediaId + "]";
|
||||
|
||||
@ -12,6 +12,7 @@ package com.foxinmy.weixin4j.tuple;
|
||||
* @see com.foxinmy.weixin4j.tuple.Voice
|
||||
* @see com.foxinmy.weixin4j.tuple.MpVideo
|
||||
* @see com.foxinmy.weixin4j.tuple.MpNews
|
||||
* @see com.foxinmy.weixin4j.tuple.Card
|
||||
*/
|
||||
public interface MassTuple extends Tuple {
|
||||
|
||||
|
||||
@ -46,13 +46,13 @@ public class MpArticle implements Serializable {
|
||||
*/
|
||||
@JSONField(name = "show_cover_pic")
|
||||
private String showCoverPic;
|
||||
|
||||
|
||||
/**
|
||||
* 正文的URL 可为空
|
||||
*/
|
||||
@JSONField(name = "content_url")
|
||||
private String contentUrl;
|
||||
|
||||
|
||||
/**
|
||||
* 封面图片的URL 可为空
|
||||
*/
|
||||
@ -73,10 +73,6 @@ public class MpArticle implements Serializable {
|
||||
return thumbMediaId;
|
||||
}
|
||||
|
||||
public void setThumbMediaId(String thumbMediaId) {
|
||||
this.thumbMediaId = thumbMediaId;
|
||||
}
|
||||
|
||||
public String getAuthor() {
|
||||
return author;
|
||||
}
|
||||
@ -89,10 +85,6 @@ public class MpArticle implements Serializable {
|
||||
return title;
|
||||
}
|
||||
|
||||
public void setTitle(String title) {
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public String getSourceUrl() {
|
||||
return sourceUrl;
|
||||
}
|
||||
@ -105,10 +97,6 @@ public class MpArticle implements Serializable {
|
||||
return content;
|
||||
}
|
||||
|
||||
public void setContent(String content) {
|
||||
this.content = content;
|
||||
}
|
||||
|
||||
public String getDigest() {
|
||||
return digest;
|
||||
}
|
||||
|
||||
@ -40,10 +40,6 @@ public class MpVideo implements MassTuple {
|
||||
return mediaId;
|
||||
}
|
||||
|
||||
public void setMediaId(String mediaId) {
|
||||
this.mediaId = mediaId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "MpVideo [mediaId=" + mediaId + "]";
|
||||
|
||||
@ -104,10 +104,6 @@ public class Music implements NotifyTuple {
|
||||
return thumbMediaId;
|
||||
}
|
||||
|
||||
public void setThumbMediaId(String thumbMediaId) {
|
||||
this.thumbMediaId = thumbMediaId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Music [title=" + title + ", desc=" + desc + ", musicUrl="
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
package com.foxinmy.weixin4j.tuple;
|
||||
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
/**
|
||||
* 文本对象
|
||||
@ -14,7 +13,6 @@ import javax.xml.bind.annotation.XmlRootElement;
|
||||
* @since JDK 1.7
|
||||
* @see
|
||||
*/
|
||||
@XmlRootElement(name = "Content")
|
||||
public class Text implements MassTuple, NotifyTuple {
|
||||
|
||||
private static final long serialVersionUID = 520050144519064503L;
|
||||
|
||||
@ -73,10 +73,6 @@ public class Video implements NotifyTuple {
|
||||
return mediaId;
|
||||
}
|
||||
|
||||
public void setMediaId(String mediaId) {
|
||||
this.mediaId = mediaId;
|
||||
}
|
||||
|
||||
public String getThumbMediaId() {
|
||||
return thumbMediaId;
|
||||
}
|
||||
|
||||
@ -1,192 +0,0 @@
|
||||
package com.foxinmy.weixin4j.dispatcher;
|
||||
|
||||
import io.netty.util.internal.logging.InternalLogger;
|
||||
import io.netty.util.internal.logging.InternalLoggerFactory;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import com.foxinmy.weixin4j.message.ImageMessage;
|
||||
import com.foxinmy.weixin4j.message.LocationMessage;
|
||||
import com.foxinmy.weixin4j.message.TextMessage;
|
||||
import com.foxinmy.weixin4j.message.VideoMessage;
|
||||
import com.foxinmy.weixin4j.message.VoiceMessage;
|
||||
import com.foxinmy.weixin4j.message.event.LocationEventMessage;
|
||||
import com.foxinmy.weixin4j.messagekey.WeixinMessageKeyDefiner;
|
||||
import com.foxinmy.weixin4j.mp.event.KfCloseEventMessage;
|
||||
import com.foxinmy.weixin4j.mp.event.KfCreateEventMessage;
|
||||
import com.foxinmy.weixin4j.mp.event.KfSwitchEventMessage;
|
||||
import com.foxinmy.weixin4j.mp.event.MassEventMessage;
|
||||
import com.foxinmy.weixin4j.mp.event.ScanEventMessage;
|
||||
import com.foxinmy.weixin4j.mp.event.TemplatesendjobfinishMessage;
|
||||
import com.foxinmy.weixin4j.qy.event.BatchjobresultMessage;
|
||||
import com.foxinmy.weixin4j.qy.event.EnterAgentEventMessage;
|
||||
import com.foxinmy.weixin4j.type.AccountType;
|
||||
import com.foxinmy.weixin4j.type.EventType;
|
||||
import com.foxinmy.weixin4j.type.MessageType;
|
||||
|
||||
/**
|
||||
* 微信消息匹配(不够优雅,待改进)
|
||||
*
|
||||
* @className WeixinMessageMatcher
|
||||
* @author jy
|
||||
* @date 2015年5月17日
|
||||
* @since JDK 1.7
|
||||
* @see com.foxinmy.weixin4j.request.WeixinMessage
|
||||
* @see com.foxinmy.weixin4j.messagekey.WeixinMessageKeyDefiner
|
||||
*/
|
||||
public class WeixinMessageMatcher {
|
||||
|
||||
private final InternalLogger logger = InternalLoggerFactory
|
||||
.getInstance(getClass());
|
||||
|
||||
private final Map<String, Class<?>> key2ClassMap;
|
||||
private final Map<Class<?>, String> class2KeyMap;
|
||||
|
||||
private final WeixinMessageKeyDefiner messageKeyDefiner;
|
||||
|
||||
public WeixinMessageMatcher(WeixinMessageKeyDefiner messageKeyDefiner) {
|
||||
this.messageKeyDefiner = messageKeyDefiner;
|
||||
key2ClassMap = new HashMap<String, Class<?>>();
|
||||
class2KeyMap = new HashMap<Class<?>, String>();
|
||||
init0();
|
||||
init1();
|
||||
init2();
|
||||
init3();
|
||||
logger.info("detected message for events: {}", key2ClassMap.keySet());
|
||||
}
|
||||
|
||||
public WeixinMessageKeyDefiner getMessageKeyDefiner() {
|
||||
return messageKeyDefiner;
|
||||
}
|
||||
|
||||
private String messageKey(MessageType messageType) {
|
||||
return messageKeyDefiner.defineMessageKey(messageType.name(), null,
|
||||
null);
|
||||
}
|
||||
|
||||
private String mpEventMessageKey(EventType eventType) {
|
||||
return messageKeyDefiner.defineMessageKey(MessageType.event.name(),
|
||||
eventType.name(), AccountType.MP);
|
||||
}
|
||||
|
||||
private String qyEventMessageKey(EventType eventType) {
|
||||
return messageKeyDefiner.defineMessageKey(MessageType.event.name(),
|
||||
eventType.name(), AccountType.QY);
|
||||
}
|
||||
|
||||
private void init0() {
|
||||
// /////////////////////////////////////////////////
|
||||
/******************** 普通消息 ********************/
|
||||
// /////////////////////////////////////////////////
|
||||
regist(messageKey(MessageType.text), TextMessage.class);
|
||||
regist(messageKey(MessageType.image), ImageMessage.class);
|
||||
regist(messageKey(MessageType.voice), VoiceMessage.class);
|
||||
regist(messageKey(MessageType.video), VideoMessage.class);
|
||||
regist(messageKey(MessageType.shortvideo), VideoMessage.class);
|
||||
regist(messageKey(MessageType.location), LocationMessage.class);
|
||||
}
|
||||
|
||||
private void init1() {
|
||||
// /////////////////////////////////////////////////
|
||||
/******************** 事件消息 ********************/
|
||||
// /////////////////////////////////////////////////
|
||||
for (EventType eventType : new EventType[] { EventType.subscribe,
|
||||
EventType.unsubscribe }) {
|
||||
regist(mpEventMessageKey(eventType),
|
||||
com.foxinmy.weixin4j.mp.event.ScribeEventMessage.class);
|
||||
}
|
||||
for (EventType eventType : new EventType[] { EventType.subscribe,
|
||||
EventType.unsubscribe }) {
|
||||
regist(qyEventMessageKey(eventType),
|
||||
com.foxinmy.weixin4j.qy.event.ScribeEventMessage.class);
|
||||
}
|
||||
Class<?> clazz = LocationEventMessage.class;
|
||||
regist(mpEventMessageKey(EventType.location), clazz);
|
||||
regist(qyEventMessageKey(EventType.location), clazz);
|
||||
for (EventType eventType : new EventType[] { EventType.click,
|
||||
EventType.view }) {
|
||||
clazz = com.foxinmy.weixin4j.message.event.MenuEventMessage.class;
|
||||
regist(mpEventMessageKey(eventType), clazz);
|
||||
regist(qyEventMessageKey(eventType), clazz);
|
||||
}
|
||||
for (EventType eventType : new EventType[] { EventType.scancode_push,
|
||||
EventType.scancode_waitmsg }) {
|
||||
clazz = com.foxinmy.weixin4j.message.event.MenuScanEventMessage.class;
|
||||
regist(mpEventMessageKey(eventType), clazz);
|
||||
regist(qyEventMessageKey(eventType), clazz);
|
||||
}
|
||||
for (EventType eventType : new EventType[] { EventType.pic_sysphoto,
|
||||
EventType.pic_photo_or_album, EventType.pic_weixin }) {
|
||||
clazz = com.foxinmy.weixin4j.message.event.MenuPhotoEventMessage.class;
|
||||
regist(mpEventMessageKey(eventType), clazz);
|
||||
regist(qyEventMessageKey(eventType), clazz);
|
||||
}
|
||||
clazz = com.foxinmy.weixin4j.message.event.MenuLocationEventMessage.class;
|
||||
regist(mpEventMessageKey(EventType.location_select), clazz);
|
||||
regist(qyEventMessageKey(EventType.location_select), clazz);
|
||||
}
|
||||
|
||||
private void init2() {
|
||||
// /////////////////////////////////////////////////
|
||||
/******************** 公众平台事件消息 ********************/
|
||||
// /////////////////////////////////////////////////
|
||||
regist(mpEventMessageKey(EventType.scan), ScanEventMessage.class);
|
||||
regist(mpEventMessageKey(EventType.masssendjobfinish),
|
||||
MassEventMessage.class);
|
||||
regist(mpEventMessageKey(EventType.templatesendjobfinish),
|
||||
TemplatesendjobfinishMessage.class);
|
||||
regist(mpEventMessageKey(EventType.kf_create_session),
|
||||
KfCreateEventMessage.class);
|
||||
regist(mpEventMessageKey(EventType.kf_close_session),
|
||||
KfCloseEventMessage.class);
|
||||
regist(mpEventMessageKey(EventType.kf_switch_session),
|
||||
KfSwitchEventMessage.class);
|
||||
}
|
||||
|
||||
private void init3() {
|
||||
// /////////////////////////////////////////////////
|
||||
/******************** 企业号事件消息 ********************/
|
||||
// /////////////////////////////////////////////////
|
||||
regist(qyEventMessageKey(EventType.batch_job_result),
|
||||
BatchjobresultMessage.class);
|
||||
regist(qyEventMessageKey(EventType.enter_agent),
|
||||
EnterAgentEventMessage.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册一个消息类型
|
||||
*
|
||||
* @param messageKey
|
||||
* 消息的key
|
||||
* @param clazz
|
||||
* 消息类型
|
||||
*/
|
||||
public void regist(String messageKey, Class<?> clazz) {
|
||||
key2ClassMap.put(messageKey, clazz);
|
||||
class2KeyMap.put(clazz, messageKey);
|
||||
}
|
||||
|
||||
/**
|
||||
* 匹配到消息
|
||||
*
|
||||
* @param keyOrClass
|
||||
* 消息key或者消息类型
|
||||
* @return 匹配结果
|
||||
*/
|
||||
public boolean match(Object keyOrClass) {
|
||||
return key2ClassMap.containsKey(keyOrClass)
|
||||
|| class2KeyMap.containsKey(keyOrClass);
|
||||
}
|
||||
|
||||
/**
|
||||
* 消息key找到消息类型
|
||||
*
|
||||
* @param messageKey
|
||||
* 消息key
|
||||
* @return 消息类型
|
||||
*/
|
||||
public Class<?> find(String messageKey) {
|
||||
return key2ClassMap.get(messageKey);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,42 @@
|
||||
package com.foxinmy.weixin4j.messagekey;
|
||||
|
||||
/**
|
||||
* 微信消息匹配
|
||||
*
|
||||
* @className WeixinMessageMatcher
|
||||
* @author jy
|
||||
* @date 2015年5月17日
|
||||
* @since JDK 1.7
|
||||
* @see com.foxinmy.weixin4j.request.WeixinMessage
|
||||
* @see com.foxinmy.weixin4j.messagekey.WeixinMessageKeyDefiner
|
||||
*/
|
||||
public interface WeixinMessageMatcher {
|
||||
|
||||
/**
|
||||
* 消息是否匹配
|
||||
*
|
||||
* @param messageKeyOrMessageClass
|
||||
* 消息key或者消息类型
|
||||
* @return 匹配结果
|
||||
*/
|
||||
public boolean match(Object messageKeyOrMessageClass);
|
||||
|
||||
/**
|
||||
* 匹配到消息类型
|
||||
*
|
||||
* @param messageKey
|
||||
* 消息key
|
||||
* @return 消息类型
|
||||
*/
|
||||
public Class<?> match(String messageKey);
|
||||
|
||||
/**
|
||||
* 注册messageClass
|
||||
*
|
||||
* @param messageKey
|
||||
* 消息key
|
||||
* @param messageClass
|
||||
* 消息类型
|
||||
*/
|
||||
public void regist(String messageKey, Class<?> messageClass);
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user