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

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

微信企业号开发六:回调模式之消息回复_第1张图片

也就是说只要会了消息加密就可以完成消息回复,微信工具类还是去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())){
	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("");
					} 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;
	}
}





你可能感兴趣的:(移动开发,微信企业号,微信)