Skip to content

Commit 4e3bac0

Browse files
committed
add handler package and move message handler to here
1 parent 0a2da45 commit 4e3bac0

File tree

8 files changed

+227
-62
lines changed

8 files changed

+227
-62
lines changed

.idea/compiler.xml

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/main/java/com/github/controller/CoreController.java

Lines changed: 7 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,21 @@
22

33
import com.github.service.CoreService;
44
import com.github.util.ReturnModel;
5-
import me.chanjar.weixin.common.api.WxConsts;
65
import me.chanjar.weixin.common.exception.WxErrorException;
7-
import me.chanjar.weixin.common.session.WxSessionManager;
86
import me.chanjar.weixin.common.util.StringUtils;
97
import me.chanjar.weixin.mp.api.WxMpConfigStorage;
10-
import me.chanjar.weixin.mp.api.WxMpMessageHandler;
11-
import me.chanjar.weixin.mp.api.WxMpMessageRouter;
128
import me.chanjar.weixin.mp.api.WxMpService;
139
import me.chanjar.weixin.mp.bean.WxMpXmlMessage;
1410
import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage;
15-
import me.chanjar.weixin.mp.bean.WxMpXmlOutTextMessage;
1611
import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken;
1712
import me.chanjar.weixin.mp.bean.result.WxMpUser;
18-
import org.slf4j.Logger;
19-
import org.slf4j.LoggerFactory;
2013
import org.springframework.beans.factory.annotation.Autowired;
2114
import org.springframework.stereotype.Controller;
2215
import org.springframework.web.bind.annotation.RequestMapping;
2316
import org.springframework.web.bind.annotation.RequestParam;
2417

2518
import javax.servlet.http.HttpServletRequest;
2619
import javax.servlet.http.HttpServletResponse;
27-
import java.util.Map;
2820

2921
/**
3022
* Created by FirenzesEagle on 2016/5/30 0030.
@@ -40,12 +32,6 @@ public class CoreController extends GenericController {
4032
@Autowired
4133
protected CoreService coreService;
4234

43-
protected WxMpMessageRouter wxMpMessageRouter;
44-
private static final String CREATE_USER_URL = "http://111.207.243.66:8886/SZBProject/wxinfo/insert";
45-
private static final String CREATE_SHOP_URL = "http://111.207.243.66:8886/SZBProject/shop/create?openId=";
46-
47-
private static final Logger log = LoggerFactory.getLogger(CoreController.class);
48-
4935
@RequestMapping(value = "index")
5036
public String index() {
5137
return "index";
@@ -67,30 +53,6 @@ public void wechatCore(HttpServletRequest request, HttpServletResponse response)
6753
String nonce = request.getParameter("nonce");
6854
String timestamp = request.getParameter("timestamp");
6955

70-
//订阅事件消息处理
71-
WxMpMessageHandler subscribeHandler = new WxMpMessageHandler() {
72-
@Override
73-
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService, WxSessionManager sessionManager) throws WxErrorException {
74-
WxMpUser wxMpUser = getUserInfo(wxMessage.getFromUserName(), "zh_CN");
75-
WxMpXmlOutTextMessage m
76-
= WxMpXmlOutMessage.TEXT()
77-
.content("尊敬的" + wxMpUser.getNickname() + ",您好 !")
78-
.fromUser(wxMessage.getToUserName())
79-
.toUser(wxMessage.getFromUserName())
80-
.build();
81-
log.info("subscribeMessageHandler: " + m.getContent());
82-
return m;
83-
}
84-
};
85-
86-
wxMpMessageRouter = new WxMpMessageRouter(wxMpService);
87-
wxMpMessageRouter
88-
.rule()
89-
.async(false)
90-
.event(WxConsts.EVT_SUBSCRIBE)
91-
.handler(subscribeHandler)
92-
.end();
93-
9456
if (!wxMpService.checkSignature(timestamp, nonce, signature)) {
9557
// 消息签名不正确,说明不是公众平台发过来的消息
9658
response.getWriter().println("非法请求");
@@ -111,7 +73,7 @@ public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> co
11173
if ("raw".equals(encryptType)) {
11274
// 明文传输的消息
11375
WxMpXmlMessage inMessage = WxMpXmlMessage.fromXml(request.getInputStream());
114-
WxMpXmlOutMessage outMessage = wxMpMessageRouter.route(inMessage);
76+
WxMpXmlOutMessage outMessage = coreService.route(inMessage);
11577
response.getWriter().write(outMessage.toXml());
11678
return;
11779
}
@@ -120,8 +82,9 @@ public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> co
12082
// 是aes加密的消息
12183
String msgSignature = request.getParameter("msg_signature");
12284
WxMpXmlMessage inMessage = WxMpXmlMessage.fromEncryptedXml(request.getInputStream(), configStorage, timestamp, nonce, msgSignature);
123-
WxMpXmlOutMessage outMessage = wxMpMessageRouter.route(inMessage);
124-
log.info(response.toString());
85+
logger.debug("\n消息解密后内容为:\n{} ", inMessage.toString());
86+
WxMpXmlOutMessage outMessage = coreService.route(inMessage);
87+
logger.info(response.toString());
12588
response.getWriter().write(outMessage.toEncryptedXml(configStorage));
12689
return;
12790
}
@@ -151,24 +114,7 @@ public WxMpUser getUserInfo(HttpServletResponse response, @RequestParam(value =
151114
returnModel.setResult(false);
152115
returnModel.setReason(e.getError().toString());
153116
renderString(response, returnModel);
154-
log.error(e.getError().toString());
155-
}
156-
return wxMpUser;
157-
}
158-
159-
/**
160-
* 通过openid获得基本用户信息的重载方法,去除HttpServletResponse对象,否则会空指针
161-
*
162-
* @param openid
163-
* @param lang
164-
* @return
165-
*/
166-
public WxMpUser getUserInfo(String openid, String lang) {
167-
WxMpUser wxMpUser = null;
168-
try {
169-
wxMpUser = wxMpService.userInfo(openid, lang);
170-
} catch (WxErrorException e) {
171-
log.error(e.getError().toString());
117+
logger.error(e.getError().toString());
172118
}
173119
return wxMpUser;
174120
}
@@ -196,7 +142,7 @@ public void getOAuth2UserInfo(HttpServletResponse response, @RequestParam(value
196142
returnModel.setResult(false);
197143
returnModel.setReason(e.getError().toString());
198144
renderString(response, returnModel);
199-
log.error(e.getError().toString());
145+
logger.error(e.getError().toString());
200146
}
201147
}
202148

