微信企业号开发六:回调模式之消息回复

来源:互联网 发布:妃子 侍寝 知乎 编辑:程序博客网 时间:2024/05/22 10:28

回调模式的消息回复,可以在Post中使用输出流直接输出,输出的内容为加密的XML格式


也就是说只要会了消息加密就可以完成消息回复,微信工具类还是去http://qydev.weixin.qq.com/wiki/index.php?title=加解密库下载与返回码  官网下载,使用WXBizMsgCrypt类中的EncryptMsg进行加密

---------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------

解密正文,得到的正文为XML形式

// 微信加密签名String sReqMsgSig = request.getParameter("msg_signature");// 时间戳String sReqTimeStamp = request.getParameter("timestamp");// 随机数String sReqNonce = request.getParameter("nonce");String sToken = MessageUtil.RESP_MESSAGE_TOKEN;//回调配置的TOKENString sCorpID = MessageUtil.RESP_MESSAGE_CORPID;//回调提供的sCorpID//使用输入流获得正文ServletInputStream in = request.getInputStream();BufferedReader reader =new BufferedReader(new InputStreamReader(in));String sReqData="";String itemStr="";//作为输出字符串的临时串,用于判断是否读取完毕while(null!=(itemStr=reader.readLine())){<span style="white-space:pre"></span>sReqData+=itemStr;}String sEncodingAESKey = MessageUtil.RESP_MESSAGE_ENCODINGAESKEY;//回调配置的AESKey//对消息进行处理获得明文WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(sToken, sEncodingAESKey, sCorpID);String sMsg = wxcpt.DecryptMsg(sReqMsgSig, sReqTimeStamp, sReqNonce, sReqData);//输出解密后的文件//System.out.println("after decrypt msg: " + sMsg);

---------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------

加密正文,对XML形式的正文进行加密

String sRespData=MessageUtil.messageToXml(txtMsg);
String sEncryptMsg = wxcpt.EncryptMsg(sRespData, time, sReqNonce);


/** * 扩展xstream使其支持CDATA */private static XStream xstream = new XStream(new XppDriver() {public HierarchicalStreamWriter createWriter(Writer out) {return new PrettyPrintWriter(out) {// 对所有xml节点的转换都增加CDATA标记boolean cdata = true;@SuppressWarnings("unchecked")public void startNode(String name, Class clazz) {super.startNode(name, clazz);}protected void writeText(QuickWriter writer, String text) {if (cdata) {writer.write("<![CDATA[");writer.write(text);writer.write("]]>");} else {writer.write(text);}}};}});/** * 文本消息对象转换成xml *  * @param textMessage 文本消息对象 * @return xml */public static String messageToXml(TextMessage textMessage) {xstream.alias("xml", textMessage.getClass());return xstream.toXML(textMessage);}

-------------------------------------------------实体类--------------------------------------------------------

package com.haiyisoft.entity.wx.resp;/** * 文本消息 */public class TextMessage extends RespBaseMessage {// 回复的消息内容,长度不超过2048字节,否则微信服务器会放弃响应private String Content;public String getContent() {return Content;}public void setContent(String content) {Content = content;}}

package com.haiyisoft.entity.wx.resp;/** * 消息基类 */public class RespBaseMessage {// 接收方帐号(收到的OpenID)private String ToUserName;// 开发者微信号private String FromUserName;// 消息创建时间 (整型)private long CreateTime;// 消息类型private String MsgType;public String getToUserName() {return ToUserName;}public void setToUserName(String toUserName) {ToUserName = toUserName;}public String getFromUserName() {return FromUserName;}public void setFromUserName(String fromUserName) {FromUserName = fromUserName;}public long getCreateTime() {return CreateTime;}public void setCreateTime(long createTime) {CreateTime = createTime;}public String getMsgType() {return MsgType;}public void setMsgType(String msgType) {MsgType = msgType;}}





0 0
原创粉丝点击