From 461bdf2c2799f60339a31befab0d25743468fe81 Mon Sep 17 00:00:00 2001 From: Sola Date: Thu, 31 Dec 2015 01:32:31 +0800 Subject: [PATCH] async message ready --- .../sola/netsupport/api/user/Register.java | 34 +++++++++++++++++++ .../sola/netsupport/wechat/WxMpServlet.java | 34 +++++++++---------- 2 files changed, 51 insertions(+), 17 deletions(-) diff --git a/src/main/java/love/sola/netsupport/api/user/Register.java b/src/main/java/love/sola/netsupport/api/user/Register.java index 42db0b0..4d62ecf 100644 --- a/src/main/java/love/sola/netsupport/api/user/Register.java +++ b/src/main/java/love/sola/netsupport/api/user/Register.java @@ -10,7 +10,10 @@ import love.sola.netsupport.sql.TableUser; import love.sola.netsupport.util.Checker; import love.sola.netsupport.util.ParseUtil; import love.sola.netsupport.wechat.Command; +import love.sola.netsupport.wechat.WxMpServlet; +import me.chanjar.weixin.common.exception.WxErrorException; import me.chanjar.weixin.common.session.WxSession; +import me.chanjar.weixin.mp.bean.WxMpCustomMessage; import org.hibernate.exception.ConstraintViolationException; import javax.servlet.ServletException; @@ -20,6 +23,10 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; import static love.sola.netsupport.util.Checker.*; @@ -101,6 +108,8 @@ public class Register extends HttpServlet { String dupKey = e.getConstraintName(); return "Duplicated_" + dupKey.toUpperCase(); // PHONE ACCOUNT WECHAT } + // FIXME: 2015/12/30 Temporary converter + converter(user); return "Register_Success"; } @@ -110,4 +119,29 @@ public class Register extends HttpServlet { return; } + private void converter(User u) { + try (Connection conn = SQLCore.ds.getConnection()) { + PreparedStatement ps = conn.prepareStatement("SELECT wechat FROM `convert` WHERE id=?"); + ps.setLong(1, u.getId()); + ResultSet rs = ps.executeQuery(); + if (rs.next()) { + String old = rs.getString(1); + ps = conn.prepareStatement("UPDATE `convert` SET wechat=? WHERE wechat=?"); + ps.setString(1, u.getWechatId()); + ps.setString(2, old); + if (ps.executeUpdate() == 1) { + WxMpServlet.instance.wxMpService.customMessageSend(WxMpCustomMessage.TEXT().toUser(u.getWechatId()).content("数据转换成功").build()); + return; + } + } + } catch (SQLException | WxErrorException e) { + e.printStackTrace(); + } + try { + WxMpServlet.instance.wxMpService.customMessageSend(WxMpCustomMessage.TEXT().toUser(u.getWechatId()).content("数据转换失败").build()); + } catch (WxErrorException e) { + e.printStackTrace(); + } + } + } diff --git a/src/main/java/love/sola/netsupport/wechat/WxMpServlet.java b/src/main/java/love/sola/netsupport/wechat/WxMpServlet.java index 2d96f70..cf3bb2e 100644 --- a/src/main/java/love/sola/netsupport/wechat/WxMpServlet.java +++ b/src/main/java/love/sola/netsupport/wechat/WxMpServlet.java @@ -30,7 +30,7 @@ public class WxMpServlet extends HttpServlet { public static WxMpServlet instance; protected WxMpInMemoryConfigStorage config; - protected WxMpService wxMpService; + public WxMpService wxMpService; protected WxMpMessageRouter wxMpMessageRouter; protected CheckSpamMatcher checkSpamMatcher; @@ -58,7 +58,7 @@ public class WxMpServlet extends HttpServlet { .msgType("event") .event("subscribe") .handler(new SubscribeHandler()) - .end(); + .next(); wxMpMessageRouter.rule() .async(false) .msgType("text") @@ -70,8 +70,7 @@ public class WxMpServlet extends HttpServlet { .content(lang("Message_Spam")).build()) .end(); wxMpMessageRouter.rule() - .async(false) - .msgType("text") + .async(true) .matcher(new RegisterMatcher()) .handler(new RegisterHandler()) .end(); @@ -86,6 +85,7 @@ public class WxMpServlet extends HttpServlet { for (Command c : Command.values()) { WxMpMessageHandler handler = c.handler.newInstance(); router.rule().async(false).msgType("text").rContent(c.regex).handler(handler).end(); + router.rule().async(false).msgType("event").event("CLICK").eventKey(c.name()).handler(handler).end(); } } @@ -115,19 +115,19 @@ public class WxMpServlet extends HttpServlet { 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); - if (outMessage == null) { - outMessage = WxMpXmlOutMessage.TEXT() - .fromUser(inMessage.getToUserName()) - .toUser(inMessage.getFromUserName()) - .content(lang("Invalid_Operation")) - .build(); - } - response.getWriter().write(outMessage.toXml()); - return; - } +// if ("raw".equals(encryptType)) { +// WxMpXmlMessage inMessage = WxMpXmlMessage.fromXml(request.getInputStream()); +// WxMpXmlOutMessage outMessage = wxMpMessageRouter.route(inMessage); +// if (outMessage == null) { +// outMessage = WxMpXmlOutMessage.TEXT() +// .fromUser(inMessage.getToUserName()) +// .toUser(inMessage.getFromUserName()) +// .content(lang("Invalid_Operation")) +// .build(); +// } +// response.getWriter().write(outMessage.toXml()); +// return; +// } if ("aes".equals(encryptType)) { String msgSignature = request.getParameter("msg_signature");