微信公众号开发之解析xml数据包

在上次开发的基础上(链接在这里:https://www.cnblogs.com/segho/p/11654719.html

我们来对用户发送过来的消息进行解析:

需要用到dom4j.jar,自行百度下载资源 我们将xml文件解析文map键值对,

将其直观的反映在console控制台上

WxService中的parseRequest方法代码如下:

 1 public static Map<String, String> parseRequest(InputStream is) {
 2     Map<String,String> map=new HashMap();
 3     SAXReader reader=new SAXReader();
 4     try {
 5         Document document=reader.read(is);
 6         Element root=document.getRootElement();
 7 //root如下:[email protected] [Element: <xml attributes: []/>]
 8         List<Element> elements=root.elements();
 9      //elements中的内容包括请求道的xml数据包内容
10         for(Element e:elements) {
11             map.put(e.getName(), e.getStringValue());
12         }
13     } catch (DocumentException e) {
14         // TODO Auto-generated catch block
15         e.printStackTrace();
16     }
17     return map;
18 }
19 }
?

解析xml数据包我们需要用到SAXReader这个帮助类,所属包为dom4j.jar

/SAXReader中的read方法可以将文件流读取为Document接口类对象 Document是用于文本的容器,用作挥杆文本组件的模型。 该接口的目标是从非常简单的需求(纯文本字段)扩展到复杂的需求(例如,HTML或XML文档)/

我们通过Element定义一个root来获取document.getRootElement中的xml数据(这是root中有所有xml数据包中的内容) 然后通过list集合获取所有xml元素到elements中 通过变量e来get值来获取所有值并将name属性和value属性放入map

由文件流到map对象历程如下:is被SAXReader读取,获得Document对象, 通过Document中document.getRootElementu获取xml数据Element对象element 通过List集合返回文档所有属性对象为elements。 通过便利elements中的属性

weixinServlet代码如下:

 1 package servlet;
 2 ?
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 import java.util.Map;
 6 ?
 7 import javax.servlet.ServletException;
 8 import javax.servlet.ServletInputStream;
 9 import javax.servlet.ServletOutputStream;
10 import javax.servlet.annotation.WebServlet;
11 import javax.servlet.http.HttpServlet;
12 import javax.servlet.http.HttpServletRequest;
13 import javax.servlet.http.HttpServletResponse;
14 ?
15 import service.WxService;
16 ?
17 /**
18  * Servlet implementation class weixinServlet
19  */
20 @WebServlet("/wx")
21 public class weixinServlet extends HttpServlet {
22     private static final long serialVersionUID = 1L;
23     public weixinServlet() {
24         // TODO Auto-generated constructor stub
25     }
26 ?
27     /**
28      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
29      */
30     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
31     String signature=request.getParameter("signature");
32     String timestamp=request.getParameter("timestamp");
33     String nonce=request.getParameter("nonce");
34     String echostr=request.getParameter("echostr");
35
36     if(WxService.check(timestamp,nonce,signature)) {
37         System.out.println("connect success");
38         PrintWriter out=response.getWriter();
39         out.print(echostr);
40         out.flush();
41         out.close();
42         }
43     else
44     {
45         System.out.println("connect fail");
46     }
47     }
48     /**
49      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
50      */
51     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
52    Map<String,String>requestMap=WxService.parseRequest(request.getInputStream());
53     System.out.println(requestMap);
54     }
55 }

本人也是初次进行微信的java开发,分享一些我正在看的资料希望能帮到想要学习微信开发的小伙伴们

罗召勇java开发:https://www.bilibili.com/video/av35042298

微信开发帮助文档:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html

微信公众号测试号申请入口:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

ps:所有文章用于个人学习,仅代表个人理解。

原文地址:https://www.cnblogs.com/segho/p/11669798.html

时间: 2024-10-19 23:49:33

微信公众号开发之解析xml数据包的相关文章

微信公众号支付中出现XML数据异常的问题

注意:此处是xml数据异常,不是格式异常. 层层查找后发现WxpayAPI_php_v3/lib/WxPay.Api.php中notify方法中 $xml = $GLOBALS['HTTP_RAW_POST_DATA']; 此处$xml无法取得值,我改成 $xml = file_get_contents('php://input'); 成功解决问题.

利用OpenShift托管Node.js Web服务进行微信公众号开发

