From 1ce14b7d1a8447b67225426ae95f8e4b748e6ed0 Mon Sep 17 00:00:00 2001 From: Sola Date: Sat, 26 Dec 2015 15:04:44 +0800 Subject: [PATCH] member sign --- .../sola/netsupport/wechat/WxMpServlet.java | 2 + .../wechat/handler/SignHandler.java | 67 +++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 src/main/java/love/sola/netsupport/wechat/handler/SignHandler.java diff --git a/src/main/java/love/sola/netsupport/wechat/WxMpServlet.java b/src/main/java/love/sola/netsupport/wechat/WxMpServlet.java index 2d96f70..b9507a0 100644 --- a/src/main/java/love/sola/netsupport/wechat/WxMpServlet.java +++ b/src/main/java/love/sola/netsupport/wechat/WxMpServlet.java @@ -2,6 +2,7 @@ package love.sola.netsupport.wechat; import love.sola.netsupport.config.Settings; import love.sola.netsupport.wechat.handler.RegisterHandler; +import love.sola.netsupport.wechat.handler.SignHandler; import love.sola.netsupport.wechat.handler.SubscribeHandler; import love.sola.netsupport.wechat.matcher.CheckSpamMatcher; import love.sola.netsupport.wechat.matcher.RegisterMatcher; @@ -80,6 +81,7 @@ public class WxMpServlet extends HttpServlet { } catch (IllegalAccessException | InstantiationException e) { throw new ServletException(e); } + wxMpMessageRouter.rule().async(false).msgType("text").rContent("(?i)^Auth \\d{4}").handler(new SignHandler()).end(); } public static void registerCommands(WxMpMessageRouter router) throws IllegalAccessException, InstantiationException { diff --git a/src/main/java/love/sola/netsupport/wechat/handler/SignHandler.java b/src/main/java/love/sola/netsupport/wechat/handler/SignHandler.java new file mode 100644 index 0000000..54a1da8 --- /dev/null +++ b/src/main/java/love/sola/netsupport/wechat/handler/SignHandler.java @@ -0,0 +1,67 @@ +package love.sola.netsupport.wechat.handler; + +import love.sola.netsupport.sql.SQLCore; +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.WxMpService; +import me.chanjar.weixin.mp.bean.WxMpXmlMessage; +import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage; +import me.chanjar.weixin.mp.bean.outxmlbuilder.TextBuilder; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * *********************************************** + * Created by Sola on 2015/12/26. + * Don't modify this source without my agreement + * *********************************************** + */ +public class SignHandler implements WxMpMessageHandler { + + public static Pattern pat = Pattern.compile("(?i)^Auth (\\d{4})"); + + @Override + public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map context, WxMpService wxMpService, WxSessionManager sessionManager) throws WxErrorException { + String msg = wxMessage.getContent(); + TextBuilder out = WxMpXmlOutMessage.TEXT().toUser(wxMessage.getFromUserName()).fromUser(wxMessage.getToUserName()); + Matcher mat = pat.matcher(msg); + if (mat.find()) { + int id = Integer.parseInt(mat.group(1)); + try (Connection conn = SQLCore.ds.getConnection()) { + PreparedStatement ps = conn.prepareStatement("SELECT wechat FROM auth WHERE id=?"); + ps.setInt(1, id); + ResultSet rs = ps.executeQuery(); + if (rs.next()) { + if (rs.getString("wechat") != null) { + out.content("该ID已登记过。"); + } else { + ps = conn.prepareStatement("UPDATE auth SET wechat=? WHERE id=?"); + ps.setString(1, wxMessage.getFromUserName()); + ps.setInt(2, id); + if (ps.executeUpdate() == 1) { + out.content("登记成功。"); + } else { + out.content("登记失败,请联系管理员。"); + } + } + } else { + out.content("无效ID。"); + } + } catch (SQLException e) { + e.printStackTrace(); + out.content("系统异常,请联系管理员。"); + } + } else { + out.content("无效ID。"); + } + return out.build(); + } + +}