java接发加密文本消息

官方指南

https://mp.weixin.qq.com/wiki/1/5dc395cdeb98e9d23a8541cf0bab38ad.html

下载示例代码

https://mp.weixin.qq.com/wiki/static/assets/a5a22f38cb60228cb32ab61d9e4c414b.zip

需要里面的文件

 

 

开始之前是建立在服务器接入成功的情况下

微信会把公众号上的信息用post方式提交到设置的url

 

所以我在servlet里doPost处理请求

 

doPost方法

protectedvoid doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setCharacterEncoding("UTF-8");//设置编码

        try {

            //签名串

            String msgSignature = request.getParameter("msg_signature");

            // 时间戳

            String timestamp = request.getParameter("timestamp");

            // 随机数

            String nonce = request.getParameter("nonce");

           

            //接收密文并解密

            WXBizMsgCrypt pc = new WXBizMsgCrypt(token, encodingAesKey, appId);

            String msgData = getMsgData(request); //流数据转成string

            String resultXml = pc.decryptMsg(msgSignature, timestamp, nonce, msgData); //解密

             //dom4jxml数据转成map

            SAXReader saxreader = new SAXReader(); 

            Document doc = saxreader.read(new ByteArrayInputStream(resultXml.getBytes("UTF-8")));

            Map<String, String> map = new HashMap<String, String>();

            Element root = doc.getRootElement();

            @SuppressWarnings("unchecked")

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

            for (Element e : list) {

                map.put(e.getName(), e.getText());

            }

            //加密并发送

            // 对消息进行处理

            String content = map.get("Content");

            // 发送方帐号(一个OpenID

            String fromUserName = map.get("FromUserName");

            // 开发者微信号

            String toUserName = map.get("ToUserName");

            // 消息类型

            String msgType = map.get("MsgType");

            // 默认回复一个"success"

            String responseMessage = "success";

            if ("text".equals(msgType)){//判断文本消息

                TextMessage textMessage = new TextMessage();//实体类

                textMessage.setMsgType("text");

                textMessage.setToUserName(fromUserName);

                textMessage.setFromUserName(toUserName);

                textMessage.setCreateTime(System.currentTimeMillis());

                textMessage.setContent("你才"+content);

                responseMessage = WechatMessageUtil.textMessageToXml(textMessage);//将实体转成xml格式

            }

//加密

            String mingwen = pc.encryptMsg(responseMessage, timestamp, nonce);

            System.out.println("加密后: " + mingwen);

            //返回信息

            PrintWriter out = response.getWriter();

            out.print(mingwen);

            out.flush();

        } catch (Exception e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

 

getMsgData()方法获取数据流转成string

//获取xmlStr

    private String getMsgData(HttpServletRequest reqest) throws Exception {

        ServletInputStream is = reqest.getInputStream();

        BufferedReader br = new BufferedReader(new InputStreamReader(is));

        StringBuffer sb = new StringBuffer();

        String aa;

        while ((aa = br.readLine()) != null) {

           sb.append(aa);

        }

        is.close();

        br.close();

        returnsb.toString();

    }

 

TextMessage实体

publicclass TextMessage {

    /**

     * 开发者微信号

     */

    private String ToUserName;

    /**

     * 发送方帐号(一个OpenID

     */

    private String FromUserName;

    /**

     * 消息创建时间(整型)

     */

    privatelongCreateTime;

    /**

     * 消息类型

     */

    private String MsgType;

    /**

     * 消息id64位整型

     */

    private String MsgId;

    /**

     * 文本消息内容

     */

    private String Content;

   

    public String getContent() {

        returnContent;

    }

   

    publicvoid setContent(String content) {

        Content = content;

    }

    public String getToUserName() {

        returnToUserName;

    }

    publicvoid setToUserName(String toUserName) {

        ToUserName = toUserName;

    }

    public String getFromUserName() {

        returnFromUserName;

    }

    publicvoid setFromUserName(String fromUserName) {

        FromUserName = fromUserName;

    }

    publiclong getCreateTime() {

        returnCreateTime;

    }

    publicvoid setCreateTime(longcreateTime) {

        CreateTime = createTime;

    }

    public String getMsgType() {

        returnMsgType;

    }

    publicvoid setMsgType(String msgType) {

        MsgType = msgType;

    }

    public String getMsgId() {

        returnMsgId;

    }

    publicvoid setMsgId(String msgId) {

        MsgId = msgId;

    }

}

 

WechatMessageUtil工具类

publicclass WechatMessageUtil {

    /**

     * 文本消息转化为xml

     *

     * @param textMessage

     * @return

     */

    publicstatic String textMessageToXml(TextMessage textMessage) {

        XStream xstream = new XStream();

        xstream.alias("xml", textMessage.getClass());

        returnxstream.toXML(textMessage);

    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值