微信公众平台开发【二】 消息的接收和响应

把官方文档中的消息封装成类:



处理微信请求,响应一条文本消息返回微信

package com.zsh.service;

import java.util.Date;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import com.zsh.entity.message.respond.TextMessage;
import com.zsh.util.MessageUtil;

/**
 * 核心业务类
 * 
 * @author Administrator
 * 
 */
public class CoreService {
	/**
	 * 处理微信发来的请求
	 * 
	 * @param request
	 * @return
	 */
	public static String processRequest(HttpServletRequest request) {
		// 返回的文本消息内容
		String respMessage = null;
		try {
			// 默认返回的文本消息内容
			String respContent = "请求处理异常,亲,请稍后再尝试";
			// 解析xml
			Map<String, String> requestMap = MessageUtil.parseXml(request);
			// 获得数据
			String fromUserName = requestMap.get("FromUserName");// 发送方账户
			String toUserName = requestMap.get("ToUserName");// 接收方账户(公众账户)
			String msgType = requestMap.get("MsgType");// 消息类型

			// 回复文本消息
			TextMessage textMessage = new TextMessage();
			textMessage.setToUserName(fromUserName);
			textMessage.setFromUserName(toUserName);
			textMessage.setCreateTime(new Date().getTime());
			textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
			textMessage.setFuncFlag(0);

			// 文本消息
			if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {
				String content = requestMap.get("Content");// 消息内容
				System.out.println(content);
				if (content.equals("?")||content.equals("?")) {
					StringBuffer buffer = new StringBuffer();
					buffer.append("您好,我正在测试:").append("\n\n");
					buffer.append("1  第一行").append("\n");
					buffer.append("2  第二行").append("\n");
					buffer.append("3  第三行").append("\n");
					buffer.append("3 <a href=\"http://www.baidu.com\">百度</a>").append("\n");
					buffer.append("回复“?”显示此菜单");
					respContent = buffer.toString();
				}else {
					respContent = "您发送的是文本消息!";
				}
				
			}
			// 图片消息
			else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)) {
				respContent = "您发送的是图片消息!";
			}
			// 地理消息
			else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LOCATION)) {
				respContent = "您发送的是地理消息  !";
			} 
			// 音频消息  
            else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)) {  
                respContent = "您发送的是音频消息!";  
            }  
			// 链接消息
			else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LINK)) {
				respContent = "您发送的是链接消息 !";
			}
			// 事件推送
			else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) {
				// 事件类型
				String eventType = requestMap.get("Event");
				// 订阅
				if (eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) {
					respContent = "谢谢您的关注!";
				}
				// 取消订阅
				else if (eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)) {
					respContent = "期待您的下次关注!";
				}
				// 自定义菜单点击事件
				else if (eventType.equals(MessageUtil.EVENT_TYPE_CLICK)) {
					respContent = "你发送的是自定义菜单点击事件!";
				}
			}
            //设置消息内容
            textMessage.setContent(respContent);
            //转化为xml
            respMessage=MessageUtil.textMessageToXml(textMessage);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return respMessage;
	}
}



servlet 的doPost调用上面的业务方法:

        /**
	 * 处理微信服务器发来的消息
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//设置编码
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		
		//处理请求
		String respMessage=CoreService.processRequest(request);
		//响应
		PrintWriter out = response.getWriter();
		out.print(respMessage);
		
		out.close();
		out=null;
	}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值