走进微信的神奇世界--数据的发送和接收
2015-04-16 22:37
239 查看
在之前的一篇博客中我们已经知道成为微信公众平台的开发者啦,总算迈出了第一步了,现在理解下微信的发送数据和接收数据吧,看了开发者文档之后,我们知道客户端与微信服务器的数据交互与xml格式传递的,懂了这个原理之后就好办了,由于不同类型的数据的节点名等等已经是被规范好的了,我们要做的是在好通过代码创建xml和发送xml文件给服务器,好了,数据发送过去之后再写xml文件的形式显示回来到客户端,当然,里面涉及到了协议的操作以及参数的传递方式等等,附上代码如下:
package com.yc.biz;
import java.io.InputStream;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import com.yc.test.TuLingTest;
import com.yc.utils.CreateXmlUtil;
public class PushManage {
/**
* 微信所有的入口
*/
private CreateXmlUtil createXmlUtil = new CreateXmlUtil();// 创建回复信息帮助类
public String PushManageXml(InputStream is) {
String returnStr = "";
String toName = "";
String FromName = "";
String type = "";
String content = "";// 回送文本信息内容
String con = "";// 接收文本信息内容
String picUrl = "";// 回送图片链接
String pic = "";// 接收图片链接
String mediaId = "";// 图片消息媒体id
String event = "";// 自定义按钮事件请求
String eKey = "";// 事件请求key值
String format = "";// 音乐的语音格式
String location_X = "";// 地理位置维度
String location_Y = "";// 地理位置经度
String scale = "";// 地图缩放大小
String label = "";// 地理位置信息
String url = "";// 图文信息回复的图片地址
String ss = "";// 图文信息回复的文章地址
String linkTitle = "";// 链接标题
String linkDescription = "";// 链接描述
String linkUrl = "";// 链接地址
String Recognition = ""; // 语音识别结果
try {
SAXBuilder sax = new SAXBuilder();// 注意,用的是jdom解析
Document doc = sax.build(is);
// 获得文件的根元素
Element root = doc.getRootElement();
// 获得根元素的第一级子节点
List list = root.getChildren();
for (int j = 0; j < list.size(); j++) {
// 获得结点
Element first = (Element) list.get(j);
if (first.getName().equals("ToUserName")) {
toName = first.getValue().trim();
} else if (first.getName().equals("FromUserName")) {
FromName = first.getValue().trim();
} else if (first.getName().equals("MsgType")) {
type = first.getValue().trim();
} else if (first.getName().equals("Content")) {
con = first.getValue().trim();
} else if (first.getName().equals("PicUrl")) {
pic = first.getValue().trim();
} else if (first.getName().equals("MediaId")) {
mediaId = first.getValue().trim();
} else if (first.getName().equals("Event")) {
event = first.getValue().trim();
} else if (first.getName().equals("EventKey")) {
eKey = first.getValue().trim();
} else if (first.getName().equals("Format")) {
format = first.getValue().trim();
} else if (first.getName().equals("Location_X")) {
location_X = first.getValue().trim();
} else if (first.getName().equals("Location_Y")) {
location_Y = first.getValue().trim();
} else if (first.getName().equals("Scale")) {
scale = first.getValue().trim();
} else if (first.getName().equals("Label")) {
label = first.getValue().trim();
} else if (first.getName().equals("Title")) {
linkTitle = first.getValue().trim();
} else if (first.getName().equals("Description")) {
linkDescription = first.getValue().trim();
} else if (first.getName().equals("Url")) {
linkUrl = first.getValue().trim();
} else if (first.getName().equals("Recognition")) {
Recognition = first.getValue().trim();
}
}
} catch (Exception e) {
e.printStackTrace();
}
if (type.equals("event")) {// 关注我
if (event.equals("subscribe")) {
// 表示单纯的关注
if (eKey == null || "".equals(eKey)) {
String title="欢迎进入学习平台";
String Description="感谢你的关注,我会努力完善的";
String PicUrl="https://mmbiz.qlogo.cn/mmbiz/nP1RK1R7HNhLqmQCnMYTiaYiaS515byPFMbDSz7oE32fOGLTKsbTwjLjibUU9ybTZxVYMM36DrN5qic63AvwcCFDhQ/0";
String Title1="这是您学习旅途上的加油站~~~ \n 回复“帮助”即可获得该平台功能";
String Description1="";
String PicUrl1="https://mmbiz.qlogo.cn/mmbiz/nP1RK1R7HNhLqmQCnMYTiaYiaS515byPFM1ZJglMVt7Asl9pYC75icsH6TIgNQ6ibx0GV7DAkq4zdpm0fo4Dgu3ohQ/0";
returnStr = createXmlUtil.getBackXMLImageContent(toName,
FromName, "2", title,Description , PicUrl,
"", Title1, Description1, PicUrl1, ""); // 普通的文本信息的回复
}
}
} else if (type.equals("text")) {// 文本信息
if (con.equals("极客学院")) {
content="点击进入极客学院:<a href=\"http://www.imooc.com/course/list\">极客学院</a> <a href=\"http://www.imooc.com/course/list\">www.imooc.com/course/list</a>";
returnStr = createXmlUtil.getBackXMLTypeText(toName, FromName,
content); // 普通的文本信息的回复
}else if(con.equals("帮助")){
returnStr = createXmlUtil.getBackXMLHelpImageContent(toName, FromName, "7"); //普通的文本信息的回复
}else if(con.indexOf("jy")>=0){
content="您的建议小冯已经收到,我会好好改进的,谢谢您~~~";
returnStr = createXmlUtil.getBackXMLTypeText(toName, FromName,
content);
}else if(con.equals("悄悄话")){
content="功能紧张制作中,请耐心等待~~~";
returnStr = createXmlUtil.getBackXMLTypeText(toName, FromName,
content);
}
else{
content=TuLingTest.TuLin(con).toString();
returnStr = createXmlUtil.getBackXMLTypeText(toName, FromName,
content); // 普通的文本信息的回复
}
// content="您发送的是: \n"+con;
} else if (type.equals("image")) {
returnStr = createXmlUtil.getBackXMLTypeImg(toName, FromName,
mediaId);
}
return returnStr;
}
}
上述的帮助类就是你要发送什么内容到服务器,以及返回数据的处理,返回数据处理的代码如下:
import java.text.SimpleDateFormat;
import java.util.Date;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.XMLOutputter;
public class CreateXmlUtil {
/**
* 文本信息回复
*
* @param toName
* @param FromName
* @param content
* @return
*/
public String getBackXMLTypeText(String toName, String FromName,
String content) {
String returnStr = "";
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
String times = format.format(new Date());
Element rootXML = new Element("xml");
rootXML.addContent(new Element("ToUserName").setText(FromName));
rootXML.addContent(new Element("FromUserName").setText(toName));
rootXML.addContent(new Element("CreateTime").setText(times));
rootXML.addContent(new Element("MsgType").setText("text"));
rootXML.addContent(new Element("Content").setText(content));
Document doc = new Document(rootXML);
XMLOutputter XMLOut = new XMLOutputter();
returnStr = XMLOut.outputString(doc);
return returnStr;
}
/**
* 图文信息回复
*
* @param toName
* @param FromName
* @param content
* :
* @return
*/
public String getBackXMLImageContent (String toName,String FromName,
String ArticleCount,String Title,String Description,String PicUrl,
String Url,String Title1,String Description1,String PicUrl1,String Url1) {
String returnStr = "";
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
String times = format.format(new Date());
Element rootXML = new Element("xml");
Element Articles = new Element("Articles");
Element item = new Element("item");
Element item2 = new Element("item");
rootXML.addContent(new Element("ToUserName").setText(FromName));
rootXML.addContent(new Element("FromUserName").setText(toName));
rootXML.addContent(new Element("CreateTime").setText(times));
rootXML.addContent(new Element("MsgType").setText("news"));
rootXML.addContent(new Element("ArticleCount").setText(ArticleCount));
item.addContent(new Element("Title").setText(Title));
item.addContent(new Element("Description").setText(Description));
item.addContent(new Element("PicUrl").setText(PicUrl));
item.addContent(new Element("Url").setText(Url));
item2.addContent(new Element("Title").setText(Title1));
item2.addContent(new Element("Description").setText(Description1));
item2.addContent(new Element("PicUrl").setText(PicUrl1));
item2.addContent(new Element("Url").setText(Url1));
Articles.addContent(item);
Articles.addContent(item2);
rootXML.addContent(Articles);
Document doc = new Document(rootXML);
XMLOutputter XMLOut = new XMLOutputter();
returnStr = XMLOut.outputString(doc);
return returnStr;
}
/**
*
* @return
*/
public String getBackXMLTypeImg(String toName, String FromName,
return returnStr;
}
}
由于不同类型的操作的原理基本一样,所以在此仅仅列举回复文本和图文的2个方法,仔细观察文档,就能知道其原理
如图文的返回
通过文档和代码我们不难得出它的原理就是在doPost()中返回数据,根据文档的节点创建对应的节点,添加到创建的xml文件中,然后返回给客户端,就是这么的简单。
package com.yc.biz;
import java.io.InputStream;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import com.yc.test.TuLingTest;
import com.yc.utils.CreateXmlUtil;
public class PushManage {
/**
* 微信所有的入口
*/
private CreateXmlUtil createXmlUtil = new CreateXmlUtil();// 创建回复信息帮助类
public String PushManageXml(InputStream is) {
String returnStr = "";
String toName = "";
String FromName = "";
String type = "";
String content = "";// 回送文本信息内容
String con = "";// 接收文本信息内容
String picUrl = "";// 回送图片链接
String pic = "";// 接收图片链接
String mediaId = "";// 图片消息媒体id
String event = "";// 自定义按钮事件请求
String eKey = "";// 事件请求key值
String format = "";// 音乐的语音格式
String location_X = "";// 地理位置维度
String location_Y = "";// 地理位置经度
String scale = "";// 地图缩放大小
String label = "";// 地理位置信息
String url = "";// 图文信息回复的图片地址
String ss = "";// 图文信息回复的文章地址
String linkTitle = "";// 链接标题
String linkDescription = "";// 链接描述
String linkUrl = "";// 链接地址
String Recognition = ""; // 语音识别结果
try {
SAXBuilder sax = new SAXBuilder();// 注意,用的是jdom解析
Document doc = sax.build(is);
// 获得文件的根元素
Element root = doc.getRootElement();
// 获得根元素的第一级子节点
List list = root.getChildren();
for (int j = 0; j < list.size(); j++) {
// 获得结点
Element first = (Element) list.get(j);
if (first.getName().equals("ToUserName")) {
toName = first.getValue().trim();
} else if (first.getName().equals("FromUserName")) {
FromName = first.getValue().trim();
} else if (first.getName().equals("MsgType")) {
type = first.getValue().trim();
} else if (first.getName().equals("Content")) {
con = first.getValue().trim();
} else if (first.getName().equals("PicUrl")) {
pic = first.getValue().trim();
} else if (first.getName().equals("MediaId")) {
mediaId = first.getValue().trim();
} else if (first.getName().equals("Event")) {
event = first.getValue().trim();
} else if (first.getName().equals("EventKey")) {
eKey = first.getValue().trim();
} else if (first.getName().equals("Format")) {
format = first.getValue().trim();
} else if (first.getName().equals("Location_X")) {
location_X = first.getValue().trim();
} else if (first.getName().equals("Location_Y")) {
location_Y = first.getValue().trim();
} else if (first.getName().equals("Scale")) {
scale = first.getValue().trim();
} else if (first.getName().equals("Label")) {
label = first.getValue().trim();
} else if (first.getName().equals("Title")) {
linkTitle = first.getValue().trim();
} else if (first.getName().equals("Description")) {
linkDescription = first.getValue().trim();
} else if (first.getName().equals("Url")) {
linkUrl = first.getValue().trim();
} else if (first.getName().equals("Recognition")) {
Recognition = first.getValue().trim();
}
}
} catch (Exception e) {
e.printStackTrace();
}
if (type.equals("event")) {// 关注我
if (event.equals("subscribe")) {
// 表示单纯的关注
if (eKey == null || "".equals(eKey)) {
String title="欢迎进入学习平台";
String Description="感谢你的关注,我会努力完善的";
String PicUrl="https://mmbiz.qlogo.cn/mmbiz/nP1RK1R7HNhLqmQCnMYTiaYiaS515byPFMbDSz7oE32fOGLTKsbTwjLjibUU9ybTZxVYMM36DrN5qic63AvwcCFDhQ/0";
String Title1="这是您学习旅途上的加油站~~~ \n 回复“帮助”即可获得该平台功能";
String Description1="";
String PicUrl1="https://mmbiz.qlogo.cn/mmbiz/nP1RK1R7HNhLqmQCnMYTiaYiaS515byPFM1ZJglMVt7Asl9pYC75icsH6TIgNQ6ibx0GV7DAkq4zdpm0fo4Dgu3ohQ/0";
returnStr = createXmlUtil.getBackXMLImageContent(toName,
FromName, "2", title,Description , PicUrl,
"", Title1, Description1, PicUrl1, ""); // 普通的文本信息的回复
}
}
} else if (type.equals("text")) {// 文本信息
if (con.equals("极客学院")) {
content="点击进入极客学院:<a href=\"http://www.imooc.com/course/list\">极客学院</a> <a href=\"http://www.imooc.com/course/list\">www.imooc.com/course/list</a>";
returnStr = createXmlUtil.getBackXMLTypeText(toName, FromName,
content); // 普通的文本信息的回复
}else if(con.equals("帮助")){
returnStr = createXmlUtil.getBackXMLHelpImageContent(toName, FromName, "7"); //普通的文本信息的回复
}else if(con.indexOf("jy")>=0){
content="您的建议小冯已经收到,我会好好改进的,谢谢您~~~";
returnStr = createXmlUtil.getBackXMLTypeText(toName, FromName,
content);
}else if(con.equals("悄悄话")){
content="功能紧张制作中,请耐心等待~~~";
returnStr = createXmlUtil.getBackXMLTypeText(toName, FromName,
content);
}
else{
content=TuLingTest.TuLin(con).toString();
returnStr = createXmlUtil.getBackXMLTypeText(toName, FromName,
content); // 普通的文本信息的回复
}
// content="您发送的是: \n"+con;
} else if (type.equals("image")) {
returnStr = createXmlUtil.getBackXMLTypeImg(toName, FromName,
mediaId);
}
return returnStr;
}
}
上述的帮助类就是你要发送什么内容到服务器,以及返回数据的处理,返回数据处理的代码如下:
import java.text.SimpleDateFormat;
import java.util.Date;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.XMLOutputter;
public class CreateXmlUtil {
/**
* 文本信息回复
*
* @param toName
* @param FromName
* @param content
* @return
*/
public String getBackXMLTypeText(String toName, String FromName,
String content) {
String returnStr = "";
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
String times = format.format(new Date());
Element rootXML = new Element("xml");
rootXML.addContent(new Element("ToUserName").setText(FromName));
rootXML.addContent(new Element("FromUserName").setText(toName));
rootXML.addContent(new Element("CreateTime").setText(times));
rootXML.addContent(new Element("MsgType").setText("text"));
rootXML.addContent(new Element("Content").setText(content));
Document doc = new Document(rootXML);
XMLOutputter XMLOut = new XMLOutputter();
returnStr = XMLOut.outputString(doc);
return returnStr;
}
/**
* 图文信息回复
*
* @param toName
* @param FromName
* @param content
* :
* @return
*/
public String getBackXMLImageContent (String toName,String FromName,
String ArticleCount,String Title,String Description,String PicUrl,
String Url,String Title1,String Description1,String PicUrl1,String Url1) {
String returnStr = "";
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
String times = format.format(new Date());
Element rootXML = new Element("xml");
Element Articles = new Element("Articles");
Element item = new Element("item");
Element item2 = new Element("item");
rootXML.addContent(new Element("ToUserName").setText(FromName));
rootXML.addContent(new Element("FromUserName").setText(toName));
rootXML.addContent(new Element("CreateTime").setText(times));
rootXML.addContent(new Element("MsgType").setText("news"));
rootXML.addContent(new Element("ArticleCount").setText(ArticleCount));
item.addContent(new Element("Title").setText(Title));
item.addContent(new Element("Description").setText(Description));
item.addContent(new Element("PicUrl").setText(PicUrl));
item.addContent(new Element("Url").setText(Url));
item2.addContent(new Element("Title").setText(Title1));
item2.addContent(new Element("Description").setText(Description1));
item2.addContent(new Element("PicUrl").setText(PicUrl1));
item2.addContent(new Element("Url").setText(Url1));
Articles.addContent(item);
Articles.addContent(item2);
rootXML.addContent(Articles);
Document doc = new Document(rootXML);
XMLOutputter XMLOut = new XMLOutputter();
returnStr = XMLOut.outputString(doc);
return returnStr;
}
/**
*
* @return
*/
public String getBackXMLTypeImg(String toName, String FromName,
return returnStr;
}
}
由于不同类型的操作的原理基本一样,所以在此仅仅列举回复文本和图文的2个方法,仔细观察文档,就能知道其原理
如图文的返回
通过文档和代码我们不难得出它的原理就是在doPost()中返回数据,根据文档的节点创建对应的节点,添加到创建的xml文件中,然后返回给客户端,就是这么的简单。
相关文章推荐
- 微信硬件jsapi接口发送和接收设备数据(6)
- 微信通过openID发送消息/后台post、get提交并接收数据 C# .NET 配置404,500等错误信息 连接字符串
- 微信通过openID发送消息/后台post、get提交并接收数据
- linux多线程下打开串口发送和接收数据
- ios开发之发送UDP广播并接收数据
- QTcpSocket的连续发送数据和连续接收数据
- java实现http协议发送和接收数据
- PHP主动发送与被动接收xml数据 4000
- Socket 接收和发送数据的深刻理解.
- indy 10.5.7的数据发送接收的用法 .
- DBus glib 各数据类型接收与发送详解—C语言(2)
- C#使用UdpClient发送和接收UDP数据示例 16进制与字符串互转
- 手把手教你Android手机与BLE终端通信--连接,发送和接收数据
- 微信公共平台开发接收与发送信息类型
- PHP主动发送与被动接收xml数据蹲
- 解决网络不通数据只有发送不接收的问题
- Golang 发送和接收数据公共类
- Apache Beam Fn API如何接收和发送数据