您的位置:首页 > 移动开发 > 微信开发

走进微信的神奇世界--数据的发送和接收

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文件中,然后返回给客户端,就是这么的简单。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: