package com.foxinmy.weixin4j.server.test; import io.netty.channel.ChannelHandlerContext; import java.util.Set; import org.springframework.context.ApplicationContext; import com.foxinmy.weixin4j.dispatcher.BeanFactory; import com.foxinmy.weixin4j.exception.WeixinException; import com.foxinmy.weixin4j.handler.DebugMessageHandler; import com.foxinmy.weixin4j.handler.MessageHandlerAdapter; import com.foxinmy.weixin4j.handler.MultipleMessageHandlerAdapter; import com.foxinmy.weixin4j.handler.WeixinMessageHandler; import com.foxinmy.weixin4j.interceptor.WeixinMessageInterceptor; import com.foxinmy.weixin4j.message.TextMessage; import com.foxinmy.weixin4j.message.VoiceMessage; import com.foxinmy.weixin4j.mp.event.ScanEventMessage; import com.foxinmy.weixin4j.request.WeixinMessage; import com.foxinmy.weixin4j.request.WeixinRequest; import com.foxinmy.weixin4j.response.TextResponse; import com.foxinmy.weixin4j.response.WeixinResponse; import com.foxinmy.weixin4j.spring.SpringBeanFactory; import com.foxinmy.weixin4j.startup.WeixinServerBootstrap; /** * 服务启动测试类 * * @className MessageServerStartup * @author jinyu(foxinmy@gmail.com) * @date 2015年5月7日 * @since JDK 1.6 * @see */ public class MessageServerStartup { // 公众号ID final String weixinId = "wx4ab8f8de58159a57"; // 开发者token final String token = "weixin4j"; // AES密钥(安全模式) final String aesKey = ""; /** * 调试输出用户发来的消息 * * @throws WeixinException */ public void test1() throws WeixinException { // 明文模式 new WeixinServerBootstrap(token).addHandler(DebugMessageHandler.global) .startup(); // 密文模式 // new WeixinServerBootstrap(weixinId, token, aesKey).addHandler( // DebugMessageHandler.global).startup(); } /** * 针对特定消息类型 * * @throws WeixinException */ public void test2() throws WeixinException { // 针对文本消息回复 WeixinMessageHandler textMessageHandler = new MessageHandlerAdapter<TextMessage>() { @Override public WeixinResponse doHandle0(WeixinRequest request, TextMessage message) throws WeixinException { return new TextResponse("HelloWorld!"); } }; // 针对语音消息回复 WeixinMessageHandler voiceMessageHandler = new MessageHandlerAdapter<VoiceMessage>() { @Override public WeixinResponse doHandle0(WeixinRequest request, VoiceMessage message) throws WeixinException { return new TextResponse("HelloWorld!"); } }; // 当消息类型为文本(text)或者语音时回复「HelloWorld」, 否则回复调试消息 new WeixinServerBootstrap(weixinId, token, aesKey).addHandler( textMessageHandler, voiceMessageHandler, DebugMessageHandler.global).startup(); } /** * 多种消息类型处理 * * @throws WeixinException */ public void test3() throws WeixinException { @SuppressWarnings("unchecked") MultipleMessageHandlerAdapter messageHandler = new MultipleMessageHandlerAdapter( ScanEventMessage.class, TextMessage.class) { @Override public WeixinResponse doHandle(WeixinRequest request, WeixinMessage message, Set<String> nodeNames) throws WeixinException { return new TextResponse("处理了扫描和文字消息"); } }; new WeixinServerBootstrap(token).addHandler(messageHandler, DebugMessageHandler.global).startup(); } /** * 扫描包添加handler * * @throws WeixinException */ public void test4() throws WeixinException { // handler处理所在的包名(子包也会扫描) String packageToScan = "com.foxinmy.weixin4j.handler"; // handler默认使用 Class.newInstance // 方式实例化,如果handler中含有service等类需要注入,可以声明一个BeanFactory,如SpringBeanFactory ApplicationContext applicationContext = null; // spring容器 BeanFactory beanFactory = new SpringBeanFactory(applicationContext); new WeixinServerBootstrap(token).handlerPackagesToScan(packageToScan) .openAlwaysResponse().resolveBeanFactory(beanFactory).startup(); } /** * 拦截器应用 * * @throws WeixinException */ public void test5() throws WeixinException { // 拦截所有请求 WeixinMessageInterceptor interceptor = new WeixinMessageInterceptor() { @Override public boolean preHandle(ChannelHandlerContext context, WeixinRequest request, WeixinMessage message, WeixinMessageHandler handler) throws WeixinException { context.writeAndFlush(new TextResponse("所有消息被拦截了!")); return false; } @Override public void postHandle(ChannelHandlerContext context, WeixinRequest request, WeixinResponse response, WeixinMessage message, WeixinMessageHandler handler) throws WeixinException { System.err.println("preHandle返回为true,执行handler后"); } @Override public void afterCompletion(ChannelHandlerContext context, WeixinRequest request, WeixinResponse response, WeixinMessage message, WeixinMessageHandler handler, Exception exception) throws WeixinException { System.err.println("请求处理完毕"); } @Override public int weight() { return 0; } }; new WeixinServerBootstrap(token).addInterceptor(interceptor) .openAlwaysResponse().startup(); } /** * main方法入口 * * @param args * @throws Exception */ public static void main(String[] args) throws Exception { new MessageServerStartup().test1(); } }