微信企业号开发六:回调模式之消息回复
来源:互联网 发布:妃子 侍寝 知乎 编辑:程序博客网 时间: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;}}
- 微信企业号开发六:回调模式之消息回复
- 微信企业号开发2--消息回复
- 微信测试号开发之六 图灵自动回复文本消息
- 微信开发之消息回复
- C#开发微信公众号之消息自动回复
- 微信公众号开发之文本消息自动回复
- 微信企业号开发之开启回调模式
- 【微信开发系列】1. python开发微信公众号消息回复开发者模式
- 【微信公众号开发】自我学习第四章:消息回复之翻译回复
- 【微信公众号开发】自我学习第三章:消息回复之文本回复和图文回复
- 微信企业号开发三:主动调用模式之发送news消息
- 微信开发之自动回复图文消息
- 微信企业号开发之发送消息问题
- 微信企业号开发之接收响应消息
- 微信企业号开发之图文消息
- 微信公众平台<企业号>消息回复和菜单点击推图文消息
- 微信企业号开发:启用回调模式
- 微信企业号开发五:回调模式
- 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
- QGIS算法
- ImageView的scaleType属性
- StringBuffer类型
- 入门——ci _remap的用法
- 微信企业号开发六:回调模式之消息回复
- charles中如何对https抓包
- 一个简单的分布式事务系统的实现(订单系统)
- Android5.0如何预置apk
- Fails to distribute my app: “Your app contains non-public API usage.”
- PullToRefreshListView 应用讲解
- Objective-c语言_实例方法和类方法的区别
- hdfs文件3个副本BLK的查找
- go语言中的接口类型与反射