最近写了一个微信的翻译机器人.用户只要关注该微信号,发送英文的消息,就能收到中文翻译的回复.后台是用Node.js写的,托管在OpenShift的Paas平台上.翻译过程实际上是调用微软的Bing translation API做的,代码中用到了alexu84的bing-translate和JacksonTian的wechat这两个npm模块.下面把做的过程详细说一下. 1. 微信公众号开发 首先是要到https://mp.weixin.qq.com 申请一个公众号,并申请成为开发者.目前个人只

C#微信公众号开发系列教程三(消息体签名及加解密)

  C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南)    距离上一篇博文已经半个月了,本来打算每两天更新一次的,但可怜苦逼码农无日无夜的加班.第一篇博文发表后,博文视点的编辑就找到我,问我想不想出版这个系列,我当时瞬间就想到了王大锤的独白,想想真的是有点小激动,后面按照那边的要求,提交了申请书,也提交了目录,可惜文笔不行,再加上最近太忙,样稿一直没有给他,感觉挺愧疚了.真心希望能帮一下迷茫的

C#微信公众号开发系列教程六(被动回复与上传下载多媒体文件)

原文:C#微信公众号开发系列教程六(被动回复与上传下载多媒体文件) 微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C#微信公众号开发系列教程四(接收普通消息) C#微信公众号开发系列教程五(接收事件推送与消息排重) C#微信公众号开发系列教程六(被动回复与上传下载多媒体文件) 第四,第五章已经讲了怎么处理用户发送的消息,本章就来讲讲怎么响应用户的

.NET微信公众号开发-4.0公众号消息处理

一.前言 微信公众平台的消息处理还是比较完善的,有最基本的文本消息,到图文消息,到图片消息,语音消息,视频消息,音乐消息其基本原理都是一样的,只不过所post的xml数据有所差别,在处理消息之前,我们要认真阅读,官方给我们的文档:http://mp.weixin.qq.com/wiki/14/89b871b5466b19b3efa4ada8e577d45e.html.首先我们从最基本的文本消息处理开始. <xml> <ToUserName><![CDATA[toUser]]&

Java微信公众号开发

微信公众平台是腾讯为了让用户申请和管理微信公众账号而推出的一个web平台.微信公众账号的种类可以分为3种,并且一旦选定不可更改.按照功能的限制从小到大依次为:订阅号.服务号.企业号.个人只能注册订阅号.注册地址:https://mp.weixin.qq.com/. 开发环境的准备 微信公众号 外网映射工具(开发调试) 与微信的对接的URL应该满足以下的条件: 在公网上能够访问 只支持80端口 映射工具有很多,例如花生壳,ngrok可以将内网映射到公网上面,这样就可以使用公网访问本机的网络服务.下

微信公众号开发笔记1(nodejs开发的)

本篇记录了微信公众号开发的一些笔记 一.微信服务器与我们服务器的交流 微信开发者拥有自己的服务器,在我们服务器上可以与微信服务器进行交流.既然可以交流,那就必定需要前提条件(微信认证),也就是说,只有自己的服务器与微信服务器进行认证通过后,才能与他交流.如何进行认证? 1. 接口认证 接口的认证是token验证,微信服务器会发送一个get请求给我们在公众号配置的接口,如http://xxxx/weixin/api ,这个请求带了如下参数 然后,微信规定我们 1)将token.timestamp.

微信公众号开发纪要(2)-微信公众号接入

当搭建好微信公众号开发环境后,先要和微信公众号建立联系.从本质上来说,微信公众号开发就是如何让自己的服务器与微信服务器进行交互的一个过程. 微信服务器就相当于一个转发服务器,终端(手机.Pad等)发起请求至微信服务器,微信服务器然后将请求转发给我们的应用服务器.应用服务器处理完毕后,将响应数据回发给微信服务器,微信服务器再将具体响应信息回复到微信App终端. 通信协议为:HTTP 数据传输格式为:XML 具体的流程如下图所示: 来一张更加直观的图吧: 我们需要做的事情,就是对微信服务器转发的HT

微信公众号开发--接入

微信公众号开发 微信开发者工具:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 需要绑定开发者账号:微信公众平台--开发者工具--web开发者工具--绑定开发者微信号 微信公众平台接口调试工具:https://mp.weixin.qq.com/debug/ 接口调试需要使用"access_token",access_token的获取需要从在基本设置中的url访问获取,其他终端基本无法获取 1