微信公众号开发<关键字匹配回复随机内容>

来源:互联网 发布:淘宝神笔模板 编辑:程序博客网 时间:2024/05/22 09:43

最后我实现的功能是用户回复公众号电影名称,公众号自动回复网盘链接,回复“美女”“搞笑”等关键词自动回复随机一张类别图片
1.公众号配置好开发地址

/**     * 接入微信     *     * @param request  request     * @param response response     * @throws IOException IOException     */    @RequestMapping(value = "/wechatconnect")    @ResponseBody    public void wechatconnect(HttpServletRequest request,                              HttpServletResponse response) throws IOException {        // 将请求、响应的编码均设置为UTF-8(防止中文乱码)        request.setCharacterEncoding("UTF-8");        response.setCharacterEncoding("UTF-8");        boolean isGet = request.getMethod().toLowerCase().equals("get");        PrintWriter out = response.getWriter();        try {            if (isGet) {                String signature = request.getParameter("signature");// 微信加密签名                String timestamp = request.getParameter("timestamp");// 时间戳                String nonce = request.getParameter("nonce");// 随机数                String echostr = request.getParameter("echostr");//随机字符串                // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败                if (SignUtil.checkSignature(signature, timestamp, nonce)) {                    logger.info("Connect the weixin server is successful.");                    response.getWriter().write(echostr);                } else {                    logger.error("Failed to verify the signature!");                }            } else {                String respMessage = "异常消息!";                try {                    respMessage = weixinPost(request);                    out.write(respMessage);                    logger.info("The request completed successfully");                    logger.info("to weixin server " + respMessage);                } catch (Exception e) {                    e.printStackTrace();                    logger.error("Failed to convert the message from weixin!");                }            }        } catch (Exception e) {            logger.error("Connect the weixin server is error.");        } finally {            out.close();        }    }

然后做关键词匹配的功能,用户给公众号发送的消息都会通过腾讯request请求到你配置的开发者地址上,然后就是实现自己的逻辑,包括自动回复相关内容;

    public String weixinPost(HttpServletRequest request) {        String respMessage = null;        try {            // xml请求解析            Map<String, String> 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 + content);            // 文本消息            if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {                //这里根据关键字执行相应的逻辑,只有你想不到的,没有做不到的                PicturePool pp = wechatResourceService.selectPictureWechat(content);                MoviePool mp = wechatResourceService.selectMovieWechat(content);                if (pp != null) {                    //自动回复图片                    ImgMessage imgMessage = new ImgMessage();                    WechatPicture wechatPicture = wechatResourceService.getPicture(pp.getId());                    Image image = new Image();                    image.setMediaId(wechatPicture.getMedia_id());                    imgMessage.setImage(image);                    imgMessage.setToUserName(fromUserName);                    imgMessage.setFromUserName(toUserName);                    imgMessage.setCreateTime(new Date().getTime());                    imgMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_IMAGE);                    respMessage = MessageUtil.imgMessageToXml(imgMessage);                } else if (mp != null) {                    //自动回复                    TextMessage text = new TextMessage();                    text.setContent(mp.getAddress());                    text.setToUserName(fromUserName);                    text.setFromUserName(toUserName);                    text.setCreateTime(new Date().getTime());                    text.setMsgType(msgType);                    respMessage = MessageUtil.textMessageToXml(text);                } else {                    TextMessage text = new TextMessage();                    text.setContent("亲,关键词匹配不上呢,请检查一下是否有同音字吧~\n" +                            "回复“美女”“男神”“海报”“搞笑”等命令,可以获得相对应的精美图片。\n" +                            "回复“电影”或者您想看的电影名称,即可得到在线观看的网址或云盘资源的链接。\n");                    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("客官,您来啦~\n" +                            "\n" +                            "回复“美女”“男神”“海报”“搞笑”等命令,可以获得相对应的精美图片。\n" +                            "回复“电影”或者您想看的电影名称,即可得到在线观看的网址或云盘资源的链接。\n" +                            "小编今日推荐:\n" +                            "菊豆\n" +                            "色戒\n" +                            "春光乍泄\n" +                            "苹果\n" +                            "生于妓院\n" +                            "(直接回复电影名称即可)");                    text.setToUserName(fromUserName);                    text.setFromUserName(toUserName);                    text.setCreateTime(new Date().getTime());                    text.setMsgType(msgType);                    respMessage = MessageUtil.textMessageToXml(text);                } else if (eventType.equals(MessageUtil.EVENT_TYPE_CLICK)) {// 自定义菜单点击事件                    String eventKey = requestMap.get("EventKey");// 事件KEY值,与创建自定义菜单时指定的KEY值对应                    logger.info("eventKey is:" + eventKey);                    if (eventKey.equals("zhaodianying")) {                        TextMessage text = new TextMessage();                        text.setContent("回复“电影” 或 直接回复电影名称,小编就会很快回复您观看网址噢。\n" +                                "回复“美女”“男神”“海报”“搞笑”等命令,可以获得相对应类型的精美图片。\n" +                                "您还可以添加客服微信:girlnevercryy进入“逗芽电影福利红包群”,各种福利,任性红包满天飞~~~");                        text.setToUserName(fromUserName);                        text.setFromUserName(toUserName);                        text.setCreateTime(new Date().getTime());                        text.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);                        respMessage = MessageUtil.textMessageToXml(text);                    }                    if (eventKey.equals("qiuziyuan")) {                        TextMessage text = new TextMessage();                        text.setContent("如果亲没有找到自己中意的电影资源,请添加客服微信:jfwx-hrd 把想要的电影资源名称留言给小编,小编就会立刻马不停蹄的免费去帮您找噢~\n");                        text.setToUserName(fromUserName);                        text.setFromUserName(toUserName);                        text.setCreateTime(new Date().getTime());                        text.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);                        respMessage = MessageUtil.textMessageToXml(text);                    }                }            }        } catch (Exception e) {            logger.error("error......");            e.printStackTrace();        }        return respMessage;

最终实现效果如图所示:
这里写图片描述

阅读全文
0 0