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 ...
随机推荐
- [转]asp.net Request、Response 响应在此上下文中不可用
这个问题一般是在页面中使用了Respons.Write()方法,虽然是继承了System.Web.UI.Page.但System.Web.UI.Page下的Response只有在asp.net页面里才 ...
- Context initialization failed org.springframework.beans.factory.BeanCreationException
严重: Context initialization failed org.springframework.beans.factory.BeanCreationException: Error cre ...
- OGG故障集锦(一)
说明:此系列仅作OGG故障记录,未包含处理过程.仅作故障备案 ① ERROR OGG-00519 Source Context : SourceModule : [ggapp.ddl] Sourc ...
- Dynamic Ambient Occlusion and Indirect Lighting
This sample was presented on the Nvida witesite, which detail a new idea to calculate the ambient oc ...
- python函数调用时传参方式
位置参数 位置参数需与形参一一对应 def test(a,b) #a,b就是位置参数 print(a) print(b) test(1,2) 关键字参数 与形参顺序无关 def test(x,y) ...
- 【LightOJ 1081】Square Queries(二维RMQ降维)
Little Tommy is playing a game. The game is played on a 2D N x N grid. There is an integer in each c ...
- Spring的入门学习笔记 (AOP概念及操作+AspectJ)
AOP概念 1.aop:面向切面(方面)编程,扩展功能不通过源代码实现 2.采用横向抽取机制,取代了传统的纵向继承重复代码 AOP原理 假设现有 public class User{ //添加用户方法 ...
- JQ中的选择器children()和find()区别
1:children及find方法都用是用来获得element的子elements的,两者都不会返回 text node,就像大多数的jQuery方法一样. 2:children方法获得的仅仅是元素一 ...
- 关于如何去Apple.cn下载Xcode以及模拟器包
前言:对于一个懒惰的iOS开发,Xcode的更新我是迟迟没有去下载.有人或许会说:你并不是一个合格的iOS开发者! T3T 我承认自己缺少拓新精神,Apple的尿性是:坑死第一批体验者不偿命~表示本人 ...
- 利用ascii码生成26个英文字母
<script> let a = ""; for (var i = 65; i < 91; i++) { a += String.fromCharCode(i); ...