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

     在之前的一篇博客中我们已经知道成为微信公众平台的开发者啦,总算迈出了第一步了,现在理解下微信的发送数据和接收数据吧,看了开发者文档之后,我们知道客户端与微信服务器的数据交互与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文件中,然后返回给客户端,就是这么的简单。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值