@@ -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() { | |||||
WxXmlOutImageMessage m = new WxXmlOutImageMessage(); | |||||
public WxCpXmlOutImageMessage build() { | |||||
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() { | |||||
WxXmlOutMusicMessage m = new WxXmlOutMusicMessage(); | |||||
public WxCpXmlOutMusicMessage build() { | |||||
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.WxXmlOutMewsMessage.Item; | |||||
import me.chanjar.weixin.enterprise.bean.WxCpXmlOutMewsMessage; | |||||
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() { | |||||
WxXmlOutMewsMessage m = new WxXmlOutMewsMessage(); | |||||
public WxCpXmlOutMewsMessage build() { | |||||
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() { | |||||
WxXmlOutTextMessage m = new WxXmlOutTextMessage(); | |||||
public WxCpXmlOutTextMessage build() { | |||||
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() { | |||||
WxXmlOutVideoMessage m = new WxXmlOutVideoMessage(); | |||||
public WxCpXmlOutVideoMessage build() { | |||||
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() { | |||||
WxXmlOutVoiceMessage m = new WxXmlOutVoiceMessage(); | |||||
public WxCpXmlOutVoiceMessage build() { | |||||
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, | |||||
WxXmlOutImageMessage.class, | |||||
WxXmlOutMewsMessage.class, | |||||
WxXmlOutMusicMessage.class, | |||||
WxXmlOutTextMessage.class, | |||||
WxXmlOutVideoMessage.class, | |||||
WxXmlOutVoiceMessage.class, | |||||
WxCpXmlOutMessage.class, | |||||
WxCpXmlOutImageMessage.class, | |||||
WxCpXmlOutMewsMessage.class, | |||||
WxCpXmlOutMusicMessage.class, | |||||
WxCpXmlOutTextMessage.class, | |||||
WxCpXmlOutVideoMessage.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.WxXmlOutTextMessage; | |||||
import me.chanjar.weixin.enterprise.bean.WxCpXmlOutMessage; | |||||
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) { | |||||
WxXmlOutTextMessage m | |||||
= WxXmlOutMessage.TEXT().content("测试加密消息").fromUser(wxMessage.getToUserName()) | |||||
.toUser(wxMessage.getFromUserName()).build(); | |||||
@Override public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map<String, Object> context) { | |||||
WxCpXmlOutTextMessage m = WxCpXmlOutMessage | |||||
.TEXT() | |||||
.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; | ||||
} | } | ||||