java后台接收微信服务号/订阅号消息
1.申请订阅号(适合个人)或者服务号(适合企业)
微信公众平台
2.填写配置
服务器地址: 需要接收消息 的服务端接口地址
令牌:通话识别码,随便写,后端接收时,使用一样的就可以了。
消息加密秘钥 :(目前不用)
提交这些配置信息,就能与后端通讯了,这个项目使用的是SSM框架,springboot项目做的后端接收。
注:
因为项目在本地测试,需要用到内网穿透相关。
这里就不一一叙述了这里有教程,不懂可以问我。QQ:794171011
实现的效果 : 接收到 用户给公众号发送的消息,并处理。
有图有真相
我这里的功能比较简单只是过滤消息中的 链接
附上代码:
@Controller
@RequestMapping("/wecha")
public class WeChaturlController extends BaseController { private final static Logger logger = Logger.getLogger(WeChaturlController.class.getName()); @Resource
private INewsCommentService newsCommentService;
@Resource
private IReviewNewsService reviewNewsService;
@Resource
protected IWaitParseDao waitParseDao; public static String BIND_TOKEN = "CX_TEST";
private static SAXReader saxReader = new SAXReader(); /**
* 消息接收端
* @param response
* @param request
*/
@RequestMapping(value = "/get")
public void msgIn(HttpServletResponse response, HttpServletRequest request) {
if ("GET".equals(request.getMethod())) {
bindMsg(response, request);
} else if ("POST".equals(request.getMethod())) {
if (WxBaseCheck.checkSignature(request, BIND_TOKEN)) {
handleMsgIn(response, request);
} else {
logger.warn("消息验证失败,来源不是微信!");
}
}
} /**
* 腾讯通过GET请求进行绑定
* @param response
* @param request
*/
public void bindMsg(HttpServletResponse response, HttpServletRequest request) {
try {
String echostr = request.getParameter("echostr");
// System.out.println(WxBaseCheck.checkSignature(request,
// BIND_TOKEN));
if (WxBaseCheck.checkSignature(request, BIND_TOKEN)) {
logger.warn("公众平台与本系统成功绑定!可以开始通信~~~");
response.getWriter().write(echostr);
} else {
response.getWriter().write("");
}
} catch (IOException e) {
logger.warn("绑定URL时:" + e.getMessage());
e.printStackTrace();
}
} /**
* 处理腾讯服务器发送过来的消息
* @param response
* @param request
*/
public void handleMsgIn(HttpServletResponse response, HttpServletRequest request) {
try {
// 使用response的时候必须要设置响应头,不然会乱码~~~
response.setHeader("Content-type", "text/xml;charset=UTF-8");
// 从request中取得输入流
// 读取输入流
Document document = saxReader.read(request.getInputStream());
// 得到xml根元素
Element element = document.getRootElement();
// System.out.println("接口接受xml:"+element.asXML());
// 将解析结果存储在HashMap中
Map<String, String> msgMap = XmlHandler.xmlToMap(element);
String text = msgMap.get("Content");
System.out.println("微信收到消息:" + text);
Pattern pattern = GetUrl.WEB_URL;
Matcher matcher = pattern.matcher(text);
if (matcher.find()) {
// 取字符串中的链接,链接结尾必须有空格 必须有http 或 https开头
// System.out.println(matcher.group());
if (new BrandUrlUtil().isBrandUrl(matcher.group())) {
// 链接初始化入库
this.newsCommentService.initNews(matcher.group());
} else {
// 链接 未收录
// WaitParse waitParse = new WaitParse();
// waitParse.setUrl(matcher.group());
// waitParse.setInfoType(0);
// WaitParse dbWaitParse = this.waitParseDao.getWaitParse(waitParse);
// if (dbWaitParse == null) {
// waitParse.setCreateTime(new Date());
// this.waitParseDao.insertWaitParse(waitParse);
// }
logger.warn("微信公众号收到的链接,系统未收录[" + matcher.group() + "]");
}
} else {
// 其他消息 不包含链接
} } catch (Exception e) {
logger.warn("微信收录链接时:" + e.toString());
}
} }
接收微信消息
java后台接收微信服务号/订阅号消息的更多相关文章
- Ireport5.0.1 从java后台接收list集合
作为ireport新手,开始使用时总有很多问题,说一下今天解决的一个问题,就是怎样从java后台接收list集合并显示出列表. 1.首先要在主dataset中的Paramerters 中创建参数lis ...
- 微信公众号订阅号以及服务号通过网页授权获取用户openid方法
微信官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842 官方流程 网页授权流程分为四步: 1.引导用户 ...
- Java后台创建Socket服务接收硬件终端发送的数据
最近项目中有遇到后台接收硬件终端发送的数据并解析存储的需求,代码总结如下(有时间再来一一讲解,最近比较忙): @Override public void start() { ExecutorServi ...
- angular的$http.post()提交数据到Java后台接收不到参数值问题的解决方法
本文地址:http://www.cnblogs.com/jying/p/6733408.html 转载请注明出处: 写此文的背景:在工作学习使用angular的$http.post()提交数据时, ...
- 安卓发送图片文字,java后台接收
安卓使用retrofit2 和rxjava2 url: @Multipart @POST(UrlTools.STORYUPLOAD) Observable<Result> saveRepo ...
- java后台接收json数据,报错com.alibaba.fastjson.JSONObject cannot be cast to xxx
从前台接收json封装的list数据,在后台接收时一直报错,com.alibaba.fastjson.JSONObject cannot be cast to xxx, 使用这种方式接收可以接收 @R ...
- base64编码上传图片java后台接收实例
原文地址:http://blog.csdn.net/tonyfreak/article/details/72522855 思路 前台传以data:image/jpeg;base64,开头的base64 ...
- 使用Java语言开发微信公众平台(四)——图文消息的发送与响应
在上一篇文章中,我们实现了被关注回复与关键词回复功能.在用户关注的时候自动推送功能菜单,并根据用户输入的关键词,回复特定信息.但是,我们只能回复文本消息给用户,如何才回复一条图文消息呢?本周,我们一起 ...
- C#微信公众号/订阅号开发 接口源码
using System; using System.Web; using System.IO; using System.Text; using System.Web.Security; using ...
随机推荐
- mysql使用Navicat 导出和导入数据库
系统环境: Win7 x64软件准备:Navicat Premium_11.2.7简体中文版下载网址:http://www.cr173.com/soft/419023.html 现在我就向大家介绍 m ...
- ng2-bootstrap的modal嵌套时无法滚动的情况
在ng2-bootstrap的弹窗modal中再弹出另外一个弹窗,关闭子弹窗后,父弹窗会出现无法上下滚动的情况. 通过观察样式可知,关闭子弹窗前,父弹窗的body上是有modal-open样式的,关闭 ...
- asp.net mvc5 step by step(四)——关于Controller的ActionResult
ActionResult是控制器方法执行后返回的结果类型,控制器方法可以返回一个直接或间接从ActionResult抽象类继承的类型,如果返回的 是非ActionResult类型,控制器将会将结果转换 ...
- ORACLE中查询语句的执行顺及where部分条件执行顺序测试
Oracle中的一些查询语句及其执行顺序 原文地址:https://www.cnblogs.com/likeju/p/5039115.html 查询条件: 1)LIKE:模糊查询,需要借助两个通配符, ...
- oracle11g的安装与卸载
1.首先确认电脑已安装 .NET Framework3.5 2.本地计算机的安装: 参考:https://www.cnblogs.com/hoobey/p/6010804.html 3.服务器的安装: ...
- iOS运用runtime全局修改UILabel的默认字体
iOS运用runtime全局修改UILabel的默认字体 一.需求背景介绍 在项目比较成熟的基础上,遇到了这样一个需求,应用中需要引入新的字体,需要更换所有Label的默认字体,但是同时,对于一些特殊 ...
- 【sql server常用操作{增删改查}】
use DB_x go drop database DB_y create database DB_y --创建数据库 on primary --指定主数据文件 ( name= ...
- go加密算法:CBC对称加密(一)--3DES/AES
其实对称加密中的:DES\3DES\AES 采取的加解密步骤一致,只是小的细节不太一样.大家多看看就能写出来了 // rsao1.go package main import ( "byte ...
- vue vue-router 完美实现前进刷新,后退不刷新。附scrollBehavior源码解析
需求:在一个vue的项目中,我们需要从一个列表页面点击列表中的某一个详情页面,从详情页面返回不刷新列表,而从列表的上一个页面重新进入列表页面则需要刷新列表. 而浏览器的机制则是每一次的页面打开都会重新 ...
- day 13 内置函数
内置函数思维导图:https://www.processon.com/view/link/5c13ad2de4b0ed122da75668 内置函数 作用域相关: locals() 返回当前作用域 ...