mirror of
				https://github.com/ZSCNetSupportDept/WechatTicketSystem.git
				synced 2025-11-01 02:46:19 +08:00 
			
		
		
		
	using maven build tools instead
This commit is contained in:
		
							
								
								
									
										100
									
								
								src/main/java/love/sola/netsupport/wechat/WxMpServlet.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								src/main/java/love/sola/netsupport/wechat/WxMpServlet.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,100 @@ | ||||
| package love.sola.netsupport.wechat; | ||||
|  | ||||
| import me.chanjar.weixin.common.util.StringUtils; | ||||
| import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage; | ||||
| import me.chanjar.weixin.mp.api.WxMpMessageRouter; | ||||
| import me.chanjar.weixin.mp.api.WxMpService; | ||||
| import me.chanjar.weixin.mp.api.WxMpServiceImpl; | ||||
| import me.chanjar.weixin.mp.bean.WxMpXmlMessage; | ||||
| import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage; | ||||
|  | ||||
| import javax.servlet.ServletException; | ||||
| import javax.servlet.annotation.WebServlet; | ||||
| import javax.servlet.http.HttpServlet; | ||||
| import javax.servlet.http.HttpServletRequest; | ||||
| import javax.servlet.http.HttpServletResponse; | ||||
| import java.io.IOException; | ||||
|  | ||||
| /** | ||||
|  * *********************************************** | ||||
|  * Created by Sola on 2015/11/2. | ||||
|  * Don't modify this source without my agreement | ||||
|  * *********************************************** | ||||
|  */ | ||||
| @WebServlet(name = "WxMpServlet", urlPatterns = "/wechattest", loadOnStartup = 2) | ||||
| public class WxMpServlet extends HttpServlet { | ||||
|  | ||||
| 	public static WxMpServlet instance; | ||||
| 	protected WxMpInMemoryConfigStorage config; | ||||
| 	protected WxMpService wxMpService; | ||||
| 	protected WxMpMessageRouter wxMpMessageRouter; | ||||
|  | ||||
| 	public WxMpServlet() { | ||||
| 		instance = this; | ||||
| 	} | ||||
|  | ||||
| 	@Override | ||||
| 	public void init() throws ServletException { | ||||
| 		super.init(); | ||||
|  | ||||
| 		config = new WxMpInMemoryConfigStorage(); | ||||
| 		config.setAppId("*****"); | ||||
| 		config.setSecret("*****"); | ||||
| 		config.setToken("*****"); | ||||
| //		config.setAesKey("SolaAES"); | ||||
|  | ||||
| 		wxMpService = new WxMpServiceImpl(); | ||||
| 		wxMpService.setWxMpConfigStorage(config); | ||||
| 		wxMpMessageRouter = new WxMpMessageRouter(wxMpService); | ||||
| 	} | ||||
|  | ||||
| 	@Override | ||||
| 	protected void doPost(HttpServletRequest request, HttpServletResponse response) | ||||
| 			throws ServletException, IOException { | ||||
|  | ||||
| 		response.setContentType("text/html;charset=utf-8"); | ||||
| 		response.setStatus(HttpServletResponse.SC_OK); | ||||
|  | ||||
| 		String signature = request.getParameter("signature"); | ||||
| 		String nonce = request.getParameter("nonce"); | ||||
| 		String timestamp = request.getParameter("timestamp"); | ||||
|  | ||||
| 		if (!wxMpService.checkSignature(timestamp, nonce, signature)) { | ||||
| 			// Signature fail | ||||
| 			response.getWriter().println("Access Denied"); | ||||
| 			return; | ||||
| 		} | ||||
|  | ||||
| 		String echostr = request.getParameter("echostr"); | ||||
| 		if (StringUtils.isNotBlank(echostr)) { | ||||
| 			// validate request | ||||
| 			response.getWriter().println(echostr); | ||||
| 			return; | ||||
| 		} | ||||
|  | ||||
| 		String encryptType = StringUtils.isBlank(request.getParameter("encrypt_type")) ? "raw" : request.getParameter("encrypt_type"); | ||||
|  | ||||
| 		if ("raw".equals(encryptType)) { | ||||
| 			WxMpXmlMessage inMessage = WxMpXmlMessage.fromXml(request.getInputStream()); | ||||
| 			WxMpXmlOutMessage outMessage = wxMpMessageRouter.route(inMessage); | ||||
| 			response.getWriter().write(outMessage.toXml()); | ||||
| 			return; | ||||
| 		} | ||||
|  | ||||
| 		if ("aes".equals(encryptType)) { | ||||
| 			String msgSignature = request.getParameter("msg_signature"); | ||||
| 			WxMpXmlMessage inMessage = WxMpXmlMessage.fromEncryptedXml(request.getInputStream(), config, timestamp, nonce, msgSignature); | ||||
| 			WxMpXmlOutMessage outMessage = wxMpMessageRouter.route(inMessage); | ||||
| 			response.getWriter().write(outMessage.toEncryptedXml(config)); | ||||
| 			return; | ||||
| 		} | ||||
|  | ||||
| 		response.getWriter().println("Unknown encrypt-type"); | ||||
| 		return; | ||||
| 	} | ||||
|  | ||||
| 	@Override | ||||
| 	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { | ||||
| 		doPost(req, resp); | ||||
| 	} | ||||
| } | ||||
| @@ -0,0 +1,28 @@ | ||||
| package love.sola.netsupport.wechat.handler; | ||||
|  | ||||
| import me.chanjar.weixin.mp.api.WxMpMessageHandler; | ||||
| import me.chanjar.weixin.mp.api.WxMpMessageRouter; | ||||
|  | ||||
| import java.util.HashMap; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * *********************************************** | ||||
|  * Created by Sola on 2015/11/5. | ||||
|  * Don't modify this source without my agreement | ||||
|  * *********************************************** | ||||
|  */ | ||||
| public class HandlerList { | ||||
|  | ||||
| 	public static Map<String, Class<? extends WxMpMessageHandler>> handlers = new HashMap<>(); | ||||
|  | ||||
| 	static { | ||||
| 		handlers.put("Register", RegisterHandler.class); | ||||
| 	} | ||||
|  | ||||
| 	public void init(WxMpMessageRouter router) { | ||||
|  | ||||
| 	} | ||||
|  | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,33 @@ | ||||
| package love.sola.netsupport.wechat.handler; | ||||
|  | ||||
| import me.chanjar.weixin.common.exception.WxErrorException; | ||||
| import me.chanjar.weixin.common.session.WxSessionManager; | ||||
| import me.chanjar.weixin.mp.api.WxMpMessageHandler; | ||||
| import me.chanjar.weixin.mp.api.WxMpMessageRouter; | ||||
| import me.chanjar.weixin.mp.api.WxMpService; | ||||
| import me.chanjar.weixin.mp.bean.WxMpXmlMessage; | ||||
| import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage; | ||||
|  | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * *********************************************** | ||||
|  * Created by Sola on 2015/11/4. | ||||
|  * Don't modify this source without my agreement | ||||
|  * *********************************************** | ||||
|  */ | ||||
| public class RegisterHandler implements WxMpMessageHandler { | ||||
|  | ||||
|  | ||||
| 	public RegisterHandler(WxMpMessageRouter router) { | ||||
| 		router.rule().async(false).rContent("^").handler(this).end(); | ||||
| 	} | ||||
|  | ||||
| 	@Override | ||||
| 	public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService, WxSessionManager sessionManager) | ||||
| 			throws WxErrorException { | ||||
| 		 | ||||
| 		return null; | ||||
| 	} | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,45 @@ | ||||
| package love.sola.netsupport.wechat.intercepter; | ||||
|  | ||||
| import com.google.common.cache.CacheBuilder; | ||||
| import com.google.common.cache.CacheLoader; | ||||
| import com.google.common.cache.LoadingCache; | ||||
| import me.chanjar.weixin.common.exception.WxErrorException; | ||||
| import me.chanjar.weixin.common.session.WxSessionManager; | ||||
| import me.chanjar.weixin.mp.api.WxMpMessageInterceptor; | ||||
| import me.chanjar.weixin.mp.api.WxMpService; | ||||
| import me.chanjar.weixin.mp.bean.WxMpXmlMessage; | ||||
|  | ||||
| import java.util.Map; | ||||
| import java.util.concurrent.TimeUnit; | ||||
|  | ||||
| /** | ||||
|  * *********************************************** | ||||
|  * Created by Sola on 2015/11/4. | ||||
|  * Don't modify this source without my agreement | ||||
|  * *********************************************** | ||||
|  */ | ||||
| public class CheckSpamInterceptor implements WxMpMessageInterceptor { | ||||
|  | ||||
| 	private static class ValueLoader extends CacheLoader<String, Long> { | ||||
| 		@Override | ||||
| 		public Long load(String key) throws Exception { | ||||
| 			return System.currentTimeMillis(); //TODO: CONFIGURATION | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	private static LoadingCache<String, Long> cache = CacheBuilder.newBuilder() | ||||
| 			.concurrencyLevel(4) | ||||
| 			.weakKeys() | ||||
| 			.maximumSize(4096) | ||||
| 			.expireAfterWrite(5, TimeUnit.SECONDS) | ||||
| 			.build(new ValueLoader()); | ||||
|  | ||||
| 	@Override | ||||
| 	public boolean intercept(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService, WxSessionManager sessionManager) throws WxErrorException { | ||||
| 		if (cache.getIfPresent(wxMessage.getFromUserName()) != null) { | ||||
|  | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
|  | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Sola
					Sola