java微信接收并回复文本信息(java微信开发学习笔记2)

这个是在我之前一篇博客基础之上的内容,如果需要请跳转:
http://blog.csdn.net/zxxz5201314/article/details/76585881
微信api地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140453
当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。
这是微信api上写的,就是我们直接写的后台与用户之间数据交互是xml格式的文本。
首先看一下,最简单的文本消息,格式如下:

<xml>
 <ToUserName><![CDATA[toUser]]></ToUserName>
 <FromUserName><![CDATA[fromUser]]></FromUserName>
 <CreateTime>1348831860</CreateTime>
 <MsgType><![CDATA[text]]></MsgType>
 <Content><![CDATA[this is a test]]></Content>
 <MsgId>1234567890123456</MsgId>
 </xml>

具体说明如下:
ToUserName 开发者微信号
FromUserName 发送方帐号(一个OpenID)
CreateTime 消息创建时间 (整型)
MsgType text
Content 文本消息内容
MsgId 消息id,64位整型
代码:
post请求:

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // TODO Auto-generated method stub
    req.setCharacterEncoding("UTF-8");
    resp.setCharacterEncoding("UTF-8");
    PrintWriter writer = resp.getWriter();
    try {
        Map<String, String> map = MessageUtil.xmlToMap(req);
        String toUserName = map.get("ToUserName");
        String fromUserName = map.get("FromUserName");
        String msgType = map.get("MsgType");
        String content = map.get("Content");
        System.out.println(toUserName + fromUserName + msgType + content);
        String text = null;
        if ("text".equals(msgType)) {
            switch (content) {
            case "1":
                text = MessageUtil.replyByKeyWord(toUserName, fromUserName, MessageUtil.Message_Text, "信曾哥,得永生!");
                break;
            case "2":
                text = MessageUtil.replyByKeyWord(toUserName, fromUserName, MessageUtil.Message_Text,"辉哥在休息,有事找曾哥!");
                break;
            default:
                text = MessageUtil.replyByKeyWord(toUserName, fromUserName, MessageUtil.Message_Text,MessageUtil.mainMenu());
                break;
            }
        } else if (MessageUtil.Message_Event.equals(msgType)) {
            if ("subscribe".equals(map.get("Event"))) {
                text = MessageUtil.replyByKeyWord(toUserName, fromUserName, MessageUtil.Message_Text,MessageUtil.mainMenu());
            }
        }
        System.out.println(text);
        writer.print(text);
    } catch (DocumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } finally {
        writer.close();
    }
}

MessageUtil类(xml解析和封装类):

public static String Message_Text = "text";
    public static String Message_News = "news";
    public static String Message_Image = "image";
    public static String Message_Voice = "voice";
    public static String Message_Video = "video";
    public static String Message_ShortVideo = "shortvideo";
    public static String Message_Location = "location";
    public static String Message_Link = "link";
    public static String Message_Event= "event";
    public static String Message_Event_Sub= "subscribe";

    /**
     * xml转map集合
     * @param request
     * @return
     * @throws IOException
     * @throws DocumentException
     */

    public static Map<String, String> xmlToMap(HttpServletRequest request) throws IOException, DocumentException{
        Map<String, String> map = new HashMap<String,String>();

        SAXReader reader = new SAXReader();

        InputStream is = request.getInputStream();

        Document document = reader.read(is);

        Element root = document.getRootElement();

        List<Element> list = root.elements();

        for (Element e:list) {
            map.put(e.getName(), e.getText());
        }
        is.close();
        return map;
    }

    /**
     * 将文本消息转换成xml
     * @param textMessage
     * @return
     */
    public static String textMessageToXml(TextMessage textMessage){
        XStream xStream = new XStream();
        xStream.alias("xml", textMessage.getClass());
        return xStream.toXML(textMessage);
    }

/**
     * 文本回复
     * @param toUserName
     * @param fromUserName
     * @param msgType
     * @param content
     * @return
     */
    public static String replyByKeyWord(String toUserName,String fromUserName,String msgType,String content){
        TextMessage message = new TextMessage();
        message.setFromUserName(toUserName);
        message.setToUserName(fromUserName);
        message.setMsgType(msgType);
        message.setCreateTime(new Date().getTime());
        message.setContent(content);
        return MessageUtil.textMessageToXml(message);
    }
/**
     * 主菜单
     * @return
     */
    public static String mainMenu(){
        StringBuffer sb = new StringBuffer();
        sb.append("欢迎来到zx小调\n\n");
        sb.append("回复1曾哥为你服务!\n");
        sb.append("回复2辉哥为你服务!\n");
        return sb.toString();
    }
}

这里需要一个jar包, xstream-1.3.1.jar,我不知道怎么把资源弄成0积分下载,这是我上传的资源,如果需要就去下载吧,好像要一个积分,网上搜搜就有:
http://download.csdn.net/detail/zxxz5201314/9925080

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值