@@ -220,7 +166,7 @@ public void getOpenid(HttpServletResponse response, @RequestParam(value = "code"
220166
returnModel.setResult(false);
221167
returnModel.setReason(e.getError().toString());
222168
renderString(response, returnModel);
223-
log.error(e.getError().toString());
169+
logger.error(e.getError().toString());
224170
}
225171
}
226172

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.github.handler;
2+
3+
import com.google.gson.Gson;
4+
import me.chanjar.weixin.mp.api.WxMpMessageHandler;
5+
import org.slf4j.Logger;
6+
import org.slf4j.LoggerFactory;
7+
8+
/**
9+
* 消息处理Handler的父类
10+
*
11+
* Created by FirenzesEagle on 2016/7/27 0027.
12+
* Email:liumingbo2008@gmail.com
13+
*/
14+
public abstract class AbstractHandler implements WxMpMessageHandler {
15+
protected Logger logger = LoggerFactory.getLogger(getClass());
16+
protected final Gson gson = new Gson();
17+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.github.handler;
2+
3+
import me.chanjar.weixin.common.session.WxSessionManager;
4+
import me.chanjar.weixin.mp.api.WxMpService;
5+
import me.chanjar.weixin.mp.bean.WxMpXmlMessage;
6+
import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage;
7+
import org.springframework.stereotype.Component;
8+
9+
import java.util.Map;
10+
11+
/**
12+
* 对所有接收到的消息输出日志,也可进行持久化处理
13+
*
14+
* Created by FirenzesEagle on 2016/7/27 0027.
15+
* Email:liumingbo2008@gmail.com
16+
*/
17+
@Component
18+
public class LogHandler extends AbstractHandler {
19+
@Override
20+
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage,
21+
Map<String, Object> context, WxMpService wxMpService,
22+
WxSessionManager sessionManager) {
23+
this.logger.info("\n接收到请求消息,内容:【{}】", wxMessage.toString());
24+
return null;
25+
}
26+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.github.handler;
2+
3+
import me.chanjar.weixin.common.exception.WxErrorException;
4+
import me.chanjar.weixin.common.session.WxSessionManager;
5+
import me.chanjar.weixin.mp.api.WxMpService;
6+
import me.chanjar.weixin.mp.bean.WxMpXmlMessage;
7+
import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage;
8+
import org.springframework.stereotype.Component;
9+
10+
import java.util.Map;
11+
12+
/**
13+
* 转发客户消息Handler
14+
*
15+
* Created by FirenzesEagle on 2016/7/27 0027.
16+
* Email:liumingbo2008@gmail.com
17+
*/
18+
@Component
19+
public class MsgHandler extends AbstractHandler {
20+
@Override
21+
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService, WxSessionManager sessionManager) throws WxErrorException {
22+
return WxMpXmlOutMessage
23+
.TRANSFER_CUSTOMER_SERVICE().fromUser(wxMessage.getToUserName())
24+
.toUser(wxMessage.getFromUserName()).build();
25+
}
26+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package com.github.handler;
2+
3+
import com.github.service.CoreService;
4+
import me.chanjar.weixin.common.exception.WxErrorException;
5+
import me.chanjar.weixin.common.session.WxSessionManager;
6+
import me.chanjar.weixin.mp.api.WxMpConfigStorage;
7+
import me.chanjar.weixin.mp.api.WxMpService;
8+
import me.chanjar.weixin.mp.bean.WxMpXmlMessage;
9+
import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage;
10+
import me.chanjar.weixin.mp.bean.WxMpXmlOutTextMessage;
11+
import me.chanjar.weixin.mp.bean.result.WxMpUser;
12+
import org.apache.http.NameValuePair;
13+
import org.apache.http.message.BasicNameValuePair;
14+
import org.springframework.beans.factory.annotation.Autowired;
15+
import org.springframework.stereotype.Component;
16+
17+
import java.util.ArrayList;
18+
import java.util.List;
19+
import java.util.Map;
20+
21+
/**
22+
* 用户关注公众号Handler
23+
*
24+
* Created by FirenzesEagle on 2016/7/27 0027.
25+
* Email:liumingbo2008@gmail.com
26+
*/
27+
@Component
28+
public class SubscribeHandler extends AbstractHandler {
29+
30+
@Autowired
31+
protected WxMpConfigStorage configStorage;
32+
@Autowired
33+
protected WxMpService wxMpService;
34+
@Autowired
35+
protected CoreService coreService;
36+
37+
38+
@Override
39+
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService, WxSessionManager sessionManager) throws WxErrorException {
40+
WxMpUser wxMpUser = coreService.getUserInfo(wxMessage.getFromUserName(), "zh_CN");
41+
List<NameValuePair> params = new ArrayList<>();
42+
params.add(new BasicNameValuePair("openId", wxMpUser.getOpenId()));
43+
params.add(new BasicNameValuePair("nickname", wxMpUser.getNickname()));
44+
params.add(new BasicNameValuePair("headImgUrl", wxMpUser.getHeadImgUrl()));
45+
46+
//TODO 在这里可以进行用户关注时对业务系统的相关操作(比如新增用户)
47+
48+
WxMpXmlOutTextMessage m
49+
= WxMpXmlOutMessage.TEXT()
50+
.content("尊敬的" + wxMpUser.getNickname() + ",您好!")
51+
.fromUser(wxMessage.getToUserName())
52+
.toUser(wxMessage.getFromUserName())
53+
.build();
54+
logger.info("subscribeMessageHandler" + m.getContent());
55+
return m;
56+
}
57+
};

src/main/java/com/github/service/CoreService.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package com.github.service;
22

3+
import me.chanjar.weixin.mp.bean.WxMpXmlMessage;
4+
import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage;
5+
import me.chanjar.weixin.mp.bean.result.WxMpUser;
36
import org.apache.http.NameValuePair;
47
import org.apache.http.client.ClientProtocolException;
58

@@ -30,4 +33,26 @@ public interface CoreService {
3033
*/
3134
public void requestPost(String url, List<NameValuePair> params) throws ClientProtocolException, IOException;
3235

36+
/**
37+
* 刷新消息路由器
38+
*/
39+
public void refreshRouter();
40+
41+
/**
42+
* 路由消息
43+
*
44+
* @param inMessage
45+
* @return
46+
*/
47+
public WxMpXmlOutMessage route(WxMpXmlMessage inMessage);
48+
49+
/**
50+
* 通过openid获得基本用户信息
51+
*
52+
* @param openid
53+
* @param lang
54+
* @return
55+
*/
56+
public WxMpUser getUserInfo(String openid, String lang);
57+
3358
}

0 commit comments

Comments
 (0)