首页 > 学院 > 开发设计 > 正文

第 6 章 微信开发之各种消息的接收与响应

2019-11-15 00:40:45
字体:
来源:转载
供稿:网友
第 6 章 微信开发之各种消息的接收与响应

一、在哪里接收这些消息

从微信公众平台接口消息指南中可以了解到,当用户向公众帐号发消息时,微信服务器会将消息通过POST方式提交给我们在接口配置信息中填写的URL,而我们就需要在URL所指向的请求处理类CoreServlet的doPost方法中接收消息、处理消息和响应消息。

/**     * 处理微信服务器发来的消息     */    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {                // 微信服务器POST消息时用的是UTF-8编码,在接收时也要用同样的编码,否则中文会乱码;        request.setCharacterEncoding("UTF-8");        //在响应消息(回复消息给用户)时,也将编码方式设置为UTF-8,原理同上;        response.setCharacterEncoding("UTF-8");                // 调用CoreService类的PRocessRequest方法接收、处理消息,并得到处理结果;        String respMessage = CoreService.processRequest(request);                  // 调用response.getWriter().write()方法将消息的处理结果返回给用户        PrintWriter out = response.getWriter();          out.print(respMessage);          out.close();      }

二、怎么接收和响应这些消息

package com.souvc.weixin.service;import java.util.Date;import java.util.Map;import javax.servlet.http.HttpServletRequest;import com.souvc.weixin.message.resp.TextMessage;import com.souvc.weixin.util.MessageUtil;/** *  * @ClassName: CoreService * @Description: 业务核心类 * @author: souvc * @date Jun 15, 2015 4:49:10 PM */public class CoreService {    /**     * 处理微信发来的请求     *      * @param request     * @return     */    public static String processRequest(HttpServletRequest request) {        String respMessage = null;        try {            // 默认返回的文本消息内容            String respContent = "请求处理异常,请稍候尝试!";            // 调用消息工具类MessageUtil解析微信发来的xml格式的消息,解析的结果放在HashMap里;            Map<String, String> requestMap = MessageUtil.parseXml(request);            // 从HashMap中取出消息中的FromUserName,ToUserName,MsgType字段;            // 发送方帐号(open_id)            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)) {                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_LINK)) {                respContent = "您发送的是链接消息!";            }            // 音频消息            else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)) {                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)) {                    // TODO 取消订阅后用户再收不到公众号发送的消息,因此不需要回复消息                }                // 自定义菜单点击事件                else if (eventType.equals(MessageUtil.EVENT_TYPE_CLICK)) {                    // TODO 自定义菜单权没有开放,暂不处理该类消息                }            }            textMessage.setContent(respContent);            // 调用消息工具类MessageUtil将要返回的文本消息对象TextMessage转化成xml格式的字符串;            respMessage = MessageUtil.textMessageToXml(textMessage);        } catch (Exception e) {            e.printStackTrace();        }        return respMessage;    }}

微信服务器发送过来的消息,我们服务器回应响应的消息。

完整的源码: http://yunpan.cn/cQyvhABdhNVR9 访问密码 2336


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表