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. 关于$NOIP2017$的题目讲解

    关于\(NOIP2017\)的题目讲解 1.小凯的疑惑 题目描述: 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法 ...

  2. STM32平台SD卡的FatFS文件系统开发

    STM32平台SD卡的FatFS文件系统开发 系统平台: STM32系列的STM32F103ZE SPI方式与SD卡通信 SD上移植FatFS系统 1 FatFS文件系统 1.1 FatFS简介 Fa ...

  3. 使用java将base64码与图片互转!

    本篇文章主要介绍了java 后台将base64字符串保存为图片的方法,现在分享给大家,也给大家做个参考. import java.io.FileInputStream; import java.io. ...

  4. Adnroid studio 无法 Build APK(s)

    报错 Error:java.nio.file.AccessDeniedException: C:\Program Files\Android\android-sdk-windows\.android\ ...

  5. Oracle子查询之简单子查询

    Oracle 简单子查询 顾名思义,简单子查询是嵌套在 SQL 语句中的另一个SELECT 语句,并且子查询只返回一列数据 1,单行子查询: 子查询 (内查询) 在主查询之前一次执行完成.子查询的结果 ...

  6. 谨慎修改Oracle数据库字符集(UTF8<->ZHS16GBK)

      Preface       Today,I'm gonna say something what is related with the character set in Oracle datab ...

  7. Swift_初始化

    #Swift_初始化 点击查看源码 初始化结构体 //初始化结构体 func testInitStruct() { //结构体 类中默认方法 struct Size { //宽 var width = ...

  8. 苹果内购小结 - iOS

    此篇针对 iOS 支付进行一次小结,很久没碰这块了,有些方法 Apple 官方也进行了优化,故也将随之进行更新. 首先,code 部分将分为两部分,一部分在 appdelegate 中,另一部分单独封 ...

  9. Xdebug 备注

    安装步骤: 查看自己的环境是否已安装 Xdebug ,查看方法:使用phpinfo(),搜索 Xdebug 如果没有 如图: 如果没有:下一步确定你的PHP版本信息: Xdebug下载地址 https ...

  10. C语言的乱七八糟

    Note For C Linux下C编程基础(gcc/gdb/make使用) 一.vi学习 二.初探emacs 三.gcc编译器 3.1 gcc所支持后缀名解释 后缀名 解释 后缀名 解释 .c C原 ...