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 ...
随机推荐
- HDU 1250 Hat's Fibonacci(大数相加)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1250 Hat's Fibonacci Time Limit: 2000/1000 MS (Java/Ot ...
- Docker 三种UI管理平台
docker集中化web管理平台 一.shipyard 1.启动docker,下载镜像 # systemctl restart docker # docker pull alpine # docker ...
- Knowledge Point 20180303 对比编译器、解释器与Javac编译原理
编译器与Javac编译原理 在前文我们知道了Java是一种编译语言和解释语言,它的源代码经过编译器Javac编译为能够被JVM识别的二进制语言,然后JVM将其解释为能够被平台识别的机器语言.那么什么是 ...
- textarea中输入字数的限制
<textarea id="area" name="ss" placeholder="请输入文本内容" rows="10&q ...
- ARC下IBOutlet用weak还是strong
原文来自这里. 今天用Xcode5的时候,发现默认的IBoutlet的属性设置为weak——因为Xcode5建立的工程都是ARC的了.但是当时还有点不明白,因为项目的原因,一直没有正式使用过ARC.于 ...
- 利用binlog2sql闪回丢失数据
today,i'll using the open source tool named "binlog2sql" which is release by danfengch ...
- Linux 运维工程师学习成长路线上要经历哪四个阶段?
之前曾看到一篇新闻,Linux之父建议大家找一份基于Linux和开源环境的工作.今天就来聊一聊我的想法,本人8年Linux运维一线经验,呆过很多互联网公司,从一线运维做到运维架构师一职,也见证了中国运 ...
- 也说java虚拟机
学习java的人如果不了解java虚拟机,那真是白学了. java为什么可以跨平台,就是因为虚拟机的作用,java虚拟机就相当于一个计算机,它有自己的内存结构,当java程序 ...
- linux操作之软件安装(一)
rpm 包安装 RedHat Package Manager的缩写 , linux 的软件包可能存在依赖关系,比如某某依赖某某才能使用. 挂载一个光盘 mount -t auto /dev/cdrom ...
- mysql 优化(索引)
表 collect 字段 id(int 自增),title(varchar),info(text),vtype(int) 表中数据130w: select * from collect whe ...