新增weixin4j-example示例工程

This commit is contained in:
jinyu
2016-04-10 14:46:37 +08:00
parent 0a35cf9d9b
commit 525246212b
13 changed files with 522 additions and 34 deletions
@@ -0,0 +1,90 @@
package com.foximy.weixin4j.example.server;
import io.netty.util.internal.logging.InternalLoggerFactory;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.spring.SpringBeanFactory;
import com.foxinmy.weixin4j.startup.WeixinServerBootstrap;
import com.foxinmy.weixin4j.util.AesToken;
/**
* 微信消息服务:需要另外开启一个线程去启动服务,比如在spring mvc中
*
* @className Weixin4jServerStartupWithThread
* @author jy
* @date 2015年5月7日
* @since JDK 1.7
* @see
*/
public class Weixin4jServerStartupWithThread implements ApplicationContextAware {
/**
* 服务监听的端口号,目前微信只支持80端口,可以考虑用nginx做转发到此端口
*/
private final int port;
/**
* 服务器token信息
*/
/**
* 明文模式:String aesToken = ""; 密文模式:AesToken aesToken = new
* AesToken("公众号appid", "公众号token","公众号加密/解密消息的密钥");
*/
private final AesToken aesToken;
/**
* 处理微信消息的全限包名(也可通过addHandler方式一个一个添加)
*/
private final String handlerPackage;
/**
* 用spring去获取bean
*/
private ApplicationContext applicationContext;
private Weixin4jServerStartupWithThread(int port, AesToken aesToken,
String handlerPackage) {
this.port = port;
this.aesToken = aesToken;
this.handlerPackage = handlerPackage;
}
@Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
this.applicationContext = applicationContext;
}
private ExecutorService executor;
/**
* 启动函数
*
* @throws WeixinException
*/
public void start() {
executor = Executors.newCachedThreadPool();
executor.execute(new Runnable() {
@Override
public void run() {
try {
new WeixinServerBootstrap(aesToken)
.handlerPackagesToScan(handlerPackage)
.resolveBeanFactory(
new SpringBeanFactory(applicationContext))
.openAlwaysResponse().startup(port);
} catch (WeixinException e) {
InternalLoggerFactory.getInstance(getClass()).error(
"weixin4j server startup:FAIL", e);
}
}
});
}
public void stop() {
executor.shutdown();
}
}
@@ -0,0 +1,52 @@
package com.foximy.weixin4j.example.server;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.spring.SpringBeanFactory;
import com.foxinmy.weixin4j.startup.WeixinServerBootstrap;
/**
* 微信消息服务:单独作为一个服务jar包启动
*
* @className Weixin4jServerStartupWithoutThread
* @author jy
* @date 2015年5月7日
* @since JDK 1.7
* @see
*/
public class Weixin4jServerStartupWithoutThread {
/**
* 服务监听的端口号,目前微信只支持80端口,可以考虑用nginx做转发到此端口
*/
private static int port = 10000;
/**
* 服务器token信息
*/
/**
* 明文模式:String aesToken = ""; 密文模式:AesToken aesToken = new
* AesToken("公众号appid", "公众号token","公众号加密/解密消息的密钥");
*/
private static String aesToken = "weixin4j";
/**
* 处理微信消息的全限包名(也可通过addHandler方式一个一个添加)
*/
private static String handlerPackage = "com.foximy.weixin4j.example.server.handler";
/**
* 入口函数 可使用assembly插件打成可执行zip包:https://github.com/foxinmy/weixin4j/wiki/
* assembly%E6%89%93%E5%8C%85
*
* @param args
* @throws WeixinException
*/
public static void main(String[] args) throws WeixinException {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
new String[] { "classpath:/spring-bean.xml" });
new WeixinServerBootstrap(aesToken)
.handlerPackagesToScan(handlerPackage).openAlwaysResponse()
.resolveBeanFactory(new SpringBeanFactory(applicationContext))
.startup(port);
}
}
@@ -0,0 +1,42 @@
package com.foximy.weixin4j.example.server.handler;
import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.handler.MessageHandlerAdapter;
import com.foxinmy.weixin4j.message.TextMessage;
import com.foxinmy.weixin4j.request.WeixinRequest;
import com.foxinmy.weixin4j.response.TextResponse;
import com.foxinmy.weixin4j.response.WeixinResponse;
/**
* 输入 hello 回复 world
*
* @className HelloMessageHandler
* @author jy
* @date 2015年12月27日
* @since JDK 1.7
* @see
*/
public class HelloMessageHandler extends MessageHandlerAdapter<TextMessage> {
@Override
public boolean canHandle0(WeixinRequest request, TextMessage message)
throws WeixinException {
return message.getContent().equalsIgnoreCase("hello");
}
@Override
public WeixinResponse doHandle0(WeixinRequest request, TextMessage message)
throws WeixinException {
/**
* 返回用户「world」文本
*/
return new TextResponse("world");
}
/**
* 提高权重 > TextMessageHandler
*/
@Override
public int weight() {
return 2;
}
}
@@ -0,0 +1,27 @@
package com.foximy.weixin4j.example.server.handler;
import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.handler.MessageHandlerAdapter;
import com.foxinmy.weixin4j.mp.event.ScribeEventMessage;
import com.foxinmy.weixin4j.request.WeixinRequest;
import com.foxinmy.weixin4j.response.TextResponse;
import com.foxinmy.weixin4j.response.WeixinResponse;
/**
* 处理关注消息
*
* @className SubscribeMessageHandler
* @author jy
* @date 2015年12月3日
* @since JDK 1.7
* @see
*/
public class SubscribeMessageHandler extends
MessageHandlerAdapter<ScribeEventMessage> {
@Override
public WeixinResponse doHandle0(WeixinRequest arg0, ScribeEventMessage arg1)
throws WeixinException {
return new TextResponse("欢迎关注~");
}
}
@@ -0,0 +1,26 @@
package com.foximy.weixin4j.example.server.handler;
import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.handler.MessageHandlerAdapter;
import com.foxinmy.weixin4j.message.TextMessage;
import com.foxinmy.weixin4j.request.WeixinRequest;
import com.foxinmy.weixin4j.response.TextResponse;
import com.foxinmy.weixin4j.response.WeixinResponse;
/**
* 文本消息处理
*
* @className TextMessageHandler
* @author jy
* @date 2015年11月18日
* @since JDK 1.7
* @see
*/
public class TextMessageHandler extends MessageHandlerAdapter<TextMessage> {
@Override
public WeixinResponse doHandle0(WeixinRequest request, TextMessage message)
throws WeixinException {
return new TextResponse("收到了文本消息");
}
}
@@ -0,0 +1,29 @@
package com.foximy.weixin4j.example.server.handler;
import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.handler.MessageHandlerAdapter;
import com.foxinmy.weixin4j.message.VoiceMessage;
import com.foxinmy.weixin4j.request.WeixinRequest;
import com.foxinmy.weixin4j.response.TextResponse;
import com.foxinmy.weixin4j.response.WeixinResponse;
/**
* 只处理语音消息
*
* @className VoiceMessageHandler
* @author jy
* @date 2015年11月18日
* @since JDK 1.7
* @see
*/
public class VoiceMessageHandler extends MessageHandlerAdapter<VoiceMessage> {
@Override
public WeixinResponse doHandle0(WeixinRequest request, VoiceMessage message)
throws WeixinException {
/**
* 返回一段文字给用户
*/
return new TextResponse("你讲了一句话");
}
}