mirror of
https://gitee.com/binary/weixin-java-tools.git
synced 2025-10-26 10:49:24 +08:00
被动响应消息测试
This commit is contained in:
@@ -3,7 +3,7 @@ package me.chanjar.weixin.enterprise.api;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import me.chanjar.weixin.enterprise.bean.WxCpXmlMessage;
|
import me.chanjar.weixin.enterprise.bean.WxCpXmlMessage;
|
||||||
import me.chanjar.weixin.enterprise.bean.WxXmlOutMessage;
|
import me.chanjar.weixin.enterprise.bean.WxCpXmlOutMessage;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理微信推送消息的处理器接口
|
* 处理微信推送消息的处理器接口
|
||||||
@@ -18,6 +18,6 @@ public interface WxCpMessageHandler {
|
|||||||
* @param context 上下文,如果handler或interceptor之间有信息要传递,可以用这个
|
* @param context 上下文,如果handler或interceptor之间有信息要传递,可以用这个
|
||||||
* @return xml格式的消息,如果在异步规则里处理的话,可以返回null
|
* @return xml格式的消息,如果在异步规则里处理的话,可以返回null
|
||||||
*/
|
*/
|
||||||
public WxXmlOutMessage handle(WxCpXmlMessage wxMessage, Map<String, Object> context);
|
public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map<String, Object> context);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import java.util.concurrent.Executors;
|
|||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import me.chanjar.weixin.enterprise.bean.WxCpXmlMessage;
|
import me.chanjar.weixin.enterprise.bean.WxCpXmlMessage;
|
||||||
import me.chanjar.weixin.enterprise.bean.WxXmlOutMessage;
|
import me.chanjar.weixin.enterprise.bean.WxCpXmlOutMessage;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <pre>
|
* <pre>
|
||||||
@@ -57,7 +57,7 @@ public class WxCpMessageRouter {
|
|||||||
* 处理微信消息
|
* 处理微信消息
|
||||||
* @param wxMessage
|
* @param wxMessage
|
||||||
*/
|
*/
|
||||||
public WxXmlOutMessage route(final WxCpXmlMessage wxMessage) {
|
public WxCpXmlOutMessage route(final WxCpXmlMessage wxMessage) {
|
||||||
final List<Rule> matchRules = new ArrayList<Rule>();
|
final List<Rule> matchRules = new ArrayList<Rule>();
|
||||||
// 收集匹配的规则
|
// 收集匹配的规则
|
||||||
for (final Rule rule : rules) {
|
for (final Rule rule : rules) {
|
||||||
@@ -86,7 +86,7 @@ public class WxCpMessageRouter {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
WxXmlOutMessage res = null;
|
WxCpXmlOutMessage res = null;
|
||||||
for (final Rule rule : matchRules) {
|
for (final Rule rule : matchRules) {
|
||||||
// 返回最后一个匹配规则的结果
|
// 返回最后一个匹配规则的结果
|
||||||
res = rule.service(wxMessage);
|
res = rule.service(wxMessage);
|
||||||
@@ -270,7 +270,7 @@ public class WxCpMessageRouter {
|
|||||||
* @param wxMessage
|
* @param wxMessage
|
||||||
* @return true 代表继续执行别的router,false 代表停止执行别的router
|
* @return true 代表继续执行别的router,false 代表停止执行别的router
|
||||||
*/
|
*/
|
||||||
protected WxXmlOutMessage service(WxCpXmlMessage wxMessage) {
|
protected WxCpXmlOutMessage service(WxCpXmlMessage wxMessage) {
|
||||||
Map<String, Object> context = new HashMap<String, Object>();
|
Map<String, Object> context = new HashMap<String, Object>();
|
||||||
// 如果拦截器不通过
|
// 如果拦截器不通过
|
||||||
for (WxCpMessageInterceptor interceptor : this.interceptors) {
|
for (WxCpMessageInterceptor interceptor : this.interceptors) {
|
||||||
@@ -280,7 +280,7 @@ public class WxCpMessageRouter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 交给handler处理
|
// 交给handler处理
|
||||||
WxXmlOutMessage res = null;
|
WxCpXmlOutMessage res = null;
|
||||||
for (WxCpMessageHandler handler : this.handlers) {
|
for (WxCpMessageHandler handler : this.handlers) {
|
||||||
// 返回最后handler的结果
|
// 返回最后handler的结果
|
||||||
res = handler.handle(wxMessage, context);
|
res = handler.handle(wxMessage, context);
|
||||||
|
|||||||
@@ -34,6 +34,9 @@ public class WxCpXmlMessage {
|
|||||||
// 以下都是微信推送过来的消息的xml的element所对应的属性
|
// 以下都是微信推送过来的消息的xml的element所对应的属性
|
||||||
///////////////////////
|
///////////////////////
|
||||||
|
|
||||||
|
@XmlElement(name="AgentID")
|
||||||
|
private Integer agentId;
|
||||||
|
|
||||||
@XmlElement(name = "ToUserName")
|
@XmlElement(name = "ToUserName")
|
||||||
@XmlJavaTypeAdapter(AdapterCDATA.class)
|
@XmlJavaTypeAdapter(AdapterCDATA.class)
|
||||||
private String toUserName;
|
private String toUserName;
|
||||||
@@ -161,6 +164,14 @@ public class WxCpXmlMessage {
|
|||||||
@XmlElement(name = "SendLocationInfo")
|
@XmlElement(name = "SendLocationInfo")
|
||||||
private SendLocationInfo sendLocationInfo = new SendLocationInfo();
|
private SendLocationInfo sendLocationInfo = new SendLocationInfo();
|
||||||
|
|
||||||
|
public Integer getAgentId() {
|
||||||
|
return agentId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAgentId(Integer agentId) {
|
||||||
|
this.agentId = agentId;
|
||||||
|
}
|
||||||
|
|
||||||
public String getToUserName() {
|
public String getToUserName() {
|
||||||
return toUserName;
|
return toUserName;
|
||||||
}
|
}
|
||||||
@@ -380,7 +391,7 @@ public class WxCpXmlMessage {
|
|||||||
this.fromUserName = fromUserName;
|
this.fromUserName = fromUserName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static WxCpXmlMessage fromXml(String xml) {
|
protected static WxCpXmlMessage fromXml(String xml) {
|
||||||
try {
|
try {
|
||||||
return XmlTransformer.fromXml(WxCpXmlMessage.class, xml);
|
return XmlTransformer.fromXml(WxCpXmlMessage.class, xml);
|
||||||
} catch (JAXBException e) {
|
} catch (JAXBException e) {
|
||||||
@@ -388,7 +399,7 @@ public class WxCpXmlMessage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static WxCpXmlMessage fromXml(InputStream is) {
|
protected static WxCpXmlMessage fromXml(InputStream is) {
|
||||||
try {
|
try {
|
||||||
return XmlTransformer.fromXml(WxCpXmlMessage.class, is);
|
return XmlTransformer.fromXml(WxCpXmlMessage.class, is);
|
||||||
} catch (JAXBException e) {
|
} catch (JAXBException e) {
|
||||||
|
|||||||
@@ -11,13 +11,13 @@ import me.chanjar.weixin.enterprise.util.xml.MediaIdMarshaller;
|
|||||||
|
|
||||||
@XmlRootElement(name = "xml")
|
@XmlRootElement(name = "xml")
|
||||||
@XmlAccessorType(XmlAccessType.FIELD)
|
@XmlAccessorType(XmlAccessType.FIELD)
|
||||||
public class WxXmlOutImageMessage extends WxXmlOutMessage {
|
public class WxCpXmlOutImageMessage extends WxCpXmlOutMessage {
|
||||||
|
|
||||||
@XmlElement(name="Image")
|
@XmlElement(name="Image")
|
||||||
@XmlJavaTypeAdapter(MediaIdMarshaller.class)
|
@XmlJavaTypeAdapter(MediaIdMarshaller.class)
|
||||||
private String mediaId;
|
private String mediaId;
|
||||||
|
|
||||||
public WxXmlOutImageMessage() {
|
public WxCpXmlOutImageMessage() {
|
||||||
this.msgType = WxConsts.XML_MSG_IMAGE;
|
this.msgType = WxConsts.XML_MSG_IMAGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -20,7 +20,7 @@ import me.chanjar.weixin.enterprise.util.xml.XmlTransformer;
|
|||||||
|
|
||||||
@XmlRootElement(name = "xml")
|
@XmlRootElement(name = "xml")
|
||||||
@XmlAccessorType(XmlAccessType.FIELD)
|
@XmlAccessorType(XmlAccessType.FIELD)
|
||||||
public class WxXmlOutMessage {
|
public class WxCpXmlOutMessage {
|
||||||
|
|
||||||
@XmlElement(name="ToUserName")
|
@XmlElement(name="ToUserName")
|
||||||
@XmlJavaTypeAdapter(AdapterCDATA.class)
|
@XmlJavaTypeAdapter(AdapterCDATA.class)
|
||||||
@@ -69,7 +69,7 @@ public class WxXmlOutMessage {
|
|||||||
this.msgType = msgType;
|
this.msgType = msgType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toXml() {
|
protected String toXml() {
|
||||||
try {
|
try {
|
||||||
return XmlTransformer.toXml((Class)this.getClass(), this);
|
return XmlTransformer.toXml((Class)this.getClass(), this);
|
||||||
} catch (JAXBException e) {
|
} catch (JAXBException e) {
|
||||||
@@ -15,7 +15,7 @@ import me.chanjar.weixin.enterprise.util.xml.AdapterCDATA;
|
|||||||
|
|
||||||
@XmlRootElement(name = "xml")
|
@XmlRootElement(name = "xml")
|
||||||
@XmlAccessorType(XmlAccessType.FIELD)
|
@XmlAccessorType(XmlAccessType.FIELD)
|
||||||
public class WxXmlOutMewsMessage extends WxXmlOutMessage {
|
public class WxCpXmlOutMewsMessage extends WxCpXmlOutMessage {
|
||||||
|
|
||||||
@XmlElement(name = "ArticleCount")
|
@XmlElement(name = "ArticleCount")
|
||||||
protected int articleCount;
|
protected int articleCount;
|
||||||
@@ -24,7 +24,7 @@ public class WxXmlOutMewsMessage extends WxXmlOutMessage {
|
|||||||
@XmlElement(name = "item")
|
@XmlElement(name = "item")
|
||||||
protected final List<Item> articles = new ArrayList<Item>();
|
protected final List<Item> articles = new ArrayList<Item>();
|
||||||
|
|
||||||
public WxXmlOutMewsMessage() {
|
public WxCpXmlOutMewsMessage() {
|
||||||
this.msgType = WxConsts.XML_MSG_NEWS;
|
this.msgType = WxConsts.XML_MSG_NEWS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -11,12 +11,12 @@ import me.chanjar.weixin.enterprise.util.xml.AdapterCDATA;
|
|||||||
|
|
||||||
@XmlRootElement(name = "xml")
|
@XmlRootElement(name = "xml")
|
||||||
@XmlAccessorType(XmlAccessType.FIELD)
|
@XmlAccessorType(XmlAccessType.FIELD)
|
||||||
public class WxXmlOutMusicMessage extends WxXmlOutMessage {
|
public class WxCpXmlOutMusicMessage extends WxCpXmlOutMessage {
|
||||||
|
|
||||||
@XmlElement(name = "Music")
|
@XmlElement(name = "Music")
|
||||||
protected final Music music = new Music();
|
protected final Music music = new Music();
|
||||||
|
|
||||||
public WxXmlOutMusicMessage() {
|
public WxCpXmlOutMusicMessage() {
|
||||||
this.msgType = WxConsts.XML_MSG_MUSIC;
|
this.msgType = WxConsts.XML_MSG_MUSIC;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -11,13 +11,13 @@ import me.chanjar.weixin.enterprise.util.xml.AdapterCDATA;
|
|||||||
|
|
||||||
@XmlRootElement(name = "xml")
|
@XmlRootElement(name = "xml")
|
||||||
@XmlAccessorType(XmlAccessType.FIELD)
|
@XmlAccessorType(XmlAccessType.FIELD)
|
||||||
public class WxXmlOutTextMessage extends WxXmlOutMessage {
|
public class WxCpXmlOutTextMessage extends WxCpXmlOutMessage {
|
||||||
|
|
||||||
@XmlElement(name="Content")
|
@XmlElement(name="Content")
|
||||||
@XmlJavaTypeAdapter(AdapterCDATA.class)
|
@XmlJavaTypeAdapter(AdapterCDATA.class)
|
||||||
private String content;
|
private String content;
|
||||||
|
|
||||||
public WxXmlOutTextMessage() {
|
public WxCpXmlOutTextMessage() {
|
||||||
this.msgType = WxConsts.XML_MSG_TEXT;
|
this.msgType = WxConsts.XML_MSG_TEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -11,12 +11,12 @@ import me.chanjar.weixin.enterprise.util.xml.AdapterCDATA;
|
|||||||
|
|
||||||
@XmlRootElement(name = "xml")
|
@XmlRootElement(name = "xml")
|
||||||
@XmlAccessorType(XmlAccessType.FIELD)
|
@XmlAccessorType(XmlAccessType.FIELD)
|
||||||
public class WxXmlOutVideoMessage extends WxXmlOutMessage {
|
public class WxCpXmlOutVideoMessage extends WxCpXmlOutMessage {
|
||||||
|
|
||||||
@XmlElement(name = "Video")
|
@XmlElement(name = "Video")
|
||||||
protected final Video video = new Video();
|
protected final Video video = new Video();
|
||||||
|
|
||||||
public WxXmlOutVideoMessage() {
|
public WxCpXmlOutVideoMessage() {
|
||||||
this.msgType = WxConsts.XML_MSG_VIDEO;
|
this.msgType = WxConsts.XML_MSG_VIDEO;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -11,13 +11,13 @@ import me.chanjar.weixin.enterprise.util.xml.MediaIdMarshaller;
|
|||||||
|
|
||||||
@XmlRootElement(name = "xml")
|
@XmlRootElement(name = "xml")
|
||||||
@XmlAccessorType(XmlAccessType.FIELD)
|
@XmlAccessorType(XmlAccessType.FIELD)
|
||||||
public class WxXmlOutVoiceMessage extends WxXmlOutMessage {
|
public class WxCpXmlOutVoiceMessage extends WxCpXmlOutMessage {
|
||||||
|
|
||||||
@XmlElement(name="Voice")
|
@XmlElement(name="Voice")
|
||||||
@XmlJavaTypeAdapter(MediaIdMarshaller.class)
|
@XmlJavaTypeAdapter(MediaIdMarshaller.class)
|
||||||
private String mediaId;
|
private String mediaId;
|
||||||
|
|
||||||
public WxXmlOutVoiceMessage() {
|
public WxCpXmlOutVoiceMessage() {
|
||||||
this.msgType = WxConsts.XML_MSG_VOICE;
|
this.msgType = WxConsts.XML_MSG_VOICE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package me.chanjar.weixin.enterprise.bean.outxmlbuilder;
|
package me.chanjar.weixin.enterprise.bean.outxmlbuilder;
|
||||||
|
|
||||||
import me.chanjar.weixin.enterprise.bean.WxXmlOutMessage;
|
import me.chanjar.weixin.enterprise.bean.WxCpXmlOutMessage;
|
||||||
|
|
||||||
public abstract class BaseBuilder<BuilderType, ValueType> {
|
public abstract class BaseBuilder<BuilderType, ValueType> {
|
||||||
|
|
||||||
@@ -20,7 +20,7 @@ public abstract class BaseBuilder<BuilderType, ValueType> {
|
|||||||
|
|
||||||
public abstract ValueType build();
|
public abstract ValueType build();
|
||||||
|
|
||||||
public void setCommon(WxXmlOutMessage m) {
|
public void setCommon(WxCpXmlOutMessage m) {
|
||||||
m.setToUserName(this.toUserName);
|
m.setToUserName(this.toUserName);
|
||||||
m.setFromUserName(this.fromUserName);
|
m.setFromUserName(this.fromUserName);
|
||||||
m.setCreateTime(System.currentTimeMillis() / 1000l);
|
m.setCreateTime(System.currentTimeMillis() / 1000l);
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
package me.chanjar.weixin.enterprise.bean.outxmlbuilder;
|
package me.chanjar.weixin.enterprise.bean.outxmlbuilder;
|
||||||
|
|
||||||
import me.chanjar.weixin.enterprise.bean.WxXmlOutImageMessage;
|
import me.chanjar.weixin.enterprise.bean.WxCpXmlOutImageMessage;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 图片消息builder
|
* 图片消息builder
|
||||||
* @author Daniel Qian
|
* @author Daniel Qian
|
||||||
*/
|
*/
|
||||||
public final class ImageBuilder extends BaseBuilder<ImageBuilder, WxXmlOutImageMessage> {
|
public final class ImageBuilder extends BaseBuilder<ImageBuilder, WxCpXmlOutImageMessage> {
|
||||||
|
|
||||||
private String mediaId;
|
private String mediaId;
|
||||||
|
|
||||||
@@ -15,8 +15,8 @@ public final class ImageBuilder extends BaseBuilder<ImageBuilder, WxXmlOutImageM
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public WxXmlOutImageMessage build() {
|
public WxCpXmlOutImageMessage build() {
|
||||||
WxXmlOutImageMessage m = new WxXmlOutImageMessage();
|
WxCpXmlOutImageMessage m = new WxCpXmlOutImageMessage();
|
||||||
setCommon(m);
|
setCommon(m);
|
||||||
m.setMediaId(this.mediaId);
|
m.setMediaId(this.mediaId);
|
||||||
return m;
|
return m;
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
package me.chanjar.weixin.enterprise.bean.outxmlbuilder;
|
package me.chanjar.weixin.enterprise.bean.outxmlbuilder;
|
||||||
|
|
||||||
import me.chanjar.weixin.enterprise.bean.WxXmlOutMusicMessage;
|
import me.chanjar.weixin.enterprise.bean.WxCpXmlOutMusicMessage;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 音乐消息builder
|
* 音乐消息builder
|
||||||
*
|
*
|
||||||
* @author Daniel Qian
|
* @author Daniel Qian
|
||||||
*/
|
*/
|
||||||
public final class MusicBuilder extends BaseBuilder<MusicBuilder, WxXmlOutMusicMessage> {
|
public final class MusicBuilder extends BaseBuilder<MusicBuilder, WxCpXmlOutMusicMessage> {
|
||||||
|
|
||||||
private String title;
|
private String title;
|
||||||
private String description;
|
private String description;
|
||||||
@@ -40,8 +40,8 @@ public final class MusicBuilder extends BaseBuilder<MusicBuilder, WxXmlOutMusicM
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public WxXmlOutMusicMessage build() {
|
public WxCpXmlOutMusicMessage build() {
|
||||||
WxXmlOutMusicMessage m = new WxXmlOutMusicMessage();
|
WxCpXmlOutMusicMessage m = new WxCpXmlOutMusicMessage();
|
||||||
setCommon(m);
|
setCommon(m);
|
||||||
m.setTitle(title);
|
m.setTitle(title);
|
||||||
m.setDescription(description);
|
m.setDescription(description);
|
||||||
|
|||||||
@@ -3,14 +3,14 @@ package me.chanjar.weixin.enterprise.bean.outxmlbuilder;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import me.chanjar.weixin.enterprise.bean.WxXmlOutMewsMessage;
|
import me.chanjar.weixin.enterprise.bean.WxCpXmlOutMewsMessage;
|
||||||
import me.chanjar.weixin.enterprise.bean.WxXmlOutMewsMessage.Item;
|
import me.chanjar.weixin.enterprise.bean.WxCpXmlOutMewsMessage.Item;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 图文消息builder
|
* 图文消息builder
|
||||||
* @author Daniel Qian
|
* @author Daniel Qian
|
||||||
*/
|
*/
|
||||||
public final class NewsBuilder extends BaseBuilder<NewsBuilder, WxXmlOutMewsMessage> {
|
public final class NewsBuilder extends BaseBuilder<NewsBuilder, WxCpXmlOutMewsMessage> {
|
||||||
|
|
||||||
protected final List<Item> articles = new ArrayList<Item>();
|
protected final List<Item> articles = new ArrayList<Item>();
|
||||||
|
|
||||||
@@ -19,8 +19,8 @@ public final class NewsBuilder extends BaseBuilder<NewsBuilder, WxXmlOutMewsMess
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public WxXmlOutMewsMessage build() {
|
public WxCpXmlOutMewsMessage build() {
|
||||||
WxXmlOutMewsMessage m = new WxXmlOutMewsMessage();
|
WxCpXmlOutMewsMessage m = new WxCpXmlOutMewsMessage();
|
||||||
for(Item item : articles) {
|
for(Item item : articles) {
|
||||||
m.addArticle(item);
|
m.addArticle(item);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
package me.chanjar.weixin.enterprise.bean.outxmlbuilder;
|
package me.chanjar.weixin.enterprise.bean.outxmlbuilder;
|
||||||
|
|
||||||
import me.chanjar.weixin.enterprise.bean.WxXmlOutTextMessage;
|
import me.chanjar.weixin.enterprise.bean.WxCpXmlOutTextMessage;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 文本消息builder
|
* 文本消息builder
|
||||||
* @author Daniel Qian
|
* @author Daniel Qian
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public final class TextBuilder extends BaseBuilder<TextBuilder, WxXmlOutTextMessage> {
|
public final class TextBuilder extends BaseBuilder<TextBuilder, WxCpXmlOutTextMessage> {
|
||||||
private String content;
|
private String content;
|
||||||
|
|
||||||
public TextBuilder content(String content) {
|
public TextBuilder content(String content) {
|
||||||
@@ -15,8 +15,8 @@ public final class TextBuilder extends BaseBuilder<TextBuilder, WxXmlOutTextMess
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public WxXmlOutTextMessage build() {
|
public WxCpXmlOutTextMessage build() {
|
||||||
WxXmlOutTextMessage m = new WxXmlOutTextMessage();
|
WxCpXmlOutTextMessage m = new WxCpXmlOutTextMessage();
|
||||||
setCommon(m);
|
setCommon(m);
|
||||||
m.setContent(this.content);
|
m.setContent(this.content);
|
||||||
return m;
|
return m;
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
package me.chanjar.weixin.enterprise.bean.outxmlbuilder;
|
package me.chanjar.weixin.enterprise.bean.outxmlbuilder;
|
||||||
|
|
||||||
import me.chanjar.weixin.enterprise.bean.WxXmlOutVideoMessage;
|
import me.chanjar.weixin.enterprise.bean.WxCpXmlOutVideoMessage;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 视频消息builder
|
* 视频消息builder
|
||||||
* @author Daniel Qian
|
* @author Daniel Qian
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public final class VideoBuilder extends BaseBuilder<VideoBuilder, WxXmlOutVideoMessage> {
|
public final class VideoBuilder extends BaseBuilder<VideoBuilder, WxCpXmlOutVideoMessage> {
|
||||||
|
|
||||||
private String mediaId;
|
private String mediaId;
|
||||||
private String title;
|
private String title;
|
||||||
@@ -26,8 +26,8 @@ public final class VideoBuilder extends BaseBuilder<VideoBuilder, WxXmlOutVideoM
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public WxXmlOutVideoMessage build() {
|
public WxCpXmlOutVideoMessage build() {
|
||||||
WxXmlOutVideoMessage m = new WxXmlOutVideoMessage();
|
WxCpXmlOutVideoMessage m = new WxCpXmlOutVideoMessage();
|
||||||
setCommon(m);
|
setCommon(m);
|
||||||
m.setTitle(title);
|
m.setTitle(title);
|
||||||
m.setDescription(description);
|
m.setDescription(description);
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
package me.chanjar.weixin.enterprise.bean.outxmlbuilder;
|
package me.chanjar.weixin.enterprise.bean.outxmlbuilder;
|
||||||
|
|
||||||
import me.chanjar.weixin.enterprise.bean.WxXmlOutVoiceMessage;
|
import me.chanjar.weixin.enterprise.bean.WxCpXmlOutVoiceMessage;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 语音消息builder
|
* 语音消息builder
|
||||||
* @author Daniel Qian
|
* @author Daniel Qian
|
||||||
*/
|
*/
|
||||||
public final class VoiceBuilder extends BaseBuilder<VoiceBuilder, WxXmlOutVoiceMessage> {
|
public final class VoiceBuilder extends BaseBuilder<VoiceBuilder, WxCpXmlOutVoiceMessage> {
|
||||||
|
|
||||||
private String mediaId;
|
private String mediaId;
|
||||||
|
|
||||||
@@ -15,8 +15,8 @@ public final class VoiceBuilder extends BaseBuilder<VoiceBuilder, WxXmlOutVoiceM
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public WxXmlOutVoiceMessage build() {
|
public WxCpXmlOutVoiceMessage build() {
|
||||||
WxXmlOutVoiceMessage m = new WxXmlOutVoiceMessage();
|
WxCpXmlOutVoiceMessage m = new WxCpXmlOutVoiceMessage();
|
||||||
setCommon(m);
|
setCommon(m);
|
||||||
m.setMediaId(mediaId);
|
m.setMediaId(mediaId);
|
||||||
return m;
|
return m;
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import java.io.Writer;
|
|||||||
|
|
||||||
import javax.xml.bind.*;
|
import javax.xml.bind.*;
|
||||||
|
|
||||||
import me.chanjar.weixin.enterprise.bean.*;
|
|
||||||
import me.chanjar.weixin.enterprise.bean.*;
|
import me.chanjar.weixin.enterprise.bean.*;
|
||||||
import org.xml.sax.InputSource;
|
import org.xml.sax.InputSource;
|
||||||
|
|
||||||
@@ -78,13 +77,13 @@ public class XmlTransformer {
|
|||||||
*/
|
*/
|
||||||
try {
|
try {
|
||||||
return JAXBContext.newInstance(
|
return JAXBContext.newInstance(
|
||||||
WxXmlOutMessage.class,
|
WxCpXmlOutMessage.class,
|
||||||
WxXmlOutImageMessage.class,
|
WxCpXmlOutImageMessage.class,
|
||||||
WxXmlOutMewsMessage.class,
|
WxCpXmlOutMewsMessage.class,
|
||||||
WxXmlOutMusicMessage.class,
|
WxCpXmlOutMusicMessage.class,
|
||||||
WxXmlOutTextMessage.class,
|
WxCpXmlOutTextMessage.class,
|
||||||
WxXmlOutVideoMessage.class,
|
WxCpXmlOutVideoMessage.class,
|
||||||
WxXmlOutVoiceMessage.class,
|
WxCpXmlOutVoiceMessage.class,
|
||||||
WxCpXmlMessage.class);
|
WxCpXmlMessage.class);
|
||||||
} catch (JAXBException e) {
|
} catch (JAXBException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
|
|||||||
@@ -3,12 +3,11 @@ package me.chanjar.weixin.enterprise.api;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import me.chanjar.weixin.enterprise.bean.WxCpXmlMessage;
|
import me.chanjar.weixin.enterprise.bean.WxCpXmlMessage;
|
||||||
|
import me.chanjar.weixin.enterprise.bean.WxCpXmlOutMessage;
|
||||||
import org.testng.Assert;
|
import org.testng.Assert;
|
||||||
import org.testng.annotations.DataProvider;
|
import org.testng.annotations.DataProvider;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
import me.chanjar.weixin.enterprise.bean.WxXmlOutMessage;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 测试消息路由器
|
* 测试消息路由器
|
||||||
* @author Daniel Qian
|
* @author Daniel Qian
|
||||||
@@ -67,7 +66,7 @@ public class WxCpMessageRouterTest {
|
|||||||
final WxCpMessageRouter router = new WxCpMessageRouter();
|
final WxCpMessageRouter router = new WxCpMessageRouter();
|
||||||
router.rule().handler(new WxCpMessageHandler() {
|
router.rule().handler(new WxCpMessageHandler() {
|
||||||
@Override
|
@Override
|
||||||
public WxXmlOutMessage handle(WxCpXmlMessage wxMessage, Map<String, Object> context) {
|
public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map<String, Object> context) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}).end();
|
}).end();
|
||||||
@@ -149,7 +148,7 @@ public class WxCpMessageRouterTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public WxXmlOutMessage handle(WxCpXmlMessage wxMessage, Map<String, Object> context) {
|
public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map<String, Object> context) {
|
||||||
sb.append(this.echoStr).append(',');
|
sb.append(this.echoStr).append(',');
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,13 @@
|
|||||||
package me.chanjar.weixin.enterprise.bean;
|
package me.chanjar.weixin.enterprise.bean;
|
||||||
|
|
||||||
import me.chanjar.weixin.enterprise.bean.WxXmlOutImageMessage;
|
|
||||||
import me.chanjar.weixin.enterprise.bean.WxXmlOutMessage;
|
|
||||||
import org.testng.Assert;
|
import org.testng.Assert;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public class WxXmlOutImageMessageTest {
|
public class WxCpXmlOutImageMessageTest {
|
||||||
|
|
||||||
public void test() {
|
public void test() {
|
||||||
WxXmlOutImageMessage m = new WxXmlOutImageMessage();
|
WxCpXmlOutImageMessage m = new WxCpXmlOutImageMessage();
|
||||||
m.setMediaId("ddfefesfsdfef");
|
m.setMediaId("ddfefesfsdfef");
|
||||||
m.setCreateTime(1122l);
|
m.setCreateTime(1122l);
|
||||||
m.setFromUserName("from");
|
m.setFromUserName("from");
|
||||||
@@ -28,7 +26,7 @@ public class WxXmlOutImageMessageTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void testBuild() {
|
public void testBuild() {
|
||||||
WxXmlOutImageMessage m = WxXmlOutMessage.IMAGE().mediaId("ddfefesfsdfef").fromUser("from").toUser("to").build();
|
WxCpXmlOutImageMessage m = WxCpXmlOutMessage.IMAGE().mediaId("ddfefesfsdfef").fromUser("from").toUser("to").build();
|
||||||
String expected = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
|
String expected = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
|
||||||
+ "<xml>"
|
+ "<xml>"
|
||||||
+ "<ToUserName><![CDATA[to]]></ToUserName>"
|
+ "<ToUserName><![CDATA[to]]></ToUserName>"
|
||||||
@@ -1,15 +1,13 @@
|
|||||||
package me.chanjar.weixin.enterprise.bean;
|
package me.chanjar.weixin.enterprise.bean;
|
||||||
|
|
||||||
import me.chanjar.weixin.enterprise.bean.WxXmlOutMessage;
|
|
||||||
import me.chanjar.weixin.enterprise.bean.WxXmlOutMusicMessage;
|
|
||||||
import org.testng.Assert;
|
import org.testng.Assert;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public class WxXmlOutMusicMessageTest {
|
public class WxCpXmlOutMusicMessageTest {
|
||||||
|
|
||||||
public void test() {
|
public void test() {
|
||||||
WxXmlOutMusicMessage m = new WxXmlOutMusicMessage();
|
WxCpXmlOutMusicMessage m = new WxCpXmlOutMusicMessage();
|
||||||
m.setTitle("title");
|
m.setTitle("title");
|
||||||
m.setDescription("ddfff");
|
m.setDescription("ddfff");
|
||||||
m.setHqMusicUrl("hQMusicUrl");
|
m.setHqMusicUrl("hQMusicUrl");
|
||||||
@@ -38,7 +36,7 @@ public class WxXmlOutMusicMessageTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void testBuild() {
|
public void testBuild() {
|
||||||
WxXmlOutMusicMessage m = WxXmlOutMessage.MUSIC()
|
WxCpXmlOutMusicMessage m = WxCpXmlOutMessage.MUSIC()
|
||||||
.fromUser("fromUser")
|
.fromUser("fromUser")
|
||||||
.toUser("toUser")
|
.toUser("toUser")
|
||||||
.title("title")
|
.title("title")
|
||||||
@@ -1,20 +1,18 @@
|
|||||||
package me.chanjar.weixin.enterprise.bean;
|
package me.chanjar.weixin.enterprise.bean;
|
||||||
|
|
||||||
import me.chanjar.weixin.enterprise.bean.WxXmlOutMessage;
|
|
||||||
import me.chanjar.weixin.enterprise.bean.WxXmlOutMewsMessage;
|
|
||||||
import org.testng.Assert;
|
import org.testng.Assert;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public class WxXmlOutNewsMessageTest {
|
public class WxCpXmlOutNewsMessageTest {
|
||||||
|
|
||||||
public void test() {
|
public void test() {
|
||||||
WxXmlOutMewsMessage m = new WxXmlOutMewsMessage();
|
WxCpXmlOutMewsMessage m = new WxCpXmlOutMewsMessage();
|
||||||
m.setCreateTime(1122l);
|
m.setCreateTime(1122l);
|
||||||
m.setFromUserName("fromUser");
|
m.setFromUserName("fromUser");
|
||||||
m.setToUserName("toUser");
|
m.setToUserName("toUser");
|
||||||
|
|
||||||
WxXmlOutMewsMessage.Item item = new WxXmlOutMewsMessage.Item();
|
WxCpXmlOutMewsMessage.Item item = new WxCpXmlOutMewsMessage.Item();
|
||||||
item.setDescription("description");
|
item.setDescription("description");
|
||||||
item.setPicUrl("picUrl");
|
item.setPicUrl("picUrl");
|
||||||
item.setTitle("title");
|
item.setTitle("title");
|
||||||
@@ -48,13 +46,13 @@ public class WxXmlOutNewsMessageTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void testBuild() {
|
public void testBuild() {
|
||||||
WxXmlOutMewsMessage.Item item = new WxXmlOutMewsMessage.Item();
|
WxCpXmlOutMewsMessage.Item item = new WxCpXmlOutMewsMessage.Item();
|
||||||
item.setDescription("description");
|
item.setDescription("description");
|
||||||
item.setPicUrl("picUrl");
|
item.setPicUrl("picUrl");
|
||||||
item.setTitle("title");
|
item.setTitle("title");
|
||||||
item.setUrl("url");
|
item.setUrl("url");
|
||||||
|
|
||||||
WxXmlOutMewsMessage m = WxXmlOutMessage.NEWS()
|
WxCpXmlOutMewsMessage m = WxCpXmlOutMessage.NEWS()
|
||||||
.fromUser("fromUser")
|
.fromUser("fromUser")
|
||||||
.toUser("toUser")
|
.toUser("toUser")
|
||||||
.addArticle(item)
|
.addArticle(item)
|
||||||
@@ -1,15 +1,13 @@
|
|||||||
package me.chanjar.weixin.enterprise.bean;
|
package me.chanjar.weixin.enterprise.bean;
|
||||||
|
|
||||||
import me.chanjar.weixin.enterprise.bean.WxXmlOutMessage;
|
|
||||||
import me.chanjar.weixin.enterprise.bean.WxXmlOutTextMessage;
|
|
||||||
import org.testng.Assert;
|
import org.testng.Assert;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public class WxXmlOutTextMessageTest {
|
public class WxCpXmlOutTextMessageTest {
|
||||||
|
|
||||||
public void test() {
|
public void test() {
|
||||||
WxXmlOutTextMessage m = new WxXmlOutTextMessage();
|
WxCpXmlOutTextMessage m = new WxCpXmlOutTextMessage();
|
||||||
m.setContent("content");
|
m.setContent("content");
|
||||||
m.setCreateTime(1122l);
|
m.setCreateTime(1122l);
|
||||||
m.setFromUserName("from");
|
m.setFromUserName("from");
|
||||||
@@ -28,7 +26,7 @@ public class WxXmlOutTextMessageTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void testBuild() {
|
public void testBuild() {
|
||||||
WxXmlOutTextMessage m = WxXmlOutMessage.TEXT().content("content").fromUser("from").toUser("to").build();
|
WxCpXmlOutTextMessage m = WxCpXmlOutMessage.TEXT().content("content").fromUser("from").toUser("to").build();
|
||||||
String expected = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
|
String expected = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
|
||||||
+ "<xml>"
|
+ "<xml>"
|
||||||
+ "<ToUserName><![CDATA[to]]></ToUserName>"
|
+ "<ToUserName><![CDATA[to]]></ToUserName>"
|
||||||
@@ -1,15 +1,13 @@
|
|||||||
package me.chanjar.weixin.enterprise.bean;
|
package me.chanjar.weixin.enterprise.bean;
|
||||||
|
|
||||||
import me.chanjar.weixin.enterprise.bean.WxXmlOutMessage;
|
|
||||||
import me.chanjar.weixin.enterprise.bean.WxXmlOutVideoMessage;
|
|
||||||
import org.testng.Assert;
|
import org.testng.Assert;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public class WxXmlOutVideoMessageTest {
|
public class WxCpXmlOutVideoMessageTest {
|
||||||
|
|
||||||
public void test() {
|
public void test() {
|
||||||
WxXmlOutVideoMessage m = new WxXmlOutVideoMessage();
|
WxCpXmlOutVideoMessage m = new WxCpXmlOutVideoMessage();
|
||||||
m.setMediaId("media_id");
|
m.setMediaId("media_id");
|
||||||
m.setTitle("title");
|
m.setTitle("title");
|
||||||
m.setDescription("ddfff");
|
m.setDescription("ddfff");
|
||||||
@@ -34,7 +32,7 @@ public class WxXmlOutVideoMessageTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void testBuild() {
|
public void testBuild() {
|
||||||
WxXmlOutVideoMessage m = WxXmlOutMessage.VIDEO()
|
WxCpXmlOutVideoMessage m = WxCpXmlOutMessage.VIDEO()
|
||||||
.mediaId("media_id")
|
.mediaId("media_id")
|
||||||
.fromUser("fromUser")
|
.fromUser("fromUser")
|
||||||
.toUser("toUser")
|
.toUser("toUser")
|
||||||
@@ -1,15 +1,13 @@
|
|||||||
package me.chanjar.weixin.enterprise.bean;
|
package me.chanjar.weixin.enterprise.bean;
|
||||||
|
|
||||||
import me.chanjar.weixin.enterprise.bean.WxXmlOutMessage;
|
|
||||||
import me.chanjar.weixin.enterprise.bean.WxXmlOutVoiceMessage;
|
|
||||||
import org.testng.Assert;
|
import org.testng.Assert;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public class WxXmlOutVoiceMessageTest {
|
public class WxCpXmlOutVoiceMessageTest {
|
||||||
|
|
||||||
public void test() {
|
public void test() {
|
||||||
WxXmlOutVoiceMessage m = new WxXmlOutVoiceMessage();
|
WxCpXmlOutVoiceMessage m = new WxCpXmlOutVoiceMessage();
|
||||||
m.setMediaId("ddfefesfsdfef");
|
m.setMediaId("ddfefesfsdfef");
|
||||||
m.setCreateTime(1122l);
|
m.setCreateTime(1122l);
|
||||||
m.setFromUserName("from");
|
m.setFromUserName("from");
|
||||||
@@ -28,7 +26,7 @@ public class WxXmlOutVoiceMessageTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void testBuild() {
|
public void testBuild() {
|
||||||
WxXmlOutVoiceMessage m = WxXmlOutMessage.VOICE().mediaId("ddfefesfsdfef").fromUser("from").toUser("to").build();
|
WxCpXmlOutVoiceMessage m = WxCpXmlOutMessage.VOICE().mediaId("ddfefesfsdfef").fromUser("from").toUser("to").build();
|
||||||
String expected = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
|
String expected = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
|
||||||
+ "<xml>"
|
+ "<xml>"
|
||||||
+ "<ToUserName><![CDATA[to]]></ToUserName>"
|
+ "<ToUserName><![CDATA[to]]></ToUserName>"
|
||||||
@@ -2,10 +2,9 @@ package me.chanjar.weixin.enterprise.demo;
|
|||||||
|
|
||||||
import me.chanjar.weixin.enterprise.api.*;
|
import me.chanjar.weixin.enterprise.api.*;
|
||||||
import me.chanjar.weixin.enterprise.bean.WxCpXmlMessage;
|
import me.chanjar.weixin.enterprise.bean.WxCpXmlMessage;
|
||||||
import me.chanjar.weixin.enterprise.bean.WxXmlOutMessage;
|
import me.chanjar.weixin.enterprise.bean.WxCpXmlOutMessage;
|
||||||
import me.chanjar.weixin.enterprise.bean.WxXmlOutTextMessage;
|
import me.chanjar.weixin.enterprise.bean.WxCpXmlOutTextMessage;
|
||||||
import me.chanjar.weixin.enterprise.util.crypto.WxCryptUtil;
|
import me.chanjar.weixin.enterprise.util.crypto.WxCryptUtil;
|
||||||
import org.apache.commons.io.IOUtils;
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import javax.servlet.ServletException;
|
import javax.servlet.ServletException;
|
||||||
@@ -38,10 +37,13 @@ public class WxCpTestServlet extends HttpServlet {
|
|||||||
wxCpService.setWxCpConfigStorage(config);
|
wxCpService.setWxCpConfigStorage(config);
|
||||||
|
|
||||||
WxCpMessageHandler handler = new WxCpMessageHandler() {
|
WxCpMessageHandler handler = new WxCpMessageHandler() {
|
||||||
@Override public WxXmlOutMessage handle(WxCpXmlMessage wxMessage, Map<String, Object> context) {
|
@Override public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map<String, Object> context) {
|
||||||
WxXmlOutTextMessage m
|
WxCpXmlOutTextMessage m = WxCpXmlOutMessage
|
||||||
= WxXmlOutMessage.TEXT().content("测试加密消息").fromUser(wxMessage.getToUserName())
|
.TEXT()
|
||||||
.toUser(wxMessage.getFromUserName()).build();
|
.content("测试加密消息")
|
||||||
|
.fromUser(wxMessage.getToUserName())
|
||||||
|
.toUser(wxMessage.getFromUserName())
|
||||||
|
.build();
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -85,8 +87,11 @@ public class WxCpTestServlet extends HttpServlet {
|
|||||||
|
|
||||||
WxCpXmlMessage inMessage = WxCpXmlMessage.fromEncryptedXml(request.getInputStream(), wxCpConfigStorage, timestamp, nonce, msgSignature);
|
WxCpXmlMessage inMessage = WxCpXmlMessage.fromEncryptedXml(request.getInputStream(), wxCpConfigStorage, timestamp, nonce, msgSignature);
|
||||||
|
|
||||||
// WxXmlOutMessage outMessage = wxCpMessageRouter.route(inMessage);
|
WxCpXmlOutMessage outMessage = wxCpMessageRouter.route(inMessage);
|
||||||
|
|
||||||
|
if (outMessage != null) {
|
||||||
|
response.getWriter().write(outMessage.toEncryptedXml(wxCpConfigStorage));
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user