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后台接收微信服务号/订阅号消息的更多相关文章

  1. Ireport5.0.1 从java后台接收list集合

    作为ireport新手,开始使用时总有很多问题,说一下今天解决的一个问题,就是怎样从java后台接收list集合并显示出列表. 1.首先要在主dataset中的Paramerters 中创建参数lis ...

  2. 微信公众号订阅号以及服务号通过网页授权获取用户openid方法

    微信官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842 官方流程 网页授权流程分为四步: 1.引导用户 ...

  3. Java后台创建Socket服务接收硬件终端发送的数据

    最近项目中有遇到后台接收硬件终端发送的数据并解析存储的需求,代码总结如下(有时间再来一一讲解,最近比较忙): @Override public void start() { ExecutorServi ...

  4. angular的$http.post()提交数据到Java后台接收不到参数值问题的解决方法

    本文地址:http://www.cnblogs.com/jying/p/6733408.html   转载请注明出处: 写此文的背景:在工作学习使用angular的$http.post()提交数据时, ...

  5. 安卓发送图片文字,java后台接收

    安卓使用retrofit2 和rxjava2 url: @Multipart @POST(UrlTools.STORYUPLOAD) Observable<Result> saveRepo ...

  6. java后台接收json数据,报错com.alibaba.fastjson.JSONObject cannot be cast to xxx

    从前台接收json封装的list数据,在后台接收时一直报错,com.alibaba.fastjson.JSONObject cannot be cast to xxx, 使用这种方式接收可以接收 @R ...

  7. base64编码上传图片java后台接收实例

    原文地址:http://blog.csdn.net/tonyfreak/article/details/72522855 思路 前台传以data:image/jpeg;base64,开头的base64 ...

  8. 使用Java语言开发微信公众平台(四)——图文消息的发送与响应

    在上一篇文章中,我们实现了被关注回复与关键词回复功能.在用户关注的时候自动推送功能菜单,并根据用户输入的关键词,回复特定信息.但是,我们只能回复文本消息给用户,如何才回复一条图文消息呢?本周,我们一起 ...

  9. C#微信公众号/订阅号开发 接口源码

    using System; using System.Web; using System.IO; using System.Text; using System.Web.Security; using ...

随机推荐

  1. 【SPJ6285 NGM2 - Another Game With Numbers】 题解

    题目链接:https://www.luogu.org/problemnew/show/SP6285 唉好久之前校内模拟赛的题目 嘴上说着明白但是实现起来我的位运算太丑陋了啊! #include < ...

  2. CToolBarCtrl基本内容控件

    基本内容CToolBarCtrl CObject └CCmdTarget └CWnd └CToolBarCtrl CToolBarCtrl类提供了Windows工具条通用控件的性能.这个控件(也就是C ...

  3. Segmentation fault(Core Dump)

    Segmentation fault 这个提示还是比较常见的,这个提示就是段错误,这是翻译还是十分恰当的. Core Dump 有的时候给我们呈现的翻译很有趣是”吐核“,但是实际上比较贴切的翻译是核心 ...

  4. 深入浅出爬虫之道: Python、Golang与GraphQuery的对比

    深入浅出爬虫之道: Python.Golang与GraphQuery的对比 本文将分别使用 Python ,Golang 以及 GraphQuery 来解析某网站的 素材详情页面 ,这个页面的特色是具 ...

  5. lead over 和 lag over

    今天在熟悉项目的某个功能模块时,查看mybatis的映射文件内发现这样的一串sql: (T.NET_VALUE - LEAD(T.NET_VALUE)OVER(ORDER BY T.ESTIMATE_ ...

  6. LeetCode 中级 - 组合总和II(105)

    给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每个组合中只能使用一次. ...

  7. jQuery基本toggle() toggleClass() 使用

    今天来学习一下jQuery的基本函数的使用,很简单. 首先写一个button做控制按钮,然后写一个div用按钮控制idv做动画,从而测试JQuery的动画函数 <head> <met ...

  8. 02-HTTP的请求方法以及响应状态码

    1.   HTTP的请求方法以及响应状态码 1.1. 请求方法 http请求方法有GET.POST.PUT.HEAD.DELETE.OPTIONS.TRACE.CONNECT.当然上述方法是基于HTT ...

  9. mysql索引建立原则

    看了网上一些网上关于创建索引的原则,在这里做一下总结: 1.尽量创建在使用频率较高的字段上,比如主键,外键,where总用到的字段,join是相关联的字段 2.如果表过大,一定要创建索引. 3.索引应 ...

  10. Flume采集目录及文件到HDFS案例

    采集目录到HDFS 使用flume采集目录需要启动hdfs集群 vi spool-hdfs.conf # Name the components on this agent a1.sources = ...