微信企业号开发六:回调模式之消息回复
2015-12-16 14:03
721 查看
回调模式的消息回复,可以在Post中使用输出流直接输出,输出的内容为加密的XML格式
![](http://img.blog.csdn.net/20151216115457466?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
也就是说只要会了消息加密就可以完成消息回复,微信工具类还是去http://qydev.weixin.qq.com/wiki/index.php?title=加解密库下载与返回码 官网下载,使用WXBizMsgCrypt类中的EncryptMsg进行加密
---------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------
解密正文,得到的正文为XML形式
---------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------
加密正文,对XML形式的正文进行加密
String sRespData=MessageUtil.messageToXml(txtMsg);
String sEncryptMsg = wxcpt.EncryptMsg(sRespData, time, sReqNonce);
-------------------------------------------------实体类--------------------------------------------------------
也就是说只要会了消息加密就可以完成消息回复,微信工具类还是去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;//回调配置的TOKEN String 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; } }
相关文章推荐
- 微信移动支付V3开发详细教程服务端采用.net mvc webapi(C#)
- 防微信底部标题栏
- 透彻分析微信公众平台三大矛盾
- 玩转AWS CloudWatch微信告警
- 玩转AWS CloudWatch微信告警
- 微信朋友圈技术之道:三个人的后台团队与每日十亿的发布量
- 微信企业号开发五:回调模式
- Android 微信抢红包插件
- 微信企业号开发四:文件上传到微信服务器
- 微信企业号开发三:主动调用模式之发送news消息
- 微信企业号开发二:TOKEN缓存处理
- Android仿微信图片上传,可以选择多张图片,缩放预览,拍照上传等
- 可以展开折叠和触摸移动的浮动层 可以用于微信页面
- DIY 微信HD版共享
- Android仿微信界面--使用FragmentPagerAdapter,viewpager实现(慕课网笔记)
- 微信:JSSDK开发
- 微信接入调试方案
- android 微信 sdk api调用不成功解决方案 api.sendReq(localReq );
- 微信开发之入门教程
- 微信开发之入门教程