资讯专栏INFORMATION COLUMN

java版微信公众号开发(三):自动回复功能实现

Cciradih / 1960人阅读

摘要:微信公众平台服务器配置通过后,就能进行下面的开发啦首先可以查看官方的说明文档普通消息的类型分为种文本消息图片消息语音消息视频消息小视频消息地理位置消息链接消息下面介绍实现文本的自动回复文本消息的结构是参数包含根据开发文档直接上手实体类

微信公众平台服务器配置通过后,就能进行下面的开发啦~~
首先可以查看官方的说明文档:https://mp.weixin.qq.com/wiki...

普通消息的类型分为7种:

文本消息

图片消息

语音消息

视频消息

小视频消息

地理位置消息

链接消息

下面介绍实现文本的自动回复:

文本消息的XML结构是:

  
    < ![CDATA[toUser] ]>  
    < ![CDATA[fromUser] ]>  
    1348831860  
    < ![CDATA[text] ]>  
    < ![CDATA[this is a test] ]>  
    1234567890123456  

参数包含:

根据开发文档直接上手--->_>

实体类的定义:
定义一个BaseMessage,消息基类,封装通用属性:

public class BaseMessage {
    // 开发者微信号  
    private String ToUserName;  
    // 发送方帐号(一个OpenID)  
    private String FromUserName;  
    // 消息创建时间 (整型)  
    private long CreateTime;  
    // 消息类型(text/image/location/link)  
    private String MsgType;  
    // 消息id,64位整型  
    private long MsgId;
    /**
     * 位0x0001被标志时,星标刚收到的消息
     */
    private int FuncFlag;
    
    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 l) {
        CreateTime = l;
    }
    public String getMsgType() {
        return MsgType;
    }
    public void setMsgType(String msgType) {
        MsgType = msgType;
    }
   
    public long getMsgId() {
        return MsgId;
    }
    public void setMsgId(long msgId) {
        MsgId = msgId;
    }

    public int getFuncFlag() {
        return FuncFlag;
    }

    public void setFuncFlag(int funcFlag) {
        FuncFlag = funcFlag;
    }
}

接下来TextMessage,文本属性TextMessage:

public class TextMessage extends BaseMessage{
    // 消息内容
    private String Content;
    
    public String getContent() {
        return Content;
    }
    public void setContent(String content) {
        Content = content;
    }
    
}

一定要注意,属性名称需要大写,属性名称需要大写,属性名称需要大写!!不要问我为啥这么强调。

新建接口MessageService,并实现接口:

public interface MessageService {
    /**
     * 微信公众号处理
     * @param request
     * @return
     */
    String newMessageRequest(HttpServletRequest request);
}
@Service("messageService")
public class MessageServiceImpl implements MessageService {
    private static final Logger LOGGER = LoggerFactory.getLogger(MessageServiceImpl.class);

    @Override
    public String newMessageRequest(HttpServletRequest request) {
        String respMessage = null;
        try {
            // xml请求解析
            Map requestMap = MessageUtil.xmlToMap(request);
            // 发送方帐号(open_id)
            String fromUserName = requestMap.get("FromUserName");
            // 公众帐号
            String toUserName = requestMap.get("ToUserName");
            // 消息类型
            String msgType = requestMap.get("MsgType");
            // 消息内容
            String content = requestMap.get("Content");
            LOGGER.info("FromUserName is:" + fromUserName + ", ToUserName is:" + toUserName + ", MsgType is:" + msgType);
            // 文本消息
            if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {
                //这里根据关键字执行相应的逻辑
                /*if(content.equals("xxx")){

                }*/
                //自动回复
                TextMessage text = new TextMessage();
                text.setContent("霍霍哈嘿"+content);
                text.setToUserName(fromUserName);
                text.setFromUserName(toUserName);
                text.setCreateTime(new Date().getTime());
                text.setMsgType(msgType);
                respMessage = MessageUtil.textMessageToXml(text);
            }
            // 事件推送
            else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) {
                String eventType = requestMap.get("Event");// 事件类型
                // 订阅
                if (eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) {
                    //文本消息
                    TextMessage text = new TextMessage();
                    text.setContent("我不管,我最美!!");
                    text.setToUserName(fromUserName);
                    text.setFromUserName(toUserName);
                    text.setCreateTime(new Date().getTime());
                    text.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
                    respMessage = MessageUtil.textMessageToXml(text);
                }
                // 取消订阅后用户再收不到公众号发送的消息,因此不需要回复消息
                else if (eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)) {// 取消订阅

                }
            }
        }
        catch (Exception e) {
            LOGGER.error("error......");
        }
        return respMessage;
    }
 }

