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