java后台接收微信服务号/订阅号消息
生活随笔
收集整理的這篇文章主要介紹了
java后台接收微信服务号/订阅号消息
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1.申請(qǐng)訂閱號(hào)(適合個(gè)人)或者服務(wù)號(hào)(適合企業(yè))
微信公眾平臺(tái)
2.填寫配置
服務(wù)器地址: 需要接收消息 的服務(wù)端接口地址
令牌:通話識(shí)別碼,隨便寫,后端接收時(shí),使用一樣的就可以了。
消息加密秘鑰 :(目前不用)
提交這些配置信息,就能與后端通訊了,這個(gè)項(xiàng)目使用的是SSM框架,springboot項(xiàng)目做的后端接收。
注:
因?yàn)轫?xiàng)目在本地測試,需要用到內(nèi)網(wǎng)穿透相關(guān)。
這里就不一一敘述了這里有教程,不懂可以問我。QQ:794171011
內(nèi)網(wǎng)穿透工具
實(shí)現(xiàn)的效果 : 接收到 用戶給公眾號(hào)發(fā)送的消息,并處理。
有圖有真相
我這里的功能比較簡單只是過濾消息中的 鏈接
附上代碼:
1 @Controller
2 @RequestMapping("/wecha")
3 public class WeChaturlController extends BaseController {
4
5 private final static Logger logger = Logger.getLogger(WeChaturlController.class.getName());
6
7 @Resource
8 private INewsCommentService newsCommentService;
9 @Resource
10 private IReviewNewsService reviewNewsService;
11 @Resource
12 protected IWaitParseDao waitParseDao;
13
14 public static String BIND_TOKEN = "CX_TEST";
15 private static SAXReader saxReader = new SAXReader();
16
17 /**
18 * 消息接收端
19 * @param response
20 * @param request
21 */
22 @RequestMapping(value = "/get")
23 public void msgIn(HttpServletResponse response, HttpServletRequest request) {
24 if ("GET".equals(request.getMethod())) {
25 bindMsg(response, request);
26 } else if ("POST".equals(request.getMethod())) {
27 if (WxBaseCheck.checkSignature(request, BIND_TOKEN)) {
28 handleMsgIn(response, request);
29 } else {
30 logger.warn("消息驗(yàn)證失敗,來源不是微信!");
31 }
32 }
33 }
34
35 /**
36 * 騰訊通過GET請(qǐng)求進(jìn)行綁定
37 * @param response
38 * @param request
39 */
40 public void bindMsg(HttpServletResponse response, HttpServletRequest request) {
41 try {
42 String echostr = request.getParameter("echostr");
43 // System.out.println(WxBaseCheck.checkSignature(request,
44 // BIND_TOKEN));
45 if (WxBaseCheck.checkSignature(request, BIND_TOKEN)) {
46 logger.warn("公眾平臺(tái)與本系統(tǒng)成功綁定!可以開始通信~~~");
47 response.getWriter().write(echostr);
48 } else {
49 response.getWriter().write("");
50 }
51 } catch (IOException e) {
52 logger.warn("綁定URL時(shí):" + e.getMessage());
53 e.printStackTrace();
54 }
55 }
56
57 /**
58 * 處理騰訊服務(wù)器發(fā)送過來的消息
59 * @param response
60 * @param request
61 */
62 public void handleMsgIn(HttpServletResponse response, HttpServletRequest request) {
63 try {
64 // 使用response的時(shí)候必須要設(shè)置響應(yīng)頭,不然會(huì)亂碼~~~
65 response.setHeader("Content-type", "text/xml;charset=UTF-8");
66 // 從request中取得輸入流
67 // 讀取輸入流
68 Document document = saxReader.read(request.getInputStream());
69 // 得到xml根元素
70 Element element = document.getRootElement();
71 // System.out.println("接口接受xml:"+element.asXML());
72 // 將解析結(jié)果存儲(chǔ)在HashMap中
73 Map<String, String> msgMap = XmlHandler.xmlToMap(element);
74 String text = msgMap.get("Content");
75 System.out.println("微信收到消息:" + text);
76 Pattern pattern = GetUrl.WEB_URL;
77 Matcher matcher = pattern.matcher(text);
78 if (matcher.find()) {
79 // 取字符串中的鏈接,鏈接結(jié)尾必須有空格 必須有http 或 https開頭
80 // System.out.println(matcher.group());
81 if (new BrandUrlUtil().isBrandUrl(matcher.group())) {
82 // 鏈接初始化入庫
83 this.newsCommentService.initNews(matcher.group());
84 } else {
85 // 鏈接 未收錄
86 // WaitParse waitParse = new WaitParse();
87 // waitParse.setUrl(matcher.group());
88 // waitParse.setInfoType(0);
89 // WaitParse dbWaitParse = this.waitParseDao.getWaitParse(waitParse);
90 // if (dbWaitParse == null) {
91 // waitParse.setCreateTime(new Date());
92 // this.waitParseDao.insertWaitParse(waitParse);
93 // }
94 logger.warn("微信公眾號(hào)收到的鏈接,系統(tǒng)未收錄[" + matcher.group() + "]");
95 }
96 } else {
97 // 其他消息 不包含鏈接
98 }
99
100 } catch (Exception e) {
101 logger.warn("微信收錄鏈接時(shí):" + e.toString());
102 }
103 }
104
105 }
接收微信消息
總結(jié)
以上是生活随笔為你收集整理的java后台接收微信服务号/订阅号消息的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ primer第十八章 18.1小
- 下一篇: 微信开发获取media_id错误码汇总