上一篇文章,已经创建了WechatIndexController ,里面的GET方法用来验证token,下面直接加一个POST方法,用于进行消息管理。

@Autowired
private MessageService messageService;


@RequestMapping(method = RequestMethod.POST)
    public void post(HttpServletRequest request, HttpServletResponse response) {
        try {
            request.setCharacterEncoding("UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            log.error(e.getMessage(),e);
        }
        response.setContentType("text/html;charset=UTF-8");

        // 调用核心业务类接收消息、处理消息
        String respMessage = messageService.newMessageRequest(request);

        // 响应消息
        PrintWriter out = null;
        try {
            out = response.getWriter();
            out.print(respMessage);
        } catch (IOException e) {
            e.printStackTrace();
            log.error(e.getMessage(),e);
        } finally {
            out.close();
            out = null;
        }
    }

启动服务,关注此微信公众号,就会按照我们设置的显示啦!!

另外,图文的实现与之类似,这里不在进行过多的阐述,源码中已经实现,需要的可以直接下载查看。

源码:https://github.com/zhouminpz/...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/76412.html

相关文章

  • java微信公众开发):自动回复功能实现

    摘要:微信公众平台服务器配置通过后,就能进行下面的开发啦首先可以查看官方的说明文档普通消息的类型分为种文本消息图片消息语音消息视频消息小视频消息地理位置消息链接消息下面介绍实现文本的自动回复文本消息的结构是参数包含根据开发文档直接上手实体类 微信公众平台服务器配置通过后,就能进行下面的开发啦~~首先可以查看官方的说明文档:https://mp.weixin.qq.com/wiki... sh...

    hlcfan 评论0 收藏0
  • java微信公众开发(一):前期准备

    摘要:准备写一个系列文章,记录微信公众号的开发过程,也希望能为同为开发的提供一些思路,不才,见谅。微信公众号分为编辑模式和开发者模式,一旦启用了开发者模式,前期的一些例如自动回复菜单等会失效,望周知。 准备写一个系列文章,记录微信公众号的开发过程,也希望能为同为开发的提供一些思路,不才,见谅。 微信公众号分为编辑模式和开发者模式,一旦启用了开发者模式,前期的一些例如自动回复、菜单等会失效,望...

    fizz 评论0 收藏0
  • java微信公众开发(一):前期准备

    摘要:准备写一个系列文章,记录微信公众号的开发过程,也希望能为同为开发的提供一些思路,不才,见谅。微信公众号分为编辑模式和开发者模式,一旦启用了开发者模式,前期的一些例如自动回复菜单等会失效,望周知。 准备写一个系列文章,记录微信公众号的开发过程,也希望能为同为开发的提供一些思路,不才,见谅。 微信公众号分为编辑模式和开发者模式,一旦启用了开发者模式,前期的一些例如自动回复、菜单等会失效,望...

    cartoon 评论0 收藏0
  • java微信公众开发(二):配置token

    摘要:扫码登陆微信公众号平台,此时默认的是编辑模式,需要修改为开发者模式。若确认此次请求来自微信服务器,请原样返回参数内容,则接入生效,成为开发者成功,否则接入失败。 扫码登陆微信公众号平台,此时默认的是编辑模式,需要修改为开发者模式。 找到开发--->基本配置, showImg(https://segmentfault.com/img/bVbdTk2?w=323&h=786); showI...

    URLOS